MATLAB、Python、Scilab、Julia比較ページはこちら
https://www.simulationroom999.com/blog/comparison-of-matlab-python-scilab/
はじめに
の、
MATLAB,Python,Scilab,Julia比較 第4章 その78【誤差逆伝播法⑤】
MATLAB,Python,Scilab,Julia比較 第4章 その79【誤差逆伝播法⑥】
を書き直したもの。
多層パーセプトロンの誤差逆伝播法について。
今回は、「プログラミングするための最適化」を確認する。
- 誤差逆伝播法の全体像の確認
- 出力層の重みとバイアスを求める誤差からの連鎖律
- 隠れ層の重みとバイアスを求める誤差からの連鎖律
多層パーセプトロンの誤差逆伝播法の説明の流れ【再掲】
まずは、多層パーセプトロンの誤差逆伝播法の説明の流れを再掲。
- 誤差逆伝播法の全体像の確認(済)
- 出力層の重みとバイアスを求める誤差からの連鎖律(済)
- 隠れ層の重みとバイアスを求める誤差からの連鎖律(済)
- 上記をプログラミングするための最適化
今回は、「プログラミングするための最適化」を確認する。
連鎖律の最適化方針
プログラミング向けに連鎖律を最適化する。
以前と同じように共通部分を切り出して、流用しまくる予定。
なんとなく察したと思うが、各連鎖律は結構似通っている。
それを整理していけば、おのずと共通部分がハッキリして最適化可能となる。
連鎖律の共通部分の洗い出し
いままでの連鎖律を並べてみる。
出力層の重み
\(
\displaystyle\frac{\partial E}{\partial W_2}={\color{red}\frac{\partial E}{\partial A_2}\frac{\partial A_2}{\partial Z_2}}\frac{\partial Z_2}{\partial W_2}
\)
出力層のバイアス
\(
\displaystyle\frac{\partial E}{\partial W_2}={\color{red}\frac{\partial E}{\partial A_2}\frac{\partial A_2}{\partial Z_2}}1
\)
隠れ層の重み
\(
\displaystyle\frac{\partial E}{\partial W_2}={\color{red}\frac{\partial E}{\partial A_2}\frac{\partial A_2}{\partial Z_2}}{\color{blue}\frac{\partial Z_2}{\partial A_1}\frac{\partial A_1}{\partial Z_1}}\frac{\partial Z_1}{\partial W_1}
\)
隠れ層のバイアス
\(
\displaystyle\frac{\partial E}{\partial W_2}={\color{red}\frac{\partial E}{\partial A_2}\frac{\partial A_2}{\partial Z_2}}{\color{blue}\frac{\partial Z_2}{\partial A_1}\frac{\partial A_1}{\partial Z_1}}1
\)
とりあえず、共通部分だと思わしきところは赤字、青字にしておいた。
共通部分の変数化
共通部分をそれぞれ変数として割り当ててしまう。
\(
\displaystyle\Delta_2={\color{red}\frac{\partial E}{\partial A_2}\frac{\partial A_2}{\partial Z_2}}
\)
\(
\displaystyle\Delta_1=\Delta_2{\color{blue}\frac{\partial Z_2}{\partial A_1}\frac{\partial A_1}{\partial Z_1}}
\)
上記を利用して各重みをバイアスを書き直すと以下になる。
\(
\displaystyle\frac{\partial E}{\partial W_2}=\Delta_2\frac{\partial Z_2}{\partial W_2}
\)
\(
\displaystyle\frac{\partial E}{\partial W_1}=\Delta_1\frac{\partial Z_1}{\partial W_1}
\)
\(
\displaystyle\frac{\partial E}{\partial b_2}=\Delta_2 1
\)
\(
\displaystyle\frac{\partial E}{\partial b_1}=\Delta_1 1
\)
びっくりするほどスッキリ。
あとはプログラムのフローを想定するだけとなる。
次のページへ
次のページでは、プログラムのフローを想定した各種数式の導出
コメント