MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/
はじめに
の、
MATLAB,Python,Scilab,Julia比較 第4章 その27【連鎖律の前準備①】
MATLAB,Python,Scilab,Julia比較 第4章 その28【連鎖律の前準備②】
MATLAB,Python,Scilab,Julia比較 第4章 その29【連鎖律の前準備③】
を書き直したもの。
総当たり法で分類のパラメータを導出するのは非効率。
というわけで適切な手段に置き換える必要がある。
連鎖律を把握するための以下を解説。
- 必要な知識の列挙。
- 逆数の微分公式について。
- 積の微分公式について。
総当たり法に代わるもの
前回までで、総当たり法で分類問題を実現した。
が、
総当たり法はあまり効率的とは言え無い。
というわけで、今回からは総当たり法に代わるものとして
最適化アルゴリズムを使用する。
最適化アルゴリズム
最適化アルゴリズムは、損失を最小にするためのアルゴリズム。
総当たり法も広義では最適化アルゴリズムに該当はするが、
一般的には連鎖律を用いてパラメータを調整する手法になる。
連鎖律
連鎖律については、恒例のWikipediaの引用。
微分法において連鎖律(れんさりつ、英: chain rule)あるいは合成関数の微分公式とは、複数の関数が合成された合成関数を微分するとき、その導関数がそれぞれの導関数の積で与えられるという関係式のこと。
Wikipediaより(https://ja.wikipedia.org/wiki/%E9%80%A3%E9%8E%96%E5%BE%8B)
微分とかにアレルギー持ってる人は多いかもしれない。
そして、この文面見てもさっぱりかもしれない。
一言でまとめると、
「複数の関数が繋がって出来てるシステムもここの導関数が分かっていれば微分結果が一発でわかる」
ということになる。
(この一言にまとめたのもわからん人も居ると思う・・・。)
ニューラルネットワークは、
入力層、隠れ層、出力層に分かれるのだが、
出力層と期待値の差である損失の変化が分かれば、隠れ層、入力層の変化もわかるって仕掛けがある。
ただし、問題点としては、変かさせたいのは入力や隠れ層に対しての入力ではなく、重みやバイアス。
つまり、重みとバイアスの変位と損失の変位の関係性の方が重要になる。
一つずつやると確かに複雑なのだが、連鎖律を利用するとシンプルになる。
だから連鎖律が重要。
という感じになる。
そして、連鎖律に重要なのが導関数。
逆に導関数さえ分かっていればチョロい。
しかし問題としては、損失、活性化関数、各層の入力の導関数を求める必要があって、
特に活性化関数が厄介。
今回はシグモイド関数を使用するので、シグモイド関数の導関数を求める必要がある。
次のページへ
次のページから「連鎖律を把握するための知識」について
コメント