バックナンバーはこちら。
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
【再掲】勾配降下法の確認プログラムのフロー

前回までで、連鎖律や勾配降下法についての説明が終わったところだ。

で、今回からは誤差逆伝播法についての話になるのかな?

そうなのだけど、
ここで一度、用語についての厳密性を確認しておこう。

厳密性?

まず誤差逆伝播法は、単純パーセプトロンに使用される言葉ではなく、
多層パーセプトロンことニューラルネットワークに使用される言葉になる。

つまり、単純パーセプトロンでは誤差逆伝播法は使用できない?

使用できないことは無い。
これは歴史的な話と技術的な話が混じってて少しややこしいのだが、
技術的には単純パーセプトロンに誤差逆伝播法は適用不可。
理由は、活性化関数がヘヴィサイド関数であり、誤差に勾配が発生し合いから。
しかし、活性化関数をシグモイド関数に置き換えると、誤差に勾配が発生するから適用可能となる。
歴史的には、誤差逆伝播法を適用したのは多層パーセプトロン以降。

ややこしいことになってるけど、
僕たちがやるのは単純パーセプトロンで活性化関数はヘヴィサイド関数からシグモイド関数に差し替えてる。
だから、誤差逆伝播法は可能。
でも、そういった事例はあんまりないから、これを誤差逆伝播法と呼んで良いかはわからん。
って感じ?

まぁ、そういうことだな。
というわけで、ここでは、誤差逆伝播法と呼ばずに
「逆伝播」という名称で呼ぼうと思う。

なるほど。
「誤差逆伝播法」という言い方にすると偉い人に怒られそうだもんね。

単純パーセプトロンの活性化関数をシグモイド関数にしてる段階で怒られそうなんだけどね・・・。

マジかよ・・・。
逆伝播を加味した単純パーセプトロンの構成

逆伝播を行うにあたって、構成を示しておこう。
以下の図になる。


そうか。
誤差逆伝播を想定すると、誤差関数も含めて考える必要があるのか。

そうそう。
誤差関数は二乗和誤差関数(SSE:Sum of Squared Error)を1/2したものを使用する。

なぜに1/2にするんだ?

微分すると2乗が前に落ちて、2倍される。
そうすると1/2と相殺されて数式がシンプルになるという効能があるな。
おおよそ以下のイメージだ。
\(
\begin{eqnarray}
f(x)&=&(A-Y)^2=A^2-2AY+Y^2\\
\displaystyle \frac{1}{2}\frac{\partial f(x)}{\partial A}&=&\frac{1}{2}\frac{\partial(A^2-2AY+Y^2)}{\partial A}\\
&=&\frac{1}{2}(2A-2Y)=A-Y
\end{eqnarray}
\)

おー!
確かにシンプルになる!

次回からは、これをベースに逆伝播をやっていく。
まとめ

まとめだよ。
- 誤差逆伝播法とか単純パーセプトロンに関連する用語を確認。
- 様々な都合で、単純パーセプトロンに対する誤差逆伝播法を「逆伝播」と呼称することに。
- 逆伝播を行う単純パーセプトロンの構成を確認。
- 誤差関数は二乗和誤差関数を1/2にしたもの。
- 1/2により微分後の数式がシンプルになる。
- 誤差関数は二乗和誤差関数を1/2にしたもの。
バックナンバーはこちら。
Pythonで動かして学ぶ!あたらしい線形代数の教科書
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロからはじめるPID制御
OpenCVによる画像処理入門
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Pythonによる制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
コメント