Adam を使用して PyTorch で CNN をトレーニングしています。初期学習率は 1e-5 です。私のエポックには 5039 個のサンプルがあり、バッチ サイズは 1 です。エポックの終わりにトレーニング損失の規則的なスパイク パターンがあることを確認しました。以下はトレーニング損失のプロットです。
プロットから、エポックの終わりに正確に発生しているスパイクの明確なパターンを見ることができます。私のエポックには 5039 個のサンプルが含まれています。興味深いことに、スパイクは撃墜するだけでなく、時には上昇することもあります。
私がそうではないと思うのは:
これらのスパイクは、データセットをシャッフルしなければ説明できた可能性があります。ただし、エポックごとにデータセットをシャッフルします。
この動作は、エポックの最終バッチが他のバッチよりも小さく、損失の大きさが異なる場合に発生することが知られています (なぜ私のトレーニング損失には定期的なスパイクがあるのですか? )。ただし、バッチサイズが 1 であるため、私の場合はそうではありません。
潜在的なハックの 1 つは、更新ステップの前にグラデーション クリッピングを適用することです。ただし、この問題を処理するのは良い方法ではないようです。
- このスパイク パターンの理由についてどう思いますか?
- このようなパターンがあるのはどれほど悪いことですか?