2

Adam を使用して PyTorch で CNN をトレーニングしています。初期学習率は 1e-5 です。私のエポックには 5039 個のサンプルがあり、バッチ サイズは 1 です。エポックの終わりにトレーニング損失の規則的なスパイク パターンがあることを確認しました。以下はトレーニング損失のプロットです。 ここに画像の説明を入力

プロットから、エポックの終わりに正確に発生しているスパイクの明確なパターンを見ることができます。私のエポックには 5039 個のサンプルが含まれています。興味深いことに、スパイクは撃墜するだけでなく、時には上昇することもあります。

私がそうではないと思うのは:

  • これらのスパイクは、データセットをシャッフルしなければ説明できた可能性があります。ただし、エポックごとにデータセットをシャッフルします。

  • この動作は、エポックの最終バッチが他のバッチよりも小さく、損失の大きさが異なる場合に発生することが知られています (なぜ私のトレーニング損失には定期的なスパイクがあるのですか? )。ただし、バッチサイズが 1 であるため、私の場合はそうではありません。

潜在的なハックの 1 つは、更新ステップの前にグラデーション クリッピングを適用することです。ただし、この問題を処理するのは良い方法ではないようです。

  1. このスパイク パターンの理由についてどう思いますか?
  2. このようなパターンがあるのはどれほど悪いことですか?
4

1 に答える 1