DLfSの「4.5章 学習アルゴリズム」のアルゴリズムを踏襲しつつ、自分の好き勝手な実装方法で学習機能(数値微分による勾配降下法)を持つNNを作成した。エラーなしに走るには走るけど、相変わらずいろんな入力に対して同じ答えしか返さない。。しかも、誤差平均が上がったりするし。。
--- ans --- // 正解データ
[5, 0, 4, 1, 9] // training
[7, 2, 1, 0, 4, 1,*略*,4, 1, 7, 6, 9] //test
----------- // NNによる回答 (降下法1回目)
[2, 2, 2, 2, 2]
[2, 2, 2, 2, 2, 2,*略*, 2, 2, 2, 2]
Accuracy: 0.0% // trainingに対する正解率
Accuracy: 8.0% // testingに対する正解率
loss:6.908(ts) //誤差平均
// NNによる回答 (降下法2回目)
[1, 1, 1, 1, 1]
[1, 1, 1, 1, 1, 1, *略*,1, 1, 1, 1]
Accuracy: 20.0% // trainingに対する正解率
Accuracy: 14.0% // testingに対する正解率
loss:6.905(ts) //誤差平均最初は誤差が下がって一見、学習しているかのフリをしつつ、途中から誤差が上昇したりしてかなり挙動がおかしい。原因は勾配計算にあると推測している。ミニバッチに対応させているけど、そのあたりがおかしいのだろう。
使ってるデータはMNISTなので配列がでかすぎてまともにデバッグができない。3x2ぐらいの小さな入力データを使って、全ての勾配を手で計算して隅々までデバッグするつもり。
テスト例:
input:6 hidden:10 output:3 入力ー>正解 □■ ー>[1,0,0] ■□ □■ □□ ー>[0,1,0] □■ ■■ □■ ー>[0,0,1] □■ □□