DeepCoder追実装記録 (2)

前回: mhiroaki.hatenablog.com

データセット生成の高速化

方法

入力の型(e.g., [Int], [List], [Int, List, List])ごとに別スレッドでdfsすることで高速化

  • 入力の型が異なるプログラム同士はequivalenceの判定を省いているので、データ競合なく並列化が可能
  • CPUでenumerateすることを考えたら、並列度を高くするよりはこの程度のほうが良いという判断

結果

コミットログによれば、20000件ほどのデータセット生成に1100secかかっていたのが、238secになったらしい(確かCore i5-5200U上)

学習

現状

学習データを200000件に増やして、再度学習させている。しかし、やはり過学習起こしているように見える。

f:id:mhiroaki0000:20170723141839p:plain:w300

モデルをシンプルにすると、(E=8, K=128, 変数の意味は元論文参照)lossが0.15あたりでとまってしまう。従って、モデルが複雑すぎるというよりデータがまだ少ないのかなという印象を持っている。

f:id:mhiroaki0000:20170723141832p:plain:w300

その他

学習には、g2.2xlargeインスタンスをスポットインスタンスで利用し、alpha=0.0001としたAdamをOptimizerに、epoch=2500~5000、バッチサイズ500~1000で行っている。

今後

  • N=100万くらいのデータセットを用意し、そこで学習データさせてみる
  • 適当なプログラムで評価
    • 元論文みたいな真面目な評価をする気はまったくない