St_Hakky’s blog

Data Science / Human Resources / Web Applicationについて書きます

エポック(epoch)数とは【機械学習 / Deep Learning】

こんにちは。

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

エポック数とは

エポック数とは、「一つの訓練データを何回繰り返して学習させるか」の数のことです。

Deep Learningのようにパラメータの数が多いものになると、訓練データを何回も繰り返して学習させないとパラメータをうまく学習できないません(逆にやりすぎると過学習を起こすわけなんですが)。

多すぎずに少なすぎないエポック数を指定することによって、パラメーターをうまく学習させることができます。

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

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

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

f:id:St_Hakky:20170117165040p:plain

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

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

ということで、上のような状況が良いとわかっているのであれば、学習がある程度進んだ段階で学習を打ち切る「Early Stopping」というものがあります。

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

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

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

まとめ

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

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

それでは。