バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia4-backnumber/
はじめに
ニューラルネットワークの最適化アルゴリズムについて。
モーメンタムの話になるが、基本の勾配降下法から話が始まる。
前回まで勾配降下法の復習。今回からモーメンタムの話が始まる。
登場人物
博識フクロウのフクさん

イラスト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
モーメンタムへ至る道【再掲】

まずはモーメンタムへ至るフローを再掲
- 勾配降下法の更新式(済)
- 勾配降下法の動作イメージ(済)
- モーメンタムの更新式
- モーメンタムの動作イメージ
- モーメンタムのプログラムフロー
- モーメンタムによる分類の学習プログラム

今回は、この中の「モーメンタムの更新式」
モーメンタム

勾配降下法の更新式と動作イメージの確認が終わったから、
ついにモーメンタムかな。

ちなみにモーメンタムも最適化アルゴリズムの中ではかなりシンプルな部類になる。

(つまりシンプルぢゃねぇのが控えてるってことか・・・。)

モーメンタムは簡単で名前の通り、
「過去の勢いを乗っける」だ。

(何が簡単で何が名前の通りなのかがわからん・・・)

モーメンタムは直訳すると「勢い」って意味なんだよね。

それで名前の通りとか言ってたのか。
モーメンタムの更新式

以下がモーメンタムの更新式。
\(
\begin{eqnarray}
v_{t+1}&=&\beta_t+\alpha\nabla J(\theta_t)\\
\theta_{t+1}&=&\theta_t-av_{t+1}\\
v_t&:&モーメンタムベクトル\\
\beta&:&指数移動平均の性格を決定する係数。通常は0.9\\
\alpha&:&学習率\\
\end{eqnarray}
\)

指数移動平均ってなんだ?

過去の値よりも直近の値に比重を置いて計算された平均値だな。

なぜこの計算式でそうなるのかがわからん。

先ほどの式はいわゆる漸化式。
これを\(t-2\sim t+1\)で展開すると以下になる。
\(
v_{t+1}=\alpha\nabla J(\theta_t)+\beta\{\alpha\nabla J(\theta_{t-1}+\beta(\alpha\nabla J(\theta_{t-2}+\beta v_{t-2})))\}
\)

これを見てもわからん・・・。

ポイントは\(\beta v_{t-2}\)。
\(t+1\)の段階で見ると、ここには\(\beta\)が3回かかっていることになる。
つまり以下の値まで減衰している。
\(0.9\times0.9\times0.9=0.729\)

つまり、過去の値の影響が減るから、直近の値に比重が寄るってことか。

そうそう。
まぁ、実際の指数移動平均は以下なので、少し読み替える必要はあるけどね。
\(
{\rm EMA}(t)=\beta\cdot{\rm EMA}(t-1)+(1-\beta)\cdot x(t)
\)

あーなるほど。
基本は係数は\(\beta\)のみで数式が作られるのね。
まとめ

まとめだよ。
- モーメンタムの更新式について確認。
- 指数移動平均を利用して直近の値を重視する。
- 実際の指数移動平均とは異なっているので、その点は注意。
バックナンバーはこちら。
Pythonで動かして学ぶ!あたらしい線形代数の教科書
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロからはじめるPID制御
OpenCVによる画像処理入門
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Pythonによる制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
コメント