ディープニューラルネットワークのトレーニングに早期停止を適切に使用する方法


19

ディープニューラルネットワークモデルがあり、約100,000のサンプルで構成されるデータセットで検証する必要があります。検証データには約1000のサンプルが含まれています。各例のトレーニングには時間がかかり(例ごとに約0.5秒)、過剰適合を避けるために、不要な計算を防ぐために早期停止を適用したいと思います。しかし、ニューラルネットワークを早期に停止して適切にトレーニングする方法がわかりません。今では理解できないことがいくつかあります。

  • 適切な検証頻度は何ですか?各エポックの終わりに検証データでモデルをチェックする必要がありますか?(私のバッチサイズは1です)

  • 最初のいくつかのエポックが、より良い価値に収束し始める前に、より悪い結果をもたらすかもしれませんか?その場合、早期停止をチェックする前に、いくつかのエポックについてネットワークをトレーニングする必要がありますか?

  • 検証の損失が上下する可能性がある場合の対処方法 その場合、早期に停止すると、モデルがさらに学習できなくなる可能性がありますよね?

前もって感謝します。


1より大きいバッチサイズを強くお勧めします。通常のサイズは32、64、および128である
ComputerScientist

回答:


20

適切な検証頻度は何ですか?各エポックの終わりに検証データでモデルをチェックする必要がありますか?(私のバッチサイズは1です)

ゴールドルールはありません。各エポック後の検証エラーの計算は非常に一般的です。検証セットはトレーニングセットよりもはるかに小さいため、トレーニングの速度はそれほど低下しません。

最初のいくつかのエポックが、より良い価値に収束し始める前に、より悪い結果をもたらすかもしれませんか?

はい

その場合、早期停止をチェックする前に、いくつかのエポックについてネットワークをトレーニングする必要がありますか?

可能ですが、問題はエポックをいくつスキップするかです。そのため、実際には、ほとんどの場合、人々はエポックをスキップしません。

検証の損失が上下する可能性がある場合の対処方法 その場合、早期に停止すると、モデルがさらに学習できなくなる可能性がありますよね?

人々は通常、忍耐力、つまり検証セットに進捗がない場合に早期に停止する前に待つエポックの数を定義します。多くの場合、忍耐力は10〜100の間に設定されます(10または20の方が一般的です)が、実際にはデータセットとネットワークに依存します。

忍耐= 10の例:

ここに画像の説明を入力してください


早期に停止したときにモデルを使用するか、patience停止する前にモデルのエポックを使用する必要があります(それ以上の改善が行われていない「最良の」モデル)。
stackunderflow

2
@displayname忍耐エポック停止前
フランクデルノンクール

10

私は最近、「早期停止-しかしいつ?」というタイトルの論文に出会いましたLutz Precheltによる、それぞれが何をするのか、そしてそれらの公式を明確に説明した早期停止の使用法の多くの素晴らしい例があります。

うまくいけば、それを見てみるといいかもしれません。


論文は奇妙なスタイルで書かれていますが、情報は役に立ちました。
ジョサイア

3

他の優れた答えに追加するには、することもできます-停止しないでください。私は通常:

  • 私が賢明だと思っていたはるかに長い時間NNを実行し、
  • Nエポックごとにモデルの重みを保存し、
  • トレーニング損失が安定したのを確認したら、検証損失が最も低いモデルを選択します。

もちろん、分単位で支払いを行わない場合(またはコストが十分に小さい場合)、およびトレーニングを手動で停止できる場合にのみ意味があります。利点は、後知恵で最も低い検証エラーを決定することがはるかに簡単であることです。


1
私もこれをします。あなたのように、私はそれが贅沢であることを知っています。モデルが多くのスペースを占有し始めたときに、以前の損失とfスコアの数値を使用して、以前のモデルをいつ削除するかをプログラムで決定できることがわかりました。価値があると思われるハードディスク容量。
QAコレクティブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.