MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/
はじめに
の、
MATLAB,Python,Scilab,Julia比較 第4章 その94【モーメンタム④】
MATLAB,Python,Scilab,Julia比較 第4章 その95【モーメンタム⑤】
を書き直したもの。
ニューラルネットワークの最適化アルゴリズムについて。
前回まで勾配降下法の復習。今回からモーメンタムの話が始まる。
モーメンタムの更新式、モーメンタムの動作イメージについて。
モーメンタムへ至る道【再掲】
まずはモーメンタムへ至るフローを再掲
- 勾配降下法の更新式(済)
- 勾配降下法の動作イメージ(済)
- モーメンタムの更新式
- モーメンタムの動作イメージ
- モーメンタムのプログラムフロー
- モーメンタムによる分類の学習プログラム
今回は、この中の「モーメンタムの更新式」「モーメンタムの動作イメージ」
モーメンタム
勾配降下法の更新式と動作イメージの確認が終わったから、
ついにモーメンタムの話になる。
ちなみにモーメンタムも最適化アルゴリズムの中ではかなりシンプルな部類になる。
(つまりシンプルぢゃねぇのが控えてる・・・。)
モーメンタムは簡単で名前の通り、
「過去の勢いを乗っける」。
モーメンタムは直訳すると「勢い」って意味になる。
これにより名前の通りということになる。。
モーメンタムの更新式
以下がモーメンタムの更新式。
\(
\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\)のみで数式が作られる。
次のページへ
次のページでは「モーメンタムの動作イメージ」について
コメント