DeepLearning
深層学習
Keras
確率的勾配降下法
More than 1 year has passed since last update.

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}


参考

ンライン機械学習 (機械学習プロフェッショナルシリーズ)

勾配降下法の最適化アルゴリズムを概観する | コンピュータサイエンス | POSTD

勾配降下法の最適化アルゴリズム