MATLAB,Python,Scilab,Julia比較 第4章 その108【最適化アルゴリズム⑦】

MATLAB,Python,Scilab,Julia比較 第4章 その108【最適化アルゴリズム⑦】 数値計算
MATLAB,Python,Scilab,Julia比較 第4章 その108【最適化アルゴリズム⑦】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia4-backnumber/

はじめに

Adamに至るまでの最適化アルゴリズムの系譜とそれらの依存関係を説明した。
このAdamをプログラムで実現するための準備をする。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラスト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

Adamの更新式【再掲】

太郎くん
太郎くん

説明は終わったから、プログラム化に向けての準備だね。

フクさん
フクさん

まずはAdamの更新式を再掲しておこう。

\(
\begin{eqnarray}
m_{t+1}&=&\beta_1 m_{t-1}+(1-\beta_1)\nabla J(\theta_t)\\
v_{t+1}&=&\beta_2 v_{t-1}+(1-\beta_2)(\nabla J(\theta_t))^2\\
\displaystyle\hat{m}_{t+1}&=&\frac{m_{t+1}}{1-\beta_1}\\
\displaystyle\hat{v}_{t+1}&=&\frac{v_{t+1}}{1-\beta_2}\\
\displaystyle\theta_{t+1}&=&\theta_t-\frac{\alpha}{\sqrt{\hat{v}_{t+1}}+\epsilon}\\
m_t&:&1次のモーメント\\
v_t&:&2次のモーメント\\
\hat{m}_t,\hat{v}_t&:&バイアス補正項\\
\beta_1,\beta_2&:&指数移動平均係数(\beta_1=0.9,\beta_2=0.999)
\end{eqnarray}
\)

プログラムフロー

太郎くん
太郎くん

プログラムの流れはモーメンタムの時と一緒になるのかな?

フクさん
フクさん

そうだね、
モーメンタムの更新式の部分をAdamの更新式に置き換えるだけだな。
よって、プログラムのフローはこれになる。

  • シグモイド関数の定義
  • シグモイド関数の導関数の定義
  • データの準備
  • ネットワークの構築
  • 重みとバイアスの初期化
  • モーメンタム項の初期化
  • 学習(4000エポック)
    • 順伝播
    • 誤差計算(平均二乗誤差)
    • 逆伝播
    • パラメータの更新(Adam)
  • 決定境界線の表示

パイパーパラメータについて

フクさん
フクさん

あと、学習率の設定だが、0.001とかなり小さい値を設定する。
これはAdamを使用する際の推奨値みたいなもので、
変更しても構わないのだが、今回はこの推奨値で行く。
その結果として、学習の収束までのエポック数を増やす必要がある。
だいたい20000エポックまで増やす予定。

太郎くん
太郎くん

モーメンタムの時は、学習の収束が早くなったのを確認した感じだったけど、
Adamだと収束までのエポック数が伸びるってこと?

フクさん
フクさん

Adam自体は学習率をモーメンタムのときのように0.5にすると一瞬で終わる
が、モーメンタムでは出てこなかったような結果が拾えることがある。
今回はそれを見ることの方をメインとしたい。

太郎くん
太郎くん

つまり、学習速度が遅くなるけど、Adamならではの最適解を確認したいってことか。

フクさん
フクさん

そうそう。
よって、学習の収束までの速度の比較は行わない予定だ。

太郎くん
太郎くん

まぁ、めずらしい結果がみれるならそっちの方が良さそうだね。

まとめ

フクさん
フクさん

まとめだよ、

  • Adamの更新式を実現するためのプログラムフローを記載。
    • モーメンタムの部分をAdamに差し替えただけ。
  • 学習率は0.001とかなり小さめの値に設定。
    • これにより収束は遅くなる。
    • かわりに特殊な最適解が得られるのでそれを確認する。

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

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