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

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

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

勾配降下法をプログラム的に確認する方法

太郎くん
太郎くん

前回、勾配降下法の実験をするって言ってけど、
何をするの?

フクさん
フクさん

勾配降下法の利用シーンはニューラルネットワークの学習などではあるが、
概念自体は関数の最小値の探索だ。
つまり、適当な関数を定義して、極小値目指して下っていく感じが見れればOK。

太郎くん
太郎くん

その適当な関数とは・・・。

フクさん
フクさん

とりあえず、こんな関数かな。

\(
\displaystyle f(x)=\sin(5x)+\frac{x^2}{2}
\)

フクさん
フクさん

三角関数と二次関数を合成したものだな。
波形としては以下になる。

三角関数と二次関数の合成
太郎くん
太郎くん

すげぇナミナミしてんなぁ・・・。

フクさん
フクさん

傾きを知るためには導関数が必要だ。
先ほどの関数の導関数がこれ。

\(
f(x)=5\sin(5x)+x
\)

フクさん
フクさん

三角関数の導関数を求める証明もあるのだが、
今回の本筋ではないので、この証明は省略だ。

太郎くん
太郎くん

(いきなりそんなんツッコまれても困る・・・。)

プログラムの流れ

太郎くん
太郎くん

で、プログラムの流れとしてはどうなるの?

フクさん
フクさん

以下の流れだな。

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

まぁまぁやることあるな・・・。

フクさん
フクさん

まぁ、「目的関数の定義」と「目的関数の導関数の定義」は
先ほどの関数とその導関数の話だ。
「入力初期値」、「ハイパーパラメータ」は少し説明が必要かもね。
「勾配降下法の実装」以降は上記を利用して実際に処理するところ。
「結果表示」は学習結果。
グラフへのプロットもそのままではあるが、
ある程度の学習過程が分かるようなプロット方法で実装する予定だ。

下の流れだな。

太郎くん
太郎くん

(途中から何言ってるのかわからんかったけど、フクさんが実装してくれるなら別にいいか・・・。)

まとめ

フクさん
フクさん

まとめだよ。

  • 勾配降下法をプログラム的に確認する方法としてニューラルネットワークではなく、任意の関数に試す方法がある。
    • 三角関数と二次関数を合成したもので試す。
  • プログラムのフローを記載。

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

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