確率的勾配法あれこれまとめ

Kerasで選択できる最適化アルゴリズムそれぞれの違いと使い所がいまいちわからんかったので調べてみた。


Incorporating Nesterov Momentum into Adamがアルゴリズムを整理してくれているので理解しやすかった。

とりあえずざっくりと俯瞰した感じだと、いかに効率良く傾斜を降下していくかという課題を解決するっていう大枠からはみ出るものはない。そんで、構築しているモデルの種類やサイズによってベストなアルゴリズムは変わってくるので、突き詰めるのであれば要実験。ただ、上記論文は、NadamかRSMProp使っときゃいいんじゃないっすか、みたいなこと言ってる。なんにしろ2000年代後半以降で進化が進んでいる分野であり、今後もアップデートがあるだろうから追っていきたい。

SGD

まずはオーソドックスな勾配法。


g_t ← \nabla_{\theta_1} f(\theta_{t-1}) \\
\theta_t ← \theta_{t-1} - \eta g_t

後述するMomentum法や、NAGもKerasの中ではSGDメソッドの中でサポートされている。

Mpomentum

勾配に加えてMomentumベクトル mu を加えてパラメータを更新する。


g_t ← \nabla_{\theta_1} f(\theta_{t-1}) \\
m_t ← m_{t-1} + g_t \\
\theta_t ← \theta_{t-1} - \eta g_t

Nesterov's accelerated gradient(NAG)

Momuentum法に対して、勾配計算の段階ですでにMomentumを考慮することで、現在のパラメータ\thetaではなく、次のパラメーターの推定値について計算することで効率よく予測するアルゴリズム。


g_t ← \nabla_{\theta_1} f(\theta_{t-1} - \eta \mu m_{t-1}) \\
m_t ← m_{t-1} + g_t \\
\theta_t ← \theta_{t-1} - \eta g_t

AdaGrad

それぞれ個別のパラメータ\theta_iに対して異なる学習率を適用するアルゴリズム。
学習率の補正にそれまでのパラメータ[\theta_i]の勾配の二乗和を用いるのでL2ノルムベースのアルゴリズムと分類される。


g_t ← \nabla_{\theta_1} f(\theta_{t-1}) \\\\
n_t ← n_{t-1} + g^2_t \\
\theta_t ← \theta_{t-1} - \eta \frac{g_t}{\sqrt{n_t}+\epsilon}

ここでn_tはさきのそれぞれのパラメータの勾配の二乗和のタイムステップtまでのベクトル

RSMProp

これもL2ノルムベース。前述の[n]に対して、勾配の二乗の減衰平均E[g^2_t]を用いる。AdaGradで大きくなりすぎる[n]ことが問題だったがこれで解消。


g_t ← \nabla_{\theta_1} f(\theta_{t-1}) \\
n_t ← \nu n_{t-1} + (1-\nu)g^2_t \\
\theta_t ← \theta_{t-1} - \eta \frac{g_t}{\sqrt{n_t}+\epsilon}

Adam

Momentum法とRMSPropを組み合わせたもの。
勾配の1乗と勾配の2乗、両方使えばいいじゃん的な。


g_t ← \nabla_{\theta_1} f(\theta_{t-1}) \\

m_t ← \mu m_{t-1} + (1-\mu)g_t \\
\hat m_t ← \frac{m_t}{1-\mu^t} \\

n_t ← \nu n_{t-1} + (1-\nu)g^2_t \\
\hat n_t ← \frac{n_t}{1-\nu ^t} \\


\theta_t ← \theta_{t-1} - \eta \frac{g_t}{\sqrt{\hat n_t}+\epsilon}

AdaMax

AdamのL2ノルムを拡張し無限にするとよりシンプルなアルゴリズムとなる、らしい。


g_t ← \nabla_{\theta_1} f(\theta_{t-1}) \\

m_t ← \mu m_{t-1} + (1-\mu)g_t \\
\hat m_t ← \frac{m_t}{1-\mu^t} \\

n_t ← max(\mu n_{t-1}, |g_t|) \\

\theta_t ← \theta_{t-1} - \eta \frac{g_t}{\sqrt{n_t}+\epsilon}

Nadam

Adamと違ってNAGとRMSPropを組み合わせたもの。


g_t ← \nabla_{\theta_1} f(\theta_{t-1}) \\
\hat g_t ← \frac{g_t}{1-\prod_{i=1}^{t} \mu_i}\\


m_t ← \mu m_{t-1} + (1-\mu)g_t \\
\hat m_t ← \frac{m_t}{1-\prod_{i=1}^{t} \mu_i} \\

n_t ← \nu n_{t-1} + (1-\nu)g^2_t \\
\hat n_t ← \frac{n_t}{1-\nu ^t} \\

\bar \mu_t ← (1- \mu_t)\hat g_t + \mu_{t+1} \hat \mu_t \\

\theta_t ← \theta_{t-1} - \eta \frac{\bar \mu_t}{\sqrt{\hat n_t}+\epsilon}