バックナンバーはこちら。
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}
\theta_{t+1}&=&\theta_t-\alpha\nabla J(\theta)\\
\theta_t&:&パラメータベクトル(重み、バイアス等)の現在値\\
\alpha&:&学習率\\
\nabla J(\theta)&:&誤差(損失)関数Jにおけるパラメータ\theta_tの勾配\\
\end{eqnarray}
\)

\(\theta_{t+1}\)が新しいパラメータってことだね。

\(\nabla J\)ってのがイマイチぴんとこないな・・・。

以前、どこかで説明したかもしれないが、
\(\nabla\)はベクトルとしての勾配を示す。
\(J(\theta)\)が誤差関数なので、
結果として\(\nabla J(\theta)\)は連鎖律で求めた
誤差関数に対しての特定のパラメータによる微分ってことになるな。

あー、この部分がいわゆる誤差伝播法で求められるやつか。

そうそう。

そして、勾配と逆の方向が極小値が居るはずだから、勾配を引く。
ただし、変位する値を調整したから学習率を掛けておく。
って感じか。

正解。

言葉だけで説明されてた部分だけど、
ちゃんと数式も交えて考えると割と挙動がハッキリするね。

まぁ、勾配降下法は事前にプログラムで実現しているから
イメージしやすいってのもあるだろうね。

そうすると、これ以外の最適化アルゴリズムはちょっと苦労しそうだな。

勾配降下法の更新式を理解できていれば、そこらへんの障壁はだいぶ低くなっていると思って良いだろう。
まとめ

まとめだよ。
- 勾配降下法について復習。
- 今回改めてまじめに更新式を確認。
- 勾配降下法の更新式が一番シンプルなので今後の最適化アルゴリズムの更新式を見る際は比較対象になりやすい。
バックナンバーはこちら。
Pythonで動かして学ぶ!あたらしい線形代数の教科書
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロからはじめるPID制御
OpenCVによる画像処理入門
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Pythonによる制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
コメント