【入門】誤差逆伝播法②【数値計算】

【入門】誤差逆伝播法②【数値計算】 数値計算

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
\)

びっくりするほどスッキリ。
あとはプログラムのフローを想定するだけとなる。

次のページへ

次のページでは、プログラムのフローを想定した各種数式の導出

コメント

タイトルとURLをコピーしました