バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia4-backnumber/
はじめに
Adamに至るまでの最適化アルゴリズムの系譜の説明をすることとなった。
今回はAdam。
登場人物
博識フクロウのフクさん

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
最適化アルゴリズムいろいろ【再掲】

まずは説明予定の最適化アルゴリズムを再掲。
- AdaGrad(済)
- RMSprop(Root Mean Square Propagation)(済)
- AdaDelta(済)
- Adam(Adaptive Moment Estimation)

今回は本命のAdam。
Adam

やっと本命のAdamに到達だね。

今まで説明した中で一番ややこしい奴だな。

(まぁ、そうなんだろうなとは思ってたけど・・・。)

AdamはモーメンタムとRMSpropの合わせ技のような最適化アルゴリズムだ。

ということは、モーメンタム、RMSpropと比べるといい感じってことか。

というわけで、モーメンタム、RMSprop、Adamの更新式を併記する。
モーメンタム
\(
\begin{eqnarray}
v_{t+1}&=&\beta v_t+\alpha\nabla J(\theta_t)\\
\theta_{t+1}&=&\theta_t-\alpha v_{t+1}
\end{eqnarray}
\)
RMSprop
\(
\begin{eqnarray}
E[g^2]_t&=&\beta E[g^2]_{t-1}+(1-\beta)(\nabla J(\theta_t))^2\\
\displaystyle\theta_{t+1}&=&\theta_t-\frac{\alpha}{\sqrt{E[g^2]_t+\epsilon}}\\
E[g^2]&:&過去の勾配の2乗の指数移動平均\\
\end{eqnarray}
\)
Adam
\(
\begin{eqnarray}
m_{t+1}&=&\beta_1 m_{t-1}+(1-\beta_1)\nabla J(\theta_t)\\
v_{t+1}&=&\beta_2 v_{t-1}+(1-\beta_2)(\nabla J(\theta_t))^2\\
\displaystyle\hat{m}_{t+1}&=&\frac{m_{t+1}}{1-\beta_1}\\
\displaystyle\hat{v}_{t+1}&=&\frac{v_{t+1}}{1-\beta_2}\\
\displaystyle\theta_{t+1}&=&\theta_t-\frac{\alpha}{\sqrt{\hat{v}_{t+1}}+\epsilon}\\
m_t&:&1次のモーメント\\
v_t&:&2次のモーメント\\
\hat{m}_t,\hat{v}_t&:&バイアス補正項\\
\beta_1,\beta_2&:&指数移動平均係数(\beta_1=0.9,\beta_2=0.999)
\end{eqnarray}
\)

なんかAdamがヤベェ・・・。

やってることはシンプルではある。
勾配の1次と2次の指数移動平均を算出。
1次はモーメンタムのように過去の勢いを乗せる。
2次はRMSpropのように現在及び近い過去の勾配の大きさが更新の抑制になる。
この2つのバランスの間で更新をする。

うーん、なんか勢いを乗せるものと抑制するものが同居している感じなのか・・・。

まぁ、Adamが効果を発揮するのは、ネットワークが複雑になり、オンライン学習やミニバッチ学習のように学習データを確率的に利用する場合だから、ここではこういうもんだと思うしかないな。

まぁ、モーメンタムとRMSpropはわかったから、それの合わせ技でAdamって思っておけば大丈夫か。
まとめ

まとめだよ。
- 最適化アルゴリズムAdamについて説明。
- モーメンタムとRMSpropの合わせ技。
- 1次の勾配と、2次の勾配の指数移動平均を使用する。
バックナンバーはこちら。
Pythonで動かして学ぶ!あたらしい線形代数の教科書
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロからはじめるPID制御
OpenCVによる画像処理入門
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Pythonによる制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
コメント