St_Hakky’s blog

心理学/人事/就活/留学/データサイエンス/バイオインフォマティクス/日頃思ったことについて書きます。

エポック(epoch)数とは

こんにちは。

今日はエポック数について調べましたのでそのことについて書きます。

○エポック数とは

エポック数とは、「一つの訓練データセットを何回繰り返して学習させるか」の数のことです。Deeplearningのようにパラメータの数が多いものになると、訓練データセットを何回も繰り返して学習させないとパラメータがうまく学習してくれないといった問題があります(逆にやりすぎると過学習を起こすわけなんですが)。

○どうなっていると「良い」エポック数なのか

パラメータの学習の最終的な目標は、汎化性能があるパラメータ集合を見つけることにあると言えます。そのため、訓練データへの精度が高く、かつ予測精度が高くなるように学習させてやることが大事となります。

この際に、過学習を起こさずに、かつ予測精度と訓練精度が共に良いとなるエポック数を見つけることができれば(以下の図参照)、良いエポック数ということになります。


f:id:St_Hakky:20170117165040p:plain


上の図のように、予測精度が識別精度の少ししたあたりで落ち着きだしたエポック数を取得することができるのが理想で、その時のエポック数が適当なエポック数となります。

○適当なエポック数で止める

とはいえ、上のようにわかっていることがあるのであれば、学習がある程度進んだ段階で学習を打ち切る、Early Stoppingというものがあります、

簡単に言うと、学習が進んで精度の向上がこれ以上見込めないとなったら、そこで学習を止めるという方法です。学習時に学習用のデータと学習を止めるかということを判断するバリデーション用のデータに分けておき、その両方のデータを用いて学習を止めるかどうかという判定をします。

詳しくは以下の文献にゆずりますが、kerasなどではコールバック関数に指定して学習をさせるだけで、その処理を実現することが出来ます。

データ数やパラメーターが多くなってくると学習に時間がかかりますし、モデルを探索している途中などでは、ある程度まで行ったら学習を止めて次のやつを試したいみたいなことをあるので、これはすごく便利です。

○まとめ

エポック数は繰り返し繰り返しやって、適度なところで止めてやればいいので、まぁ実行時間はかかりますが、最初は多めに取っておけばいいのかなと思います。

各種DeepLearningのフレームワークでは、紹介したようにEarly Stoppingというのも使えるので、コレでも良いかなと思いますが、最終的には試行錯誤して試すしかないのかなぁというのが最近の僕の結論です笑(何かいい方法があれば教えて欲しいです)

それでは。