MATLAB,Python,Scilab,Julia比較 第4章 その66【単純パーセプトロンで分類②】

MATLAB,Python,Scilab,Julia比較 第4章 その66【単純パーセプトロンで分類②】 数値計算
MATLAB,Python,Scilab,Julia比較 第4章 その66【単純パーセプトロンで分類②】

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

逆伝播の復習

太郎くん
太郎くん

なんか逆伝播をプログラム化する上で最適化が可能とか言ってたよね。

フクさん
フクさん

そうそう。
まずは、重みとバイアスの逆伝播を実現する連鎖律を再掲しておこう。

重みの逆伝播

\(
\begin{eqnarray}
\displaystyle\frac{\partial E}{\partial W}&=&\frac{\partial E}{\partial A}\frac{\partial A}{\partial Z}\frac{\partial Z}{\partial W}\\
&=&{\color{red}(A-Y)\cdot\sigma(Z)\{1-\sigma(Z)\}}\cdot X
\end{eqnarray}
\)

バイアスの逆伝播

\(
\begin{eqnarray}
\displaystyle\frac{\partial E}{\partial b}&=&\frac{\partial E}{\partial A}\frac{\partial A}{\partial Z}\frac{\partial Z}{\partial b}\\
&=&(A-Y)\cdot\sigma(Z)\{1-\sigma(Z)\}\cdot 1\\
&=&{\color{red}(A-Y)\cdot\sigma(Z)\{1-\sigma(Z)\}}
\end{eqnarray}
\)

太郎くん
太郎くん

そうそう。
そんな感じ。

フクさん
フクさん

というわけで、まずは赤字の部分を算出してしまう。
この部分を\(dZ\)とする。

\(
\begin{eqnarray}
\displaystyle dZ&=&\frac{\partial E}{\partial A}\frac{\partial A}{\partial Z}=(A-Y)\cdot\sigma(Z)\{1-\sigma(Z)\}\cdot X\\
&=&
\Bigg(
\begin{bmatrix}
a_1\\a_2\\a_3\\a_4
\end{bmatrix}-
\begin{bmatrix}
0\\0\\0\\1
\end{bmatrix}
\Bigg)\circ
\sigma\Bigg(
\begin{bmatrix}
z_1\\z_2\\z_3\\z_4
\end{bmatrix}
\Bigg\{
1-\sigma\Bigg(
\begin{bmatrix}
z_1\\z_2\\z_3\\z_4
\end{bmatrix}
\Bigg)
\Bigg\}
\end{eqnarray}
\)

フクさん
フクさん

そして、重みへの連鎖律は以下に最適化される。

\(
\displaystyle\frac{\partial E}{\partial W}=dZ^TX=
\begin{bmatrix}
dz_1\\dz_2\\dz_3\\dz_4
\end{bmatrix}^T
\begin{bmatrix}
0&0\\
0&1\\
1&0\\
1&1\\
\end{bmatrix}
\)

フクさん
フクさん

バイアスの連鎖律は以下

\(
\displaystyle\frac{\partial E}{\partial b}=\sum dZ=
\begin{bmatrix}
dz_1\\dz_2\\dz_3\\dz_4
\end{bmatrix}^T
\begin{bmatrix}
1\\1\\1\\1
\end{bmatrix}
\)

太郎くん
太郎くん

プログラムで実現する場合は、途中の変数に結果を格納できるから、
その部分で処理の最適化ができるってことか。

フクさん
フクさん

そうそう。

まとめ

フクさん
フクさん

まとめだよ。

  • 重みとバイアスの連鎖律の最適化。
    • 共通部分があるので、そこを切り出し。
    • プログラムの場合は、こういう共通部分を変数に格納するなどの最適化が可能。

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

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をコピーしました