MATLAB,Python,Scilab,Julia比較 第4章 その59【逆伝播⑩】

MATLAB,Python,Scilab,Julia比較 第4章 その59【逆伝播⑩】 数値計算
MATLAB,Python,Scilab,Julia比較 第4章 その59【逆伝播⑩】

バックナンバーはこちら。
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

【再掲】入力、出力パターン

フクさん
フクさん

前回、入力と出力(ラベル)を一括で扱うことによる連鎖律のルートが分かれる話をしたが、
もう一つの考え方もある。
というわけで、入力、出力パターンを再掲しておく。

\(x_1\)\(x_2\)\(y\)
000
010
100
111
太郎くん
太郎くん

まぁ、前回と同じくANDゲートだよね。

誤差関数の偏導関数

フクさん
フクさん

以前、誤差関数の偏導関数を以下と示した。

\(
\displaystyle\frac{\partial E}{\partial A}=A-Y
\)

太郎くん
太郎くん

確かにそんな感じだった。

フクさん
フクさん

しかし、これは学習が一つのデータしか入れない場合の式。
誤差関数は二乗和誤差関数なので、
本来であれば、総和であるΣが付く。
よって、偏導関数も本来であれば以下になる。

\(
\displaystyle\frac{\partial E}{\partial A}=\sum_{i=0}^n(a_i-y_i)
\)

太郎くん
太郎くん

まぁ、それが正しい姿ではありそうだね。

フクさん
フクさん

これを連鎖律に組み込む

\(
\displaystyle\frac{\partial E}{\partial A}=\sum_{i=0}^n(a_i-y_i)\cdot\sigma(Z)\{1-\sigma(Z)\}\cdot X
\)

太郎くん
太郎くん

あ、そうか。
Σで各連鎖律の総和を出すってことは前回の各ルートの連鎖律の合計を算出するのと同じことになるのか。

フクさん
フクさん

そうそう。
一応数式を書き出す、前回と同じものだな。

\(
\displaystyle\frac{\partial E}{\partial w_1}=
\frac{\partial E}{\partial a_1}\frac{\partial a_1}{\partial z_1}\frac{\partial z_1}{\partial w_1}
+\frac{\partial E}{\partial a_2}\frac{\partial a_2}{\partial z_2}\frac{\partial z_2}{\partial w_1}
+\frac{\partial E}{\partial a_3}\frac{\partial a_3}{\partial z_3}\frac{\partial z_3}{\partial w_1}
+\frac{\partial E}{\partial a_4}\frac{\partial a_4}{\partial z_4}\frac{\partial z_4}{\partial w_1}
\)

\(
\displaystyle\frac{\partial E}{\partial w_2}=
\frac{\partial E}{\partial a_1}\frac{\partial a_1}{\partial z_1}\frac{\partial z_1}{\partial w_2}
+\frac{\partial E}{\partial a_2}\frac{\partial a_2}{\partial z_2}\frac{\partial z_2}{\partial w_2}
+\frac{\partial E}{\partial a_3}\frac{\partial a_3}{\partial z_3}\frac{\partial z_3}{\partial w_2}
+\frac{\partial E}{\partial a_4}\frac{\partial a_4}{\partial z_4}\frac{\partial z_4}{\partial w_2}
\)

\(
\displaystyle\frac{\partial E}{\partial b}=
\frac{\partial E}{\partial a_1}\frac{\partial a_1}{\partial z_1}\frac{\partial z_1}{\partial b}
+\frac{\partial E}{\partial a_2}\frac{\partial a_2}{\partial z_2}\frac{\partial z_2}{\partial b}
+\frac{\partial E}{\partial a_3}\frac{\partial a_3}{\partial z_3}\frac{\partial z_3}{\partial b}
+\frac{\partial E}{\partial a_4}\frac{\partial a_4}{\partial z_4}\frac{\partial z_4}{\partial b}
\)

太郎くん
太郎くん

前回のがブロック図ベースの感覚的な捉え方で、
今回が数式ベースの理屈的な捉え方って感じか。

フクさん
フクさん

まぁ、どっちのアプローチが正しいかは良くわからないんだけどね。
結果的には同じものってことだな。

まとめ

フクさん
フクさん

まとめだよ。

  • 入力、出力が複数であるが故の連鎖律の事情のもう一つの考え方。
  • 誤差関数は二乗和誤差関数であり、本来であればΣが含まれる。
  • よって、連鎖律にもΣが含まれる形を取ると前回と同一の数式が得られる。

バックナンバーはこちら。

Pythonで動かして学ぶ!あたらしい線形代数の教科書

https://amzn.to/3OE5bVp

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

https://amzn.to/3OBiaax

ゼロからはじめるPID制御

https://amzn.to/3SvzuyR

OpenCVによる画像処理入門

https://amzn.to/498ZUgK

恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]

https://amzn.to/3STAe2i

Pythonによる制御工学入門

https://amzn.to/3uskuK5

理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析

https://amzn.to/3UAunQK

コメント

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