MATLAB,Python,Scilab,Julia比較 第4章 その94【モーメンタム④】

MATLAB,Python,Scilab,Julia比較 第4章 その94【モーメンタム④】 数値計算
MATLAB,Python,Scilab,Julia比較 第4章 その94【モーメンタム④】

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

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をコピーしました