Kerasメモ(Optimizer)
optimizerに関するメモ。
これまでに見たサンプルでは、Neural Style Transferで準ニュートン法(L-BFGS-B)が出てくる以外は、「Adam」または「AdamWarmup」が多かった。
Keras公式
Optimizers - Keras Documentation
Rに出てくるようなoptimizerは出てこない。
パラメータ推定(多変量正規分布) - ichou1のブログ
PyTorchの方が種類は多い。
torch.optim — PyTorch master documentation
「Adam」は「RMSprop」の改良版だし、「Adam」から「Adamax」や「Nadam」といった派生版が登場する。
いずれにしても、「最適解(最尤値)を求める」という、根底にある概念は共通しているので、まとめておく。
使用する用語の整理。
参考サイトによると、「誤差関数」と「損失関数」は同じ意味で考えてよさそう。
出来上がったモデルを使っての推定なら「誤差関数」、学習中モデルの最適化度合いを測るなら「損失関数」といったところか。
誤差関数(Error function):測定データとモデル関数の誤差を測る
例)2乗和誤差(Sum of Squared Error:SSE)、交差エントロピー誤差(Cross Entropy Error)
損失関数(Loss function):学習時にパラメータを最適化するための指標
数式では、誤差関数("E")で表されるケースが多いので、ここでも"E"を使う。
最適化の対象となるパラメータを”w”とおく。
SGD(Stochastic gradient descent optimizer)
keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)
- 勾配が最も急な方向へパラメータ更新
- 学習率は固定
- 前回の更新量Δwにα倍して加算する
AdaGrad
keras.optimizers.Adagrad(lr=0.01, epsilon=None, decay=0.0)
- 過去の勾配情報の2乗を累積(全て均等に累積)
- 累積値が増加すると学習率は減少(徐々に減衰)
RMSprop
keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=None, decay=0.0)
- 過去の勾配情報の2乗を累積(直近の勾配情報を優先)
- 減衰率を過去の勾配に乗算することで、過去の勾配を忘れていく
Adadelta
keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=None, decay=0.0)
- RMSpropの改良版
- sを導入することで、直近の勾配情報をより優先して計算する
- 学習率を使わない(関数のパラメータとしては存在する)
Adam(Adaptive moment estimation)
keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
- Hybrid of Momentum and RMSprop ( RMSprop + Momentum)
- m : exponential moving average of the gradient(過去の勾配情報の指数移動平均)
- v : squared gradient(過去の勾配情報の2乗)
- β1 : 1次モーメントの減衰率
- β2 : 2次モーメントの減衰率
time stepとともに減少する調整係数をかけている。