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