バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia4-backnumber/
はじめに
総当たり法で分類のパラメータを導出するのは非効率。
というわけで適切な手段に置き換える必要がある。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
総当たり法に代わるもの
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者04.png)
これで分類問題は完璧!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
んなわけない。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
だよねー。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
総当たり法はあまり効率的とは言え無さそうだもんね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
というわけで、今回からは総当たり法に代わるものとして
最適化アルゴリズムを使用する。
最適化アルゴリズム
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
最適化アルゴリズムってなんぞ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
損失を最小にするためのアルゴリズムだな。
総当たり法も広義では最適化アルゴリズムに該当はするが、
一般的には連鎖律を用いてパラメータを調整する手法になる。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
連鎖律とかまた意味わからんワードが・・・。
連鎖律
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
連鎖律については、恒例のWikipediaの引用。
微分法において連鎖律(れんさりつ、英: chain rule)あるいは合成関数の微分公式とは、複数の関数が合成された合成関数を微分するとき、その導関数がそれぞれの導関数の積で与えられるという関係式のこと。
Wikipediaより(https://ja.wikipedia.org/wiki/%E9%80%A3%E9%8E%96%E5%BE%8B)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」09アップ.png)
微分イヤーーー!!
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
まぁ、この手のモノにアレルギー持ってる人は多いよね。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
というか連鎖律がこの文面見てもさっぱりなんだけど・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
一言でまとめると、
「複数の関数が繋がって出来てるシステムも、この導関数が分かっていれば微分結果が一発でわかる」
ってことだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
一言でまとめてもらっても意味わからん。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
ニューラルネットワークって、
入力層、隠れ層、出力層に分かれるのだけど、
出力層と期待値の差である損失の変化が分かれば、隠れ層、入力層の変化もわかるって仕掛けだな。
ただし、問題点としては、変かさせたいのは入力や隠れ層に対しての入力ではなく、重みやバイアス。
つまり、重みとバイアスの変位と損失の変位の関係性の方が重要になる。
一つずつやると確かに複雑なのだが、連鎖律を利用するとシンプルになる。
だから連鎖律が重要。
って感じ。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
何一つ伝わって来ないないけど、重要そうってことだけはわかった・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
そして、連鎖律に重要なのが導関数。
逆に導関数さえ分かっていればチョロい。
しかし問題としては、損失、活性化関数、各層の入力の導関数を求める必要があって、
特に活性化関数が厄介。
今回はシグモイド関数を使用するので、シグモイド関数の導関数を求める必要がある。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」10アップ.png)
魔境の臭いしかしない・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
まぁ、具体的な進め方は次回説明しよう。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- 総当たり法では非効率なので最適化アルゴリズムを使用する。
- 最適化アルゴリズムを使用するには連鎖律が必要。
- 連鎖律を利用するには損失、活性化関数、各層の入力の導関数を求める必要がある。
バックナンバーはこちら。
Pythonで動かして学ぶ!あたらしい線形代数の教科書
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロからはじめるPID制御
OpenCVによる画像処理入門
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Pythonによる制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
コメント