バックナンバーはこちら。
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
分類安定化のもう一つの対策案?

無事、安定して分類ができるようになったからこれで終了だね。

いや、まだだ。

え゛

以前、分類の安定化の対策の一つに最適化アルゴリズムを入れる話をしたと思う。

確かにそういうこと言っていた気がする・・・。

まぁ、本来はもっと複雑なネットワークで起きる問題に対しての対策案だから、
今回の問題に対しては効能は無いと思うのだが、
とりあえずやってみようって話。

しようがねぇ。やるしかねぇのか・・・。
最適化アルゴリズム

で、その最適化アルゴリズムってどんなの?

端的に言うと、学習率を動的に調整していい感じに学習が進むような仕掛けだな。

確か、学習率ってハイパーパラメータで、動かせない値じゃなかったっけ?

勾配降下法としてはそうだな。
それ以外の最適化アルゴリズムだと、初期値としての学習率はハイパーパラメータだが、
その後の学習率は状況に応じて変動するのが一般的だ。

学習率って大きいと収束は早くなる半面、発散しやすくなって
小さい場合は、発散はしないけど収束が遅くなるとの局所最適解にハマりやすいって問題があったかな。

そうそう。

これを動的に変えられるとすると、この特性のいいとこどりができるってことか。

理想はそうだけど、実際はいろいろうまく行かないパターンも多いようだ。
そのため様々な最適化アルゴリズムが生まれている。

最適化アルゴリズムって一個じゃないのか?!

むっちゃ大量にある。

それを全部やるとかじゃないよね?

流石にそれは無理があるな。
比較的シンプルなものを一つ、主流なもののベースとなっているものを一つの計二つくらいが妥当だろう。

じゃー、まずシンプルな一つ目から教えてもらおうか。

最もシンプルな最適化アルゴリズムは勾配降下法。
そして、それをベースに少し拡張したものがモーメンタム。
今回はこのモーメンタムを扱う。
解説のフロー

どんな感じで説明するの?

以下の流れかな。
- 勾配降下法の更新式
- 勾配降下法の動作イメージ
- モーメンタムの更新式
- モーメンタムの動作イメージ
- モーメンタムのプログラムフロー
- モーメンタムによる分類の学習プログラム

勾配降下法っていままでやってたやつ?

そうだね。
具体的な更新式は見せたことなかったと思うから、
復習も兼ねて確認しておこう。
まとめ

まとめだよ。
- 最適化アルゴリズムを取り扱う。
- 今回のネットワークだとさほど恩恵はないが知っていて損はない。
- まずはモーメンタムから解説&実験をしていく。
- 最初は復習を兼ねて勾配降下法についても確認する。
バックナンバーはこちら。
Pythonで動かして学ぶ!あたらしい線形代数の教科書
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロからはじめるPID制御
OpenCVによる画像処理入門
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Pythonによる制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
コメント