早期停止と相互検証


8

私は現在、過剰適合を防ぐために私の仕事で早期停止を使用しています。具体的には、早期停止から取られたものですが、いつですか?

ここで、10分割交差検証が広く使用されていると思われる他の分類アルゴリズムと比較したいと思います。

ただし、クロス検証が適切なパラメーターの過剰適合または選択を防ぐための方法であるかどうかについては、混乱しています。(またはこれはまったく同じですか?)また、早期停止方法と相互検証を相互に、または組み合わせて使用​​できるかどうかもわかりません。

だから問題は:早期停止と相互検証の関係は何ですか?

回答:


4

交差検証は、教師あり学習アルゴリズムの汎化精度を推定する方法です。

早期停止は過剰適合を回避する方法であり、学習モデルの汎化精度とトレーニング精度の関係を評価する方法が必要です。

したがって、早期検証フレームワーク内で、相互検証を使用して、引用した論文で言及されている検証セットを置き換えることができます。たとえば、10分割交差検証は、単一の検証セットを使用するよりも正確であり、通常、汎化エラーのより良い推定になります。

要約すると、相互検証は、早期停止フレームワークの一部として使用できる一般化の精度の測定です。


1
それはすべて理にかなっています、乾杯。しかし、発見したクロス検証は、特定のメソッドのパラメーターを選択するために使用されているように見え、そのメソッドの使用時に早期に停止することはありません。だから私はまだ何かが欠けているに違いないと思います。
アンディT

@AndyT多分ここで注目するのは汎化推定です。パラメータの選択と早期停止の両方で、汎化誤差の優れた推定量が必要です。N分割交差検証は、そのような推定量の1つです。他にも、ホールドアウトとブートストラップの繰り返し、または単純な検証セットなどがあります。パラメーターの選択と早期停止の両方のケースで何をしようとしているのかは、モデルが目に見えないデータに対してどのように実行されるかを評価して、適切なモデルを選択できるようにすることです。これを行うには、どちらの場合も汎化推定量を使用します。それは役に立ちますか?
image_doctor 2015年

はい、それは明らかです。お時間をいただきありがとうございます!それは大歓迎です。
アンディT

@AndyT問題ありません。プロジェクトがうまくいくことを願っています!
image_doctor 2015年

1

あなたが言及する2つの一般化アプローチに加えて、他にもたくさんあります。

  • ゼロ(モデル)パラメーターの数と大きさを最小化する正則化項を損失(コスト)関数に追加する
  • 各トレーニングエポックでモデルの重み/パラメーターの一部をランダムにドロップ(ゼロアウト)する
  • モデルに確率ノードの層を追加する(たとえば、ロジスティック関数の出力によって与えられる「確率」からのサンプリング)

これらのアプローチの多く(交差検証と早期停止のアプローチを含む)を組み合わせて、目に見えないデータに対するモデルのパフォーマンス(汎化パフォーマンス)を最大化できます。

早期停止のアプローチに関する1つの注記。ニューラルネットの場合、Geoffrey Hintonは、テストセットの精度が最大に達したときにトレーニングを停止することをお勧めします(正規化項を除くテストセットの損失は最小です)。ヒントンのアプローチのもう1つの「微調整」は、テストセットの精度が改善しなくなった(テストセットの損失が減少しなくなった)場合でも、test_setの精度がトレーニングセットよりも良い(損失が小さい)場合に停止しないことです。これで複数のエポックのトレーニングが得られる可能性は低いですが、特に小さなtest_setの場合は、少し役立つことがあります。極端に小さなテストセット(Kフォールドトレーニングや交差検証で時々使用されるような、代表的なサンプルセットよりも小さい)ではこれを行わないでください。


0

早期停止とK分割交差検証を組み合わせて使用​​することはできません。早期停止は検証セットから最適なモデルを選択するため、パフォーマンスはテストセットで検証する必要があります。ただし、K分割交差検証では、早期停止を使用して検証セットから最適なモデルを選択した場合、テストセットはありません。検証セットで再度検証されます。K分割交差検証は、最良のモデルの平均精度(精度で測定)を取得していますが、それは意味がありません。


トレーニングの反復回数はハイパーパラメーターとして扱うことができ、他のハイパーパラメーターと同様に交差検証を使用して選択できます。これを合理的に「早期停止」と呼ぶことができます。
user20160 2018

K分割交差検証で早期停止を使用する場合、エポックの数は検証セットによって固定され、分割ごとに異なります。これにより、ネットワークは各スプリットで最適なモデルを選択するようになりますが、これは平均的なパフォーマンスを表すものではありません。
tianyu zhou 2018

2
それを行う方法は、1)すべてのフォールドで(たとえば、指定された最大値まで)いくつかの反復をトレーニングすることです。2)反復回数の関数として(検証範囲全体の)平均検証セッ​​トエラーを計算します。3)平均検証セッ​​トエラーを最小化する反復回数を選択します。
user20160 2018

これが私の解決策です:1。すべてのデータをシャッフルします。2。sklearnで10倍にします、kfold = StratifiedKFold(n_splits = 10、shuffle = False)3、コールバックを設定します:callbacks_list = [EarlyStopping(monitor = 'val_loss'、patience = 50、verbose = 0、mode = 'min')] 4.早期停止により、最良のモデルを選択します。history = model.fit(X [train]、Y [train]、epochs = 250、batch_size = 512、verbose = 1、callbacks = callbacks_list、validation_split = 0.1、shuffle = False)X [trainから別の自動分割検証セットを設定します]、Y [電車]。5. X [test]とY [test]でパフォーマンスをテストします。scores= model.evaluate(X [test]、Y [test]、verbose = 0)
tianyu zhou
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.