MATLAB,Python,Scilab,Julia比較 第4章 その106【最適化アルゴリズム⑤】

MATLAB,Python,Scilab,Julia比較 第4章 その106【最適化アルゴリズム⑤】 数値計算
MATLAB,Python,Scilab,Julia比較 第4章 その106【最適化アルゴリズム⑤】

バックナンバーはこちら。
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で動かして学ぶ!あたらしい線形代数の教科書

Amazon.co.jp

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

Amazon.co.jp

ゼロからはじめるPID制御

https://amzn.to/3SvzuyR

OpenCVによる画像処理入門

https://amzn.to/498ZUgK

恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]

Amazon.co.jp

Pythonによる制御工学入門

Amazon.co.jp

理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析

https://amzn.to/3UAunQK

コメント

タイトルとURLをコピーしました