Neural Network Console 06(過学習 Training,Validation,Evaluation-2)

2018-03-21

AI Neural_Network_Console

Neural Network Console 01(インストールとサンプル実行)
Neural Network Console 02(GPU設定、効果)
Neural Network Console 03(自前データ)
Neural Network Console 04(繰り返し回数と学習結果 Max Epoch )
Neural Network Console 05(過学習 Training,Validation,Evaluation-1) の続き

05で、やっぱり何か変なこと、個別最適が行われていると思うようになった。
そこで、TrainingとValidationで同じデータセットを使っていることが気になってきた(03参照)。というか、ずーっと気にはなっていたけど、なんか関係ある気がしてきた。Validationの意味(役割)を検索していて、参考情報1を見つけた。

過学習というらしい。まさに一般的にそういう問題があり、そのチェックのためにValidationというのがあるようだ(参考情報1参照)

ということで、TrainingとValidationのデータセットを分けて試して見た。元々30個しなかので、Training20個、Validation10個。ますます寂しい。

DATASETに以下を設定
  • Training:20個のもの
  • Validation:10個のもの
  • Evaluation:10個のもの(ACTION→Addで追加)
デフォルトでは、Validationに設定したデータセットがEvaluationにも使われていたが、別のデータセットを用いるときの設定は、SonyのFAQ(参考情報2)に出ていた。設定したデータセットを、CONFIGのExecutor(左ペイン)→Dataセットで指定。
一度Trainig、Evaluationを実施後、
  • Evaluation:20個のもの
に変更して、Evaluationを実施
予想では、10個のデータをEvaluationしたものは、相関小、20個のデータをEvaluationしたものは相関大になると思われる。

結果(Max Epoch50回)
Learning Curve(Log表示)
CostとTraining Errorはどんどん下がっていくが、Validation Errorは途中から上がっていく。Training Datasetのみに最適化していっているという事だろう。
学習結果
左は、10個(Validationと同じ)のデータセットをEvaluationしたもの。右は20個(Trainingと同じ)をEvaluationしたもの。
やっぱりTrainingの方が相関が高い。けど、そもそも元の50回に比べるとかなり相関が低い。Trainingのデータ数が30個から20個に減ったから? 

結果(Max Epoch100回)
50回では足りないのかと思って、100回にしてみた。
Learning Curve(Log表示)
Cost、Training ErrorとValidation Errorの差はますます広がっている。
学習結果
あれ?Trainingの方が相関が悪い??? 

なんかおかしい。Validationデータセットは、学習の適正さを判断するための指標で、学習そのものはTrainingデータセットで行われると思っていたのだが、Validationデータセットも学習に何か影響を与えているのか?
よくよく見ていると、TRAINING画面の学習結果のリスト(左ペイン)に、
  • 50回「Best Validation 2.064862 @ epoch 20」
  • 100回「Best Validation 1.99658 @ epoch 4」
と出ている。Learning Curveと見比べると、それぞれepoch4,20のところで、Validation Errorが最小になっている。つまり、そこの学習結果を最終学習結果としているという事なのだろう。
CONFIGで、Save Bestというのにチェックが入っていたことを思い出した。
マニュアルには、
3 学習結果のニューラルネットワークを保存する条件を指定するには
最終世代のニューラルネットワークを保存するにはSave Bestのチェックを外します。Validation Datasetにおいてもっとも誤差が小さかったEpochのニューラルネットワークを保存するにはSave Bestをチェックします。
と書かれている。

Save Bestのチェックを外して再実行(本当は、元のTrainingの最終結果を使って評価だけやり直したかったが、やり方がわからなかった)

結果(Save Bestチェックなし Max Epoch100回)
Learning Curve(Log表示)
今回は、「Best Validation 1.543069 @ epoch 5」だった。実は1回目は@epoch80だったが、前回と似たところがいいかと思ってもう一回Trainingをした。
学習結果
うん、予想通り。Validationの方は相関が小さく、Trainingの方は相関が大きい。 

予想通りだが、喜んでいる場合ではなく、個別最適、過学習されていたということがはっきりした。さて、どうしたものか。データ数を増やすのが王道だろうけど…。

Neural Network Console 07(過学習 Training,Validation,Evaluation-3)[未記載]に続く