MATLAB,Python,Scilab,Julia比較 第4章 その45【勾配降下法③】

MATLAB,Python,Scilab,Julia比較 第4章 その45【勾配降下法③】 数値計算
MATLAB,Python,Scilab,Julia比較 第4章 その45【勾配降下法③】

バックナンバーはこちら。
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

【再掲】勾配降下法の確認プログラムのフロー

太郎くん
太郎くん

とりあえず、勾配降下法の確認プログラムのフローを再掲

  • 目的関数の定義
  • 目的関数の導関数の定義
  • 入力初期値設定
  • ハイパーパラメータの設定
  • 勾配降下法の実装
  • 結果表示
  • グラフへのプロット
フクさん
フクさん

「入力初期値設定」「ハイパーパラメータの設定」「グラフへのプロット」について掘り下げる

入力初期値設定

フクさん
フクさん

まずは、入力初期値設定だが、
これは単純に2.9にしておこう。
前回みせたグラフをベースにするとこの位置を入力初期値とする。

勾配降下法入力初期値
太郎くん
太郎くん

なるほど。
上の方から下っていく感じを想定するのか。
確かに名前のとおり勾配を降下していく感じがしそう。

ハイパーパラメータの設定

フクさん
フクさん

次はパイパーパラメータ。

太郎くん
太郎くん

そもそもパイパーパラメータがわからん。

フクさん
フクさん

モデルが学習する上での設定値だと思えばOKだ。
最適化アルゴリズム毎に変わるところではあるな。

太郎くん
太郎くん

じゃー、とりあえずは今回のハイパーパラメータがどんなのかを見て察するか。

フクさん
フクさん

今回に於けるハイパーパラメータは以下

  • 学習率
    • 勾配大きさに対して重みを変動させる係数
  • 最大イテレーション数
    • 勾配降下法の実行回数
太郎くん
太郎くん

なるほど。
確かに学習時の設定値だ。

グラフへのプロット

フクさん
フクさん

グラフへのプロットだが、
学習の経緯も見れた方が良い。
というわけで、学習過程の入力の軌跡や誤差の動きを記録する。
まぁ、勾配降下法を実施する際にfor分で回すことになるから、
それぞれの変数を配列として保存して、あとでグラフで表示するって感じだな。
具体的な実装は、これから作るソースコードを見てもらった方が良いだろう。

太郎くん
太郎くん

じゃー、とりあえずは今回のハイパーパラメータがどんなのかを見て察するか。

プログラムの振る舞いの雰囲気

フクさん
フクさん

で、実際のプログラムの振る舞いを事前に出しておこう。
分かり易いようにアニメーションgifにしてある。

勾配降下法(アニメーション)、Objective Function、Learning Process、Iteration、f(x)
太郎くん
太郎くん

なんかごちゃごちゃ動いとる!

太郎くん
太郎くん

でも、最小値まで行ってないね?

フクさん
フクさん

こういう状況を「局所最適解に陥る」と言ったりする。
最適解は共に誤差関数の極小値ではあるのだが、最小値ではない。
最小値ではない極小値が局所最適解。
最小値な極小値が大域最適解。
って呼ばれている。

太郎くん
太郎くん

なるほど。
これが勾配降下法の問題ってやつか。

フクさん
フクさん

それ以外にも様々な問題はあるのだが、
直近で我々がぶち当たる問題はこれだな。

まとめ

フクさん
フクさん

まとめだよ。

  • 勾配降下法プログラムのフローで分かりにくいところを説明。
  • 入力初期値は学習のスタート地点。
  • ハイパーパラメータは学習アルゴリズムの設定値。
  • グラフへのプロットは履歴付きで。
  • プログラムの振る舞いをアニメーションgifで確認。

バックナンバーはこちら。

Pythonで動かして学ぶ!あたらしい線形代数の教科書

https://amzn.to/3OE5bVp

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

https://amzn.to/3OBiaax

ゼロからはじめるPID制御

https://amzn.to/3SvzuyR

OpenCVによる画像処理入門

https://amzn.to/498ZUgK

恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]

https://amzn.to/3STAe2i

Pythonによる制御工学入門

https://amzn.to/3uskuK5

理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析

https://amzn.to/3UAunQK

コメント

タイトルとURLをコピーしました