口下手エンジニアの悪あがき

自動車エンジニアのつぶやき

最適化アルゴリズムの種類

最適化アルゴリズムとは、誤差が最小になるように重みを調整していくときに、なるべく早く誤差が少ない重みを見つけ出すためのアルゴリズムであり、その代表的なものを挙げる。

 

SDG(確率的勾配降下法 Stochastic Gradient Descent)

勾配降下法でランダムにシャッフルして指定したミニバッチ数ごとに重みを更新する。勾配が小さい方向に学習が進みにくく、学習時間大。

W_t:=-\alpha \nabla E(W_t)

ここで、\alpha:学習率 \nabla E(W_t):勾配

モメンタム

SDGでは勾配が小さい場合に学習が進まない場合があるため、勾配に速度 {\it v}を足すことで勾配の大きさを調整する。


v_t := \beta v_{t-1}-\alpha \nabla E(W_{t-1})

W_{t}:=W_{t-1}+v_t

ここで、\alpha:モメンタム係数

 

ネステロフのモメンタム

モメンタムの改良版、更新した未来の勾配をもとに速度を更新する。

v_t := \beta v_{t-1}-\alpha \nabla E(W_{t-1}+\beta v_{t-1})

W_{t}:=W_{t-1}+v_t

 

AdaGrad

初期値から大きく変わった重みはあまり更新しないように、動いた距離に応じて重み調整。勾配の2乗を累積し、大きくアップデートされたパラメータほど更新量を小さくする。

h_t=h_{t-1}+\nabla E(W_t)\odot\nabla E(W_t)

\displaystyle \alpha _t=\alpha _0\frac{1}{\sqrt{h_t}+\epsilon}

W_{t+1}=W_t-\alpha_t\nabla E(W_t)

 ここで、\alpha:初期学習係数

RMSprop

AdaGradの改良版、学習率の減少を解消する。過去の累積と最新情報を \beta:1-\beta の比率で案分しながら累積。

h_t=\beta h_{t-1}+(1-\beta)\nabla E(W_t)\odot\nabla E(W_t)

\displaystyle \alpha _t=\alpha _0\frac{1}{\sqrt{h_t}+\epsilon}

W_{t+1}=W_t-\alpha_t\nabla E(W_t)

 ここで、\beta:減衰率

Adam(Adaptive Momentum)

モメンタムとAdagrad/RMSpropを掛け合わせたもの。もっとも使われている。

m_{t+1}=\beta_1m_t+(1-\beta_1)\nabla E(W_t)

v_{t+1}=\beta_2v_t+(1-\beta_2)\nabla E(W_t)^2

\displaystyle \hat{m}=\frac{m_{t+1}}{1-\beta_1^t}

\displaystyle \hat{v}=\frac{v_{t+1}}{1-\beta_2^t}

\displaystyle W_{t+1}=W_t-\alpha\frac{\hat{m}}{\sqrt{\hat{v}}+\epsilon}