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

イラスト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)

今回はRMSprop。
RMSprop

RMSpropは前回のAdaGradの改良版という位置づけになる。
AdaGradとRMSpropの両方の更新式を出そう。
AdaGrad
\(
\begin{eqnarray}
g_{t+1}&=&g_t+(\nabla J(\theta_t))^2\\
\displaystyle\theta_{t+1}&=&\theta_t-\frac{\alpha}{\sqrt{g_{t+1}}+\epsilon}
\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}
\)

なんかEの配列みたいなのがいる・・・。

\(E[g^2]\)は、それで一つの変数と思えばOKだ。
指数移動平均の処理を入れるためか、期待値という意味合いで\(E[g^2]\)と表記しているようだな。

とすると、かなりAdaGradと似てるね。
違いは、今言ってた指数移動平均を取ってる部分か。

そうそう。
AdaGradは学習が進むと学習率がほぼ0になってしまうのだけど、
これは過去の勾配の二乗が累積し続けているせい。
ここを指数移動平均にすることで、過去の勾配の影響を減らして、現在の勾配の影響度を増やす意味になる。

とすると、かなりAdaGradと似てるね。
違いは、今言ってた指数移動平均を取ってる部分か。

そうそう。
この点がAdaGradからの改良点と言えるのだろう。
まとめ

まとめだよ。
- RMSpropについて説明。
- AdaGradの完了版であるため、AdaGradと更新式を比較。
- AdaGradでは2次の勾配の累積だったものが、2次の勾配の指数移動平均に。
- これにより、極小値近辺やプラトーになっても更新を続けられる。
バックナンバーはこちら。
Pythonで動かして学ぶ!あたらしい線形代数の教科書
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロからはじめるPID制御
OpenCVによる画像処理入門
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Pythonによる制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
コメント