ichou1のブログ

主に音声認識、時々、データ分析のことを書く

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”とおく。

gradient value for w(勾配情報)



\frac{\partial E(w) }{ \partial w } \ または \ \nabla E(w)


SGD(Stochastic gradient descent optimizer)
keras.optimizers.SGD(lr=0.01, momentum=0.0, decay=0.0, nesterov=False)
  • 勾配が最も急な方向へパラメータ更新
  • 学習率は固定
  • 前回の更新量Δwにα倍して加算する



w_{t+1} \gets w_t - \eta \ \nabla E(w_t) + \alpha \Delta w_t \\
\ \\
\eta : \mathtt{learning \ rate} \\
\alpha : \mathtt{momentum}


AdaGrad
keras.optimizers.Adagrad(lr=0.01, epsilon=None, decay=0.0)
  • 過去の勾配情報の2乗を累積(全て均等に累積)
  • 累積値が増加すると学習率は減少(徐々に減衰)



w_{t+1} \gets w_t - \frac {\eta_0} {\sqrt{h_t} + \varepsilon } \nabla E(w_t) \\
h_t = h_{t-1} +  ( \nabla E(w_t) )^ 2\\
h_0 = 0 \\
\eta_0 : \mathtt{initial \ learning \ rate}


RMSprop
keras.optimizers.RMSprop(lr=0.001, rho=0.9, epsilon=None, decay=0.0)
  • 過去の勾配情報の2乗を累積(直近の勾配情報を優先)
  • 減衰率を過去の勾配に乗算することで、過去の勾配を忘れていく



w_{t+1} \gets w_t - \frac {\eta_0} {\sqrt{h_t } + \varepsilon} \nabla E(w_t) \\
\ \\
h_t = \rho h_{t-1} +  (1-\rho)(\nabla E(w_t)) ^ 2\\
h_0 = 0 \\
\rho : \mathtt{decay \ rate} \\
\eta_0 : \mathtt{initial \ learning \ rate}


Adadelta
keras.optimizers.Adadelta(lr=1.0, rho=0.95, epsilon=None, decay=0.0)
  • RMSpropの改良版
  • sを導入することで、直近の勾配情報をより優先して計算する
  • 学習率を使わない(関数のパラメータとしては存在する)



w_{t+1} \gets w_t - \frac {\sqrt{s_t  + \varepsilon }} {\sqrt{h_t + \varepsilon} } \nabla E(w_t) \\
\ \\
h_t = \rho h_{t-1} +  (1-\rho)(\nabla E(w_t)) ^ 2\\
s_t = \rho s_{t-1} + (1 - \rho) ( \frac {\sqrt{s_t + \varepsilon} } {\sqrt{h_t + \varepsilon} } \nabla E(w_t))^2 \\ 
\rho : decay \ rate \\
h_0 = 0 \\
s_0 = 0 \\


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次モーメントの減衰率



w_{t+1} \gets w_t - \eta \frac {\hat{m}} {\sqrt{\hat{v} } + \varepsilon } \\
\ \\
m_t = \beta_1  m_{t-1} + (1 - \beta_1) \nabla E (w_t) \\
v_t = \beta_2  v_{t-1} + (1 - \beta_2) (\nabla E (w_t))^2 \\
\hat{ m } = \frac {m_t} {1 - \beta_1^t} \\
\hat{ v } =  \frac {v_t} {1-\beta_2^t} \\ 
m_0 = 0 \\
v_0 = 0 \\
\eta : \mathtt{learning \ rate}



time stepとともに減少する調整係数をかけている。

\frac {1} {1 - \beta^t}

f:id:ichou1:20191020093817p:plainf:id:ichou1:20191020093831p:plain