ニューラルネットワークの早期停止と、相互検証を使用する場合の意味の理解


8

早期停止の手法がどのように定義されているかという考えに、私は少し困惑して混乱しています。Wikipediaを見てみると、次のように定義されています。

  1. トレーニングデータをトレーニングセットと検証セットに、たとえば2対1の比率で分割します。
  2. トレーニングセットでのみトレーニングを行い、検証セットの例ごとのエラーを時々、たとえば5エポックごとに評価します。
  3. 検証セットのエラーが最後にチェックされたときよりも大きくなるとすぐにトレーニングを停止します。
  4. トレーニング実行の結果として、ネットワークがその前のステップで持っていた重みを使用します。

私は自分の実験でメソッドを使用していました(10倍の交差検証を使用)。各エポックで検証エラーをチェックし(検証精度も計算)、忍耐パラメーターを2に設定しています。つまり、検証エラーが2エポックで連続して増加する場合は、トレーニングを停止します。次に、モデルが終了した最後のエポックの結果を使用しました。

Ian Goodfellowは、ディープラーニングの本で別の定義を使用しています。4番目のステップとして、最も効果的なモデルの重みを使用することを提案します(つまり、検証エラーがチェックされるたびにモデルを保存します)。

保存したモデルは必要ありません。自分の作業の結果だけが必要です。したがって、私にとってグッドフェローによる早期停止の提案は、最終結果で達成した最高の検証精度を採用することを意味しますか?どういうわけかこれは合法的ではないようです。開発セットがない実際の状況では、この情報はありません。しかし、その場合、そもそも早期停止を使用する理由は何でしょうか。たとえば、フォールドのエポック数を平均してエポック数を決定し、それを後で実行するテストに使用しますか?


通常、モデルパフォーマンスの公平な見積もりを取得するために使用する個別のテストデータがあります。
アーロン

はい。トレーニング、開発、テストの分割があります。しかし、テストスプリットで早期停止を使用すると、不正行為になります。したがって、最終実行のテストセットで早期停止メソッドを使用することはできません。その場合、早期停止は、(過剰適合を防ぐために)テストセットで実行するエポック数を把握するためにのみ役立ちます。私が理解している限りでは。
V1nc3nt 2017

同様の質問が存在することを指摘しておく必要がありますが、この質問は単一のモデルに関するものですが、前の質問はモデルの混合のようなものです(または私は信じています-正直なところ、質問と回答の両方私には理解するのがかなり難しいです)。したがって、私は、前の質問がここでOPによって提起された質問に対する答えを持っているとは思いません。
fnl 2017

回答:


7

たとえば、フォールドのエポック数を平均してエポック数を決定し、それを後で実行するテストに使用しますか?

可能な限り短い答え:はい!しかし、いくつかのコンテキストを追加しましょう...

ディープラーニングブックの早期停止に関するセクション7.8、246ページ以降を参照していると思います。ただし、そこで説明されている手順は、実際の手順とは大きく異なります。Goodfellow et al。最初に、トレーニング、開発、テストの3つのセットにデータを分割することをお勧めします。次に、そのモデルからのエラーが(開発セットで)増加するまで(トレーニングセットで)トレーニングし、その時点で停止します。最後に、開発セットのエラーが最も少ないトレーニング済みモデルを使用して、テストセットで評価します。相互検証は一切含まれていません。

ただし、早期停止(ES)と交差検証(CV)の両方、およびモデルの評価をすべて同じセットで実行しようとしているようです。つまり、すべてのデータをCVに使用し、ESを使用して各スプリットでトレーニングし、それらのCVスプリットの平均パフォーマンスを最終的な評価結果として使用しているようです。それが事実である場合、それは確かに過度の適合であり(確かにGoodfellow et al。によって記述されているものではありません)、あなたのアプローチは、ESが意図するものとは正反対の結果を提供します- 防止する正則化手法として過剰適合。理由が明確でない場合:トレーニング中に最終的な評価インスタンスに「ピーク」を設定して、トレーニングをいつ(「早期」)停止するかを把握したため。つまり、トレーニング中に評価インスタンスに対して最適化しています。これ、定義上、モデルを(その評価データに対して)(過剰に)適合しています。

それで、今までに、他の2つの質問にお答えしたいと思います。

higgs brosonによる回答(上記の最後の質問に対する)は、CVとESを組み合わせてトレーニング時間を節約するための有意義な方法をすでに提供しています:完全なデータを2つのセット(devとテストセット)にのみ分割できます-devセットを使用して、各スプリットにESを適用しながらCVを行います つまり、開発セットの各スプリットでトレーニングを行い、そのスプリットを評価するために取っておいたトレーニングインスタンスの最小エラーに達したら停止します[1]。次に、各スプリットから最小のエラーに到達するために必要なエポック数を平均し、その(平均された)エポック数の完全な開発セットでトレーニングします。最後に、脇に置いてまだ触れていないテストセットでその結果を検証します。

[1] higgs brosonとは異なり、毎回評価することをお勧めします。その理由は2つあります。(1)トレーニングと比較して、評価時間はごくわずかです。(2)、あなたの分を想像してください。エラーはエポック51にありますが、エポック50および60で評価します。エポック60でのエラーがエポック50でのエラーよりも低くなる可能性は低くありません。それでも、エポックパラメータとして60を選択します。これは明らかに最適とは言えず、実際には最初からESを使用する目的に少し反しています。


お返事ありがとうございます。私はすでにデータを開発とテストで分割しています。テストセットには触れなかった。開発セットをさらに10分割し、CVを実行します。9倍のトレーニング、1倍の開発者。devフォールドはESに使用され、各エポックをすでにチェックしています。分割の方法については詳しく説明しなかったので(ごめんなさい!)私はあなたが私にあなたがするように提案したことをすでにやっていましたか、それともどこかであなたを誤解しましたか?
V1nc3nt 2017

よくできました-あなたはすでにすべてを正しく行っていると思います!
fnl 2017

つまり、最終的には、早期停止はハイパーパラメータの「エポック数」を調整するための方法にすぎません。私は間違った印象でそれを使い始めました、そして私はそれを間違った方法で使用したので、私はもう一度やり直してすべてのテストを繰り返さなければならないのではないかと心配しました。でもスムーズに組み込めます。ご協力いただきありがとうございます。
V1nc3nt 2017

3

交差検証を使用して、早期停止でトレーニングするエポックの最適な数を決定する方法は次のとおりです。1から100エポックまでトレーニングしていると仮定します。フォールドごとに、モデルをトレーニングして、たとえば10エポックごとに検証エラーを記録します。検証エラーと訓練されたエポックの数のこれらの軌跡を保存し、すべてのフォールドにわたってそれらを平均します。これにより、「平均テストエラーvsエポック」曲線が生成されます。使用する停止点は、平均テストエラーを最小化するエポックの数です。その後、その多くのエポックの完全なトレーニングセット(相互検証なし)でネットワークをトレーニングできます。

早期停止の目的は、過剰適合を回避することです。N分割交差検証を使用して、Nの合成トレイン/テストセットを作成し、(通常は)結果を平均して、モデルの一般化誤差を推定します。うまくいけば、後で与えられるテストセット(別名新しい実世界のデータ)は、CVで生成された合成テストセットと十分に類似しているので、この新しいテストでは、以前に見つけた停止点が最適に近くなります。データ。


最初の段落で説明しているのは、提案されている「早期停止」ではありません。結果を比較するために、各フォールドでこれらの100エポックのモデルを実行する必要があるためです。しかし、私が正しく理解していれば、通常、交差検証の早い段階で停止することもできます(多くの時間も節約できます)。とにかく、それは最終的なテスト実行のために実行するエポック数を把握するための合理的な方法のようです。しかし、提案されているように早期停止(CVについても)を使用して、最適な最終調整モデルの最初の段落で説明した方法を使用しませんか?
V1nc3nt 2017

1
私が「早期停止」を説明したのは、ほとんどの人がそれを行う方法だと思います。通常、CVでテストエラーとエポックカーブを生成しているときは、トレーニングするエポックの総数を修正するだけです。うまくいけば、許可されたエポックの最大数に到達するまでに、エラー曲線は平坦になります。そうでない場合は、戻って、より大きな最大エポック制限でプロセスを繰り返します。一方、テストエラーが50エポックでプラトーになったことをプログラムから通知された場合、100にトレーニングする必要はありません。テストエラーが停止するのを確認できるように、トレーニングを十分に行うことが目標です。改善しています。
ヒッグスブローソン2017

1
フォールド全体で最大トレーニングエポック数を一定に保つもう1つの理由は、1つのフォールドではテストエラーが60エポックで改善を停止し、別の理由では80エポックで停止することもあります。フォールド全体ですべてのテストエラー曲線を平均して実際の停止点を決定する場合、各フォールドの各エポックでのテストエラーデータが必要になります。フォールド内のトレーニングを早期に停止すると、それができなくなる可能性があります。
ヒッグスブローソン2017

実際、トレーニングには年齢がかかるので、私は最初に早期停止を使用し始めました。モデルには多くのパラメーターとデータがあります。したがって、検証エラーが増えるとすぐに停止するようにしました(いわゆる「忍耐」パラメーターとして2つのエポックが連続する場合)。ですから、学習が止まるまで、実際にトレーニングすることはできません。しかし、それでも最終モデルで提案したことを実行して、そのすべてのフォールドのエポックからのエラー軌跡を比較し、平均エラーが最も低いエポックの数をとることができます。私はあなたを正しく理解しましたか?もちろん、すべてのフォールドの計算されたエポックの最小値までしか比較できません。
V1nc3nt 2017

1
ヴィンセント、あなたは正しく理解していると思います。エラー曲線を一緒に平均化するとき、実際には、フォールド全体の最小エポック番号で停止する必要があります。安全のために、戻って、見つかった最大停止エポックまで他のフォールドでモデルをトレーニングすることをお勧めします。
higgs broson 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.