大きな変動を示す検証。原因は何でしょうか?


8

3クラスの画像分類問題のためにCNNをトレーニングしています。トレーニングの損失はスムーズに減少しました。これは予想される動作です。しかし、私の検証損失は多くの変動を示しています。

ここに画像の説明を入力してください

これは私が心配する必要があることですか、それともパフォーマンス測定(精度)で最高のスコアを得るモデルを選択するだけですか?

追加情報: PyTorchのImageNetデータで事前トレーニングされたResnet-18の最後のレイヤーを微調整しています。データが非常に不均衡であるため、トレーニングフェーズに加重損失関数を使用していることに注意する必要があります。ただし、損失をプロットするために、検証とトレーニング損失を比較できるように、重み付けされていない損失を使用します。私は、重み付けされていない損失を使用します。トレーニングデータセットと検証データセットの分布が多少異なるというわけではありません(ただし、どちらも非常に不均衡です)。


crossvalidatedでこの質問を確認してください。そこの作者はあなたと同じような問題を抱えています。stats.stackexchange.com/questions/255105/...
Nord112

回答:


3

あなたの陰謀を簡単に調べた結果、いくつかの結論を導き出し、試してみることができます。(これは、セットアップについてこれ以上何も知らないままです:トレーニングパラメーターとモデルハイパーパラメーター)。

損失が減少しているように見えます(検証損失を通じて最適なラインを示します)。また、曲線がまだ下に向いているため、結果を改善するためにより長い時間トレーニングできる可能性もあります。

最初に、タイトルの質問に答えてみましょう。

検証損失の変動の原因は何ですか?

私は3つの可能性を考えることができます。

  1. 正則化 -学習プロセスをスムーズにし、モデルの重みをより堅牢にするため。正則化を追加/増加すると、ウェイトへの大きな更新が導入されなくなります。
  2. バッチサイズ -比較的小さい(例:<20?)。これは、ネットワークの端で測定された平均誤差が少数のサンプルのみを使用して計算されることを意味します。たとえば8、バッチサイズがの場合、4/8正しい結果を得て比較すると、損失を見ると相対的に6/8大きな違いがあります。このような小さなバッチでエラーの平均をとると、それほど滑らかではない損失曲線になります。十分なGPUメモリ/ RAMがある場合は、バッチサイズを増やしてみてください。
  3. 学習率 -大きすぎる可能性があります。これは、正規化に関する最初のポイントと同様です。よりスムーズな改善を行うには、最小損失に近づくにつれて学習のペースを遅くする必要がある場合があります。これはおそらくスケジュールで実行することができます。これにより、6エポック後など、検証の損失が改善されないたびに、何らかの要因で減少します(たとえば、0.5を掛けます)。これにより、大きなステップを踏んで、最小値をオーバーシュートして、その周りで跳ね返ることを防ぐことができます。

あなたのタスクに固有ですが、微調整の範囲を広げるために、おそらく別のレイヤーのフリーズを解除することもお勧めします。これにより、データに基づいて、Resnet-18を学習するためのもう少し自由が与えられます。

あなたの最後の質問について:

これは私が心配する必要があることですか、それともパフォーマンス測定(精度)で最高のスコアを得るモデルを選択するだけですか?

あなたは心配するべきですか?つまり、いいえ。あなたのような検証損失曲線は完全に細かく、妥当な結果を提供できます。ただし、解決する前に、上記の手順のいくつかを試してみます。

あなたは最高のパフォーマンスのモデルを選ぶべきですか?検証の損失(検証の精度)が最も高い時点でモデルを使用することを意味している場合は、さらに注意する必要があります。上記のプロットでは、これはエポック30前後に相当する可能性がありますが、個人的には、カーブが少し変動しにくくなる、もう少しトレーニングした点を取り上げます。繰り返しますが、上記の手順のいくつかを試した後。


あなたの答えデクスターをありがとう!学習率が時間とともに減衰することで、検証の損失曲線が後の時代ではるかに不安定になることに、私は実際に気づきました。これで、別のレイヤーのフリーズ解除に関するフォローアップの質問が1つあります。私はすでにこれを行うことを考えていましたが、どうすればよいかわかりません。最初に多数のエポックについて分類子をトレーニングし、次に分類子とたたみ込み層の両方をトレーニングする必要がありますか、それともすぐに両方のトレーニングを開始できますか(おそらく異なる学習率で)。私が持っている少量の計算リソースを無駄にしたくありません。
ティム

@Tim-可能であれば、通常、エンドツーエンド、つまり両方を同時にトレーニングすることをお勧めします。そのため、別のレイヤー(まだフリーズされている出力に最も近いレイヤー)のフリーズを解除してから、すべてをトレーニングします。これで効果が上がらない場合は、フリーズされていないレイヤーのウェイトを再初期化し(すべてのレイヤーではない!)、長時間トレーニングすることもできますが、これには他のリスクがあり、状況が悪化する可能性があります。それは最後の手段と考えてください。
n1k31t4

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.