バックナンバーはこちら。
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/技術者02アップ.png)
非線形分類は単純パーセプトロンじゃなくて多層パーセプトロンが必要で、
無理やり数式で表現すると結構やべぇってのが前回の話だね。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
そして、ちゃんと分類するためには学習が必要。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/技術者03アップ.png)
あ、そういえば。
適切な重みパラメータを特定しないといけないのか。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
そこで出てくるのが誤差逆伝播法。
![太郎くん](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/「技術者a」13アップ.png)
でも、単純パーセプトロンのときと、今回の多層パーセプトロンの誤差逆伝播法って何か差分があるの?
基本的には一緒な気がするけど?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/お休みフクロウ.png)
うん。
基本的には一緒。
問題は、更新する重みが複数のユニット、複数の層に渡っているところだな。
1層あたりの複数のユニットに対しては、ベクトル演算の都合であまり問題にはならないが、
多層に渡ってる方が大問題だな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
多層になってるから、単純に連鎖律が長くなる程度だと思ってたんだけど、違う感じ?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/考え中フクロウ.png)
隠れ層の重みだけを見るとその通りなのだけど、
出力層の重みも求める必要がある。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
うーん、言いたいことわからん・・・。
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
まぁ、連鎖律を使用して重みの更新方向が決まる点はかわらないから、
実際にそれぞれの連鎖律を求めるのを見た方が早いな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」13アップ.png)
それぞれの連鎖律?
つまりいろんなパターンが出てくるってこと?
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/まるフクロウ.png)
そうそう。
つまり、メンドクサクなっただけと思えばOKだな。
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.png)
(大問題ぢゃねぇか・・・。)
連鎖律を求める方針
![フクさん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/指差しフクロウ.png)
とりあえず、それぞれの連鎖律を求める流れを決めておこう。
以下を想定している。
- 誤差逆伝播法の全体像の確認
- 出力層の重みとバイアスを求める誤差からの連鎖律
- 隠れ層の重みとバイアスを求める誤差からの連鎖律
- 上記をプログラミングするための最適化
![太郎くん](https://www.simulationroom999.com/blog/wp-content/uploads/2020/05/「技術者a」20アップ.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による制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
コメント