MATLAB,Python,Scilab,Julia比較 第4章 その76【誤差逆伝播法③】

MATLAB,Python,Scilab,Julia比較 第4章 その76【誤差逆伝播法③】 数値計算
MATLAB,Python,Scilab,Julia比較 第4章 その76【誤差逆伝播法③】

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

多層パーセプトロンの誤差逆伝播法の説明の流れ【再掲】

太郎くん
太郎くん

まずは、多層パーセプトロンの誤差逆伝播法の説明の流れを再掲。

  • 誤差逆伝播法の全体像の確認(済)
  • 出力層の重みとバイアスを求める誤差からの連鎖律
  • 隠れ層の重みとバイアスを求める誤差からの連鎖律
  • 上記をプログラミングするための最適化
フクさん
フクさん

今回は、「出力層の重みとバイアスを求める誤差からの連鎖律」を確認する。

出力層の合成関数

フクさん
フクさん

まず、全体の合成関数から出力層の合成関数の位置を確認。
以下に図示する。

全体の合成関数から出力層の合成関数の位置を確認、W1、X、h()、Z1、σ()、W2、A1、g()、Z2、A2,SSE()、E
フクさん
フクさん

そして、前回も記載したが出力層で見た合成関数は以下になる。

\(
{\rm{SSE}}(\sigma(g(A_1,W_2)))
\)

太郎くん
太郎くん

これの導関数を連鎖律で求めればよいわけか。

フクさん
フクさん

そうそう。

出力層の連鎖律

フクさん
フクさん

誤差\(E\)を出力層の重み\(W_2\)で微分するにあたって、
間に\(A_2,Z_2\)が居るので、連鎖律は以下になる。

\(
\displaystyle\frac{\partial E}{\partial W_2}=\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 A_2}=\frac{1}{2}(A_2-Y)^2=A_2=Y
\)

\(
\displaystyle\frac{\partial A_2}{\partial Z_2}=\sigma^\prime(Z_2)
\)

\(
\displaystyle\frac{\partial Z_2}{\partial W_2}=(W_2 A_2 + b_2)^\prime=A_2
\)

フクさん
フクさん

連鎖律として組み合わせる。

\(
\displaystyle\frac{\partial E}{\partial W_2}=(A-Y)\sigma^\prime(Z_2)A_1
\)

フクさん
フクさん

ちなみに、バイアスの方は途中過程は省略するが以下になる。

\(
\displaystyle\frac{\partial E}{\partial W_2}=(A-Y)\sigma^\prime(Z_2)
\)

太郎くん
太郎くん

連鎖律を把握してると結構簡単に求められるね。

多層であるが故の注意点

フクさん
フクさん

ここで注意点がある。
先ほどの出力層の連鎖律に出てくる\(A_1,Z_2\)だが、定数というわけではない。
これは多層パーセプトロンへの入力に依存して決まるもの。

太郎くん
太郎くん

そうすると具体的な数値が求められないんじゃ・・・。

フクさん
フクさん

そのために事前に順伝播を行う。
この順伝播時の\(A_1,Z_2\)を記憶しておけばOKだ。

太郎くん
太郎くん

なんだ、それだけか。

フクさん
フクさん

多層であるが故に追加で記憶しておくパラメータってことになるな。

まとめ

フクさん
フクさん

まとめだよ。

  • 出力層の合成関数を確認。
  • 出力層の連鎖律と各偏導関数を導出。
  • 多層であるが故に、順伝播時の中間変数を記憶しておく必要がある。

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

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

Amazon.co.jp

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

Amazon.co.jp

ゼロからはじめるPID制御

https://amzn.to/3SvzuyR

OpenCVによる画像処理入門

https://amzn.to/498ZUgK

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

Amazon.co.jp

Pythonによる制御工学入門

Amazon.co.jp

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

https://amzn.to/3UAunQK

コメント

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