web-dev-qa-db-ja.com

ケラス早期停止

私はKerasを使って私のプロジェクトのためにニューラルネットワークを訓練しています。 Kerasは早期停止のための機能を提供しました。早期停止を使用してニューラルネットワークが過剰適合するのを防ぐためにどのようなパラメータを守るべきかを知っていますか?

69
AizuddinAzman

early stopping

早期停止は、基本的に、損失が増加し始めると(つまり検証の正確性が低下し始めると)トレーニングを停止することです。によると ドキュメント それは以下のように使われます。

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=0,
                              verbose=0, mode='auto')

値はあなたの実装(問題、バッチサイズなど)に依存しますが、一般的に私が使用するであろう過剰適合を防ぐために。

  1. monitor引数を'val_loss'に設定して、検証の喪失を監視します(交差検証または少なくともトレイン/テストセットを使用する必要があります)。
  2. min_deltaは、あるエポックでの損失を改善として定量化するかどうかのしきい値です。損失の差がmin_deltaを下回る場合、それは改善なしとして定量化されます。損失が悪化したときに関心があるため、0のままにしておくことをお勧めします。
  3. patience引数は、損失が増加し始めたら(改善が止まるまで)止まるまでのエポック数を表します。これはあなたの実装に依存します、あなたが非常に小さなバッチまたは大きな学習率あなたの損失を使うならばzig-zag(精度がよりうるさい)ので、大きなpatience引数を設定してください。 大きなバッチ小さな学習率を使用すると、損失がスムーズになるため、小さいpatience引数を使用できます。いずれにせよ、私はそれを2のままにして、モデルにもっとチャンスを与えるようにします。
  4. verboseは何を印刷するかを決定し、デフォルト(0)のままにします。
  5. mode引数はあなたの監視された量がどの方向を向いているかに依存します(減少または増加するはずです)。損失を監視するのでminを使用できます。しかし、kerasがそれを処理してautoに設定しましょう。

だから私はこのようなものを使用して、エラーの損失を早めに停止した場合と停止しない場合でプロットして実験します。

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=2,
                              verbose=0, mode='auto')

コールバックがどのように機能するかについてのあいまいさの可能性のために、私はもっと説明しようとします。モデル上でfit(... callbacks=[es])を呼び出すと、Kerasは与えられたコールバックオブジェクトにあらかじめ決められた関数を呼び出します。これらの関数はon_train_beginon_train_endon_Epoch_beginon_Epoch_endおよびon_batch_beginon_batch_endと呼ばれることができます。早期停止コールバックはすべてのエポック終了時に呼び出され、現在のものと最良の監視値を比較し、条件が満たされると停止します(最良の監視値を観察してから経過した期間最後の値はmin_deltaなどよりも大きいです。

コメントで@BrentFaustによって指摘されているように、モデルのトレーニングはアーリーストップ条件が満たされるか、またはfit()epochsパラメータ(デフォルト= 10)が満たされるまで続けられます。 Early Stoppingコールバックを設定しても、モデルはepochsパラメータを超えてトレーニングされません。したがって、epochsの値を大きくしてfit()関数を呼び出すと、Early Stoppingコールバックの恩恵を受けることができます。

113
umutto