早期停止の手法がどのように定義されているかという考えに、私は少し困惑して混乱しています。Wikipediaを見てみると、次のように定義されています。
- トレーニングデータをトレーニングセットと検証セットに、たとえば2対1の比率で分割します。
- トレーニングセットでのみトレーニングを行い、検証セットの例ごとのエラーを時々、たとえば5エポックごとに評価します。
- 検証セットのエラーが最後にチェックされたときよりも大きくなるとすぐにトレーニングを停止します。
- トレーニング実行の結果として、ネットワークがその前のステップで持っていた重みを使用します。
私は自分の実験でメソッドを使用していました(10倍の交差検証を使用)。各エポックで検証エラーをチェックし(検証精度も計算)、忍耐パラメーターを2に設定しています。つまり、検証エラーが2エポックで連続して増加する場合は、トレーニングを停止します。次に、モデルが終了した最後のエポックの結果を使用しました。
Ian Goodfellowは、ディープラーニングの本で別の定義を使用しています。4番目のステップとして、最も効果的なモデルの重みを使用することを提案します(つまり、検証エラーがチェックされるたびにモデルを保存します)。
保存したモデルは必要ありません。自分の作業の結果だけが必要です。したがって、私にとってグッドフェローによる早期停止の提案は、最終結果で達成した最高の検証精度を採用することを意味しますか?どういうわけかこれは合法的ではないようです。開発セットがない実際の状況では、この情報はありません。しかし、その場合、そもそも早期停止を使用する理由は何でしょうか。たとえば、フォールドのエポック数を平均してエポック数を決定し、それを後で実行するテストに使用しますか?