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

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

今回はAdaDelta。
AdaDelta

AdaDeltaは、何かの最適化アルゴリズムの拡張版だったりするの?

AdaDeltaは前回説明したRMSpropの拡張版だな。

ということは、RMSpropと併記してもらえると分かり易そうだね。

というわけで、RMSpropとAdaDeltaの更新式を並べてみよう。
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}
\)
AdaDelta
\(
\begin{eqnarray}
E[g^2]_t&=&\beta E[g^2]_{t-1}+(1-\beta)(\nabla J(\theta_t))^2\\
E[\Delta\theta^2]_t&=&\beta E[\Delta\theta^2]_{t-1}+(1-\beta)(\theta_t)^2\\
\displaystyle\theta_{t+1}&=&\theta_t-\frac{\sqrt{E[\Delta\theta^2]_t+\epsilon}}{\sqrt{E[g^2]_t+\epsilon}}\nabla J(\theta_t)\\
\theta_{t+1}&=&\theta_t+\Delta\theta_t\\
E[g^2]&:&過去の勾配の2乗の指数移動平均\\
E[\Delta\theta^2]_t&:&過去の更新量の2乗の指数移動平均
\end{eqnarray}
\)

なんかヤベェことになってきたな・・・。

特徴としては、学習率と言うハイパーパラメータが存在しない点だな。

あ、ほんとだ。

といっても、\(\theta_0\)というパラメータの初期値は必要だけどね。

あと、そこから自動で学習率を調整していく感じか。

一応欠点もあって、最終的には学習率が1近傍に収束するようで、
振動しやすいというのがあるな。

でも、ほぼ自動でいい感じにやってくれそうな最適化アルゴリズムが出てきたって感じはするね。
まとめ

まとめだよ。
- AdaDeltaについて説明。
- RMSpropの拡張版に当たる。
- 学習率というハイパーパラメータ無しで動作する。
- 最終的な学習率は1近傍になるため振動しやすいらしい。
バックナンバーはこちら。
Pythonで動かして学ぶ!あたらしい線形代数の教科書
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロからはじめるPID制御
OpenCVによる画像処理入門
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Pythonによる制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
コメント