バックナンバーはこちら。
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
分類の推移を見てみる

で、原因特定用の情報はそろった?

一応用意してきた。
前回と同じく成功パターンと失敗パターンに分けて見てみよう。
分類成功パターン

分類成功パターンの決定境界線と誤差関数の推移は以下になる。



これはキレイに推移してるね。
誤差関数もほぼ0へ収束しているし。

そうだね。
理想的な推移と言って良いだろう。
分類失敗パターン

次は問題の分類失敗パターンだ。
決定境界線と誤差関数の推移は以下になる。



これは・・・完全に失敗してるね・・・。

誤差関数としては収束はしているが、
0には至ってないな。
つまり局所最適解にハマってる。

これはエポック数を増やしても解決する感じは無いね・・・。

というわけで、推移が見えれば原因も分かり易くなるってことだな。
対策

で、対策は何があるの?

対策は大きく2つある。
- 隠れ層のユニット数を増やす
- 勾配降下法を拡張した最適化アルゴリズムを採用する

一個目はすぐ対策はできそうだけど、
二個目はわからんな・・・。

結論としては一個目で対策可能なはずだ。
二個目はもっと複雑なネットワークな場合に有効な手法だな。

ということは一個目だけやる感じ?

折角だから二個目もやってしまおう。
どういう最適化アルゴリズムがあり、どのような効果が期待できるかは知っておいた方が良いと思う。

まぁ、AI技術としては一般的な話っぽいからやれるときにやってしまった方が良いのか・・・。
まとめ

まとめだよ。
- 非線形分類が失敗する原因を特定するため決定境界線と誤差関数の推移をモニタ。
- 案の定、局所最適解にハマってる。
- つまりエポック数を増やしても対策にはならない。
- 隠れ層のユニット数を増やす、最適化アルゴリズムを使用するのが対策案。
バックナンバーはこちら。
Pythonで動かして学ぶ!あたらしい線形代数の教科書
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロからはじめるPID制御
OpenCVによる画像処理入門
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Pythonによる制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
コメント