前回はブロック数を10、optimizerをAdamにして実験してみましたが良い結果は得られませんでした。
今回はブロック数ではなくフィルタサイズを3→5に変更して学習させてみました。ブロック数は5、optimizerはSGD、patienceは7です。下の表が結果となります。
epoch | Loss | Move Accuracy | Value Accuracy |
---|---|---|---|
1 | 3.6433 | 0.2979 | 0.6583 |
2 | 3.2917 | 0.3352 | 0.6791 |
3 | 3.1746 | 0.3504 | 0.6803 |
4 | 3.1395 | 0.3576 | 0.6763 |
5 | 3.1447 | 0.3643 | 0.6744 |
6 | 3.1594 | 0.3686 | 0.6778 |
7 | 3.1695 | 0.3709 | 0.6735 |
8 | 3.2584 | 0.3708 | 0.6730 |
9 | 3.3467 | 0.3706 | 0.6707 |
10 | 3.3977 | 0.3705 | 0.6708 |
11 | 3.4479 | 0.3679 | 0.6675 |
グラフとして描くと下の様になります。
フィルタサイズ3のものに比べると以下のようになります。
フィルタサイズ | Loss | Move Accuracy | Value Accuracy | 1エポックあたりの学習時間 |
---|---|---|---|---|
3 | 2.9753 | 0.3879 | 0.6853 | 約40分 |
5 | 3.1447 | 0.3643 | 0.6744 | 約47分 |
性能が悪化していることがわかります。また学習時間も伸びているため良いとこなしです。
これを書く段階で気づきましたがoptimizerはフィルタサイズ3のときに合わせてNesterovにするべきでした。ここが統一されていない時点で今回の実験は比較に値しないものかもしれません。
学習曲線の気になるところとしてはロスが下がらなくなったあともMove Accuracyは少し上がっていることでしょうか。しかしValue Accuracyは下がっているため、良い学習ができているわけでもなさそうです。
この実験に限らずDeepLearningではValueの学習がなかなか難しいという印象を持っており、2駒関係などでそれなりな性能が出ることを考えると少し意外だと感じます。なにか実装を間違えているのではないかという気にもなりますが、山岡さんの本でもあまりValue Accuracyは高くなっておらず、これくらいなものなのかもしれません。