バックナンバーはこちら。
https://www.simulationroom999.com/blog/compare-matlabpythonscilabjulia4-backnumber/
はじめに
単純パーセプトロンに対する逆伝播についての話。
合成する関数を書き出してみる。
登場人物
博識フクロウのフクさん
![指差しフクロウ](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
![技術者太郎](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
【再掲】逆伝播を想定した単純パーセプトロンの構成
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
単純パーセプトロンの逆伝播を考えるにあたって、
一連の合成関数を出してみよう。
まずは前回の構成を再掲する。
![逆伝播を想定した単純パーセプトロンの構成、誤差関数は二乗和誤差(SSE:Sum of Squared Error)を1/2したものを使用。1/2にしておくと微分時に消えるので便利、x1、x2、×w1、×w2、+b、A、Y、E=1/2∑_{i=1}^n(A-Y)^2](https://www.simulationroom999.com/blog/wp-content/uploads/2024/02/02_逆伝播を想定した単純パーセプトロンの構成-1024x302.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
まぁ、これを見るだけでも複数の関数が合成されてそうなのはわかるね。
一連の合成関数
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
先ほどの構成をブロック図として書き出したのが以下になる。
![一連の合成関数のブロック図表現、W、f()、Z、σ()、A、SSE()、E](https://www.simulationroom999.com/blog/wp-content/uploads/2024/02/02_一連の合成関数のブロック図表現-1024x69.png)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
あれ?
入力が\(W\)?
\(W\)って入力じゃなくて重みだよね?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
調整したいのは入力じゃなくて重み。
だから、単純パーセプトロンの学習における入力は重みと見なしてる感じだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
なるほど、
言われてみるとそうだ。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そして、さきほどの合成関数を数式で表現するとこうなるな。
合成関数
\(E=SSE(\sigma(f(W)))\)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者01アップ.png)
そのまんまだね。
各関数
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そして、各関数を書き出す。
誤差関数
\(
\displaystyle E=\frac{1}{2}\sum_{i=1}^n(A-Y)^2
\)
活性化関数
\(
A=\sigma(X)
\)
入力と重みの内積
\(
Z=f(W)=
\begin{bmatrix}
w_1&w_2&b
\end{bmatrix}
\begin{bmatrix}
x_1\\
x_2\\
1
\end{bmatrix}
\)
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者02アップ.png)
この関数の合成がさっきの合成関数ってことになるのか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
あとは、合成関数の微分こと連鎖律を考えていくことになる。
まとめ
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まとめだよ。
- 一連の合成関数について書き出し。
- 合成関数を構成する各数式を書き出し。
- 誤差関数、活性化関数、入力と重みの内積。
バックナンバーはこちら。
Pythonで動かして学ぶ!あたらしい線形代数の教科書
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロからはじめるPID制御
OpenCVによる画像処理入門
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Pythonによる制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
コメント