検証の精度が変動するのはなぜですか?


31

MRIデータを使用して癌に対する反応を予測する4層CNNがあります。ReLUアクティベーションを使用して、非線形性を導入します。列車の精度と損失はそれぞれ単調に増加および減少します。しかし、私のテストの精度は大きく変動し始めます。学習率を変更して、レイヤー数を減らしてみました。しかし、それは変動を止めるものではありません。私もこの答えを読み、その答えの指示に従ってみましたが、再び運はありませんでした。誰が私が間違っているのかを理解するのを手伝ってもらえますか?

スクリーンショット



はい、その答えを読みました。検証データのシャッフルは役に立たなかった
ラグフラム

4
コードスニペットを共有していないため、アーキテクチャの何が問題なのかあまり言えません。しかし、スクリーンショットでは、トレーニングと検証の正確さを確認すると、ネットワークが過剰に適合していることは明らかです。ここでコードスニペットを共有する方が良いでしょう。
ナイン

サンプルはいくつありますか?たぶん、変動はそれほど重要ではありません。また、精度が恐ろしい尺度である
rep_ho

検証の精度が変動しているときに、アンサンブルアプローチを使用するのが良いかどうかを誰かが確認できますか アンサンブルによって変動するvalidation_accuracyを適切な値に管理できたからです。
Sri2110

回答:


27

精度の定義を正しく理解していれば、精度(データクラスの%が正しく分類されている)は、たとえばMSE(平均二乗誤差)よりも累積的ではありません。そのためloss、精度が変動している一方で、急速に増加していることがわかります。

直感的には、これは基本的に、正しいランダムな推測の数が常に変動するため、例の一部がランダムに分類さ、変動が生じることを意味します(コインが常に「頭」を返す場合の精度を想像してください)。基本的にノイズに対する感度(分類によりランダムな結果が生成される場合)は、オーバーフィッティングの一般的な定義です(ウィキペディアを参照)。

統計および機械学習で最も一般的なタスクの1つは、「モデル」をトレーニングデータのセットに適合させて、一般的なトレーニングされていないデータの信頼できる予測を行うことです。オーバーフィッティングでは、統計モデルは基礎となる関係の代わりにランダムなエラーまたはノイズを記述します

過剰適合の別の証拠は、損失が増加していること、損失がより正確に測定されていること、シグモイド/しきい値(損失自体の場合のようです)によって押しつぶされていない場合、ノイズの多い予測により敏感であることです。直感的には、ネットワークが出力についてあまりにも確信している場合(間違っている場合)を想像できます。そのため、ランダムな誤分類の場合、しきい値から離れた値を与えます。

あなたのケースに関して、あなたのモデルは適切に正規化されていません、考えられる理由:

  • 十分なデータポイントがありません、容量が多すぎます
  • ご注文
  • 機能のスケーリング/正規化なし/不正
  • ααα

可能な解決策:

  • より多くのデータポイントを取得します(または人為的に既存のものを拡張します)
  • ハイパーパラメーターを使用する(容量の増減/正則化用語など)
  • 正則化:ドロップアウト、早期停止などを試してください

「損失はより正確に測定され、シグモイド/しきい値によって押しつぶされないため、ノイズの多い予測に対してより敏感です」、しきい値設定に同意しませんが、損失関数としてバイナリクロスエントロピーなどを使用している場合、シグモイドは引き続き再生されます役割。
ジュバルブ

1
学習率とsgdの最小値の欠落:最小値に到達すると、おそらく過剰適合を意味します(トレーニングセットの最小値であるため)
Jan Kukacka

@Berkmeister true、私は少し言い換えました(編集を参照)。私の考えでは、損失の増加は非スカッシュ機能が使用されている兆候だと思っていました。
dk14

@JanKukackaあなたはグローバルな最小値を意味しますか?ローカルミニマム(実際にはローカルミニマムに近い)を意味します。つまり、どのミニマムからも遠すぎる場合は、それが不足しているという意味です。おそらく、もっと慎重に説明する必要があります(編集を参照)、ありがとう。
dk14

@ dk14グローバルミニマムには実際には到達できないと思うので、ローカルミニマムを意味します。距離が遠すぎる場合は、フィッティングが不足している可能性がありますが、距離が近すぎる場合は、おそらくオーバーフィッティングです。Moritz Hardtによる興味深い研究があります。「より速くトレーニングし、より良く一般化する:確率的勾配降下の安定性」(arxiv.org/abs/1509.01240)SGDでトレーニングするときのトレーニングとテストエラーの関係に境界を置きます。
ヤンKukacka

6

この質問は古いですが、まだ指摘されていないので投稿してください:

可能性1:トレーニングセットまたは検証セットのいずれかに何らかの前処理(ゼロの意味、正規化など)を適用していますが、もう一方には適用していません

可能性2:トレーニング中およびスクラッチからの推論中に異なるパフォーマンスを実行するレイヤーを構築した場合、モデルが正しく実装されない可能性があります(例:トレーニング中にバッチ正規化の移動平均と移動標準偏差が更新されますか?ドロップアウトを使用する場合、ウェイトは適切にスケーリングされますか?推論?)。これは、コードがこれらをゼロから実装し、Tensorflow / Pytorchの組み込み関数を使用しない場合です。

可能性3:みんなが指摘しているように、過剰適合。検証の精度がエポック3から50%に固定されているため、特定の状況では他の2つのオプションがより可能性が高いと思います。手元に)。


似たような問題がありますが、完全ではありません。詳細はこちら:stackoverflow.com/questions/55348052/… 私の場合、テストデータとトレーニング中に検証「精度」が一貫して高い精度を持っています。 「(損失ではなく)トレーニングの精度よりも高いです。しかし、収束せずに振動するという事実から、過剰適合を考えるようになりますが、そうでない場合もあると示唆しているので、そうでない場合、それが正当であるかどうか疑問に思います。
dusa

1
これは、与えられた答えの最も説得力のある説明です。高いバッチ正規化モメンタム(例:0.999、またはKerasのデフォルト0.99)を高い学習率と組み合わせて使用​​すると、レイヤー統計が大幅に遅れるため、トレーニングと評価で非常に異なる動作が発生する可能性があります。その場合、運動量を0.9のようなものに減らすとうまくいきます。私はOPと同様の問題を抱えていましたが、これでうまくいきました。
kristjan

5

@ dk14による回答への追加。モデルを適切に正規化した後でも変動が見られる場合、考えられる理由は次のとおりです。

  • 検証セットからランダムサンプルを使用する:各評価ステップで検証セットが異なることを意味し、検証損失も異なります。
  • 重み付き損失関数を使用する(クラスの問題が非常に不均衡な場合に使用されます)。トレインステップでは、クラスの重みに基づいて損失関数を重み付けしますが、開発ステップでは、重みなしの損失を計算します。このような場合、ネットワークは収束に向かっていますが、各トレーニングステップ後に検証損失の多くの変動が見られる場合があります。しかし、より大きな画像を待つ場合、ネットワークが実際に最小値に収束していることがわかります(変動の摩耗があります)(そのような例については、添付の画像を参照してください)。ここに画像の説明を入力してくださいここに画像の説明を入力してください

2

間違いなく過剰適合。トレーニングデータの精度とテストデータのギャップは、トレーニングに過度に適合していることを示しています。正則化が役立つかもしれません。


1

バイナリ分類問題の検証精度(私は推測)は約50%を「変動」します。つまり、モデルは完全にランダムな予測を与えます(場合によっては、より少ないサンプルを正確に推測します。一般的に、モデルはコインをひっくり返すことよりも優れていません。

{0;1}

とにかく、他の人がすでに指摘しているように、あなたのモデルは深刻な過剰適合を経験しています。私の推測では、あなたの問題は複雑すぎます。つまり、データから必要な情報を抽出することは非常に難しく、そのような単純なend2endの訓練を受けた4層conv-netは学習する機会がありません


0

あなたの状況で試すいくつかの方法があります。まず、バッチサイズを大きくしてみます。これにより、ミニバッチSGDの乱暴な動きが少なくなります。第二に、学習率を調整し、おそらくより小さく設定します。第三に、別のオプティマイザー、例えば、WRT機能の学習率を調整できるAdamやRMSPropを試してください。可能であれば、データを増やしてみてください。最後に、ドロップアウト近似を使用してベイジアンニューラルネットワークを試してください。これはYarin Galの非常に興味深い研究ですhttps://arxiv.org/abs/1506.02158


0

小規模なネットワークを試しましたか?トレーニングの精度が> .99に達する可能性があることを考慮すると、ネットワークにはデータを完全にモデル化するのに十分な接続があるように見えますが、ランダムに学習している外部接続があります(オーバーフィット)。

私の経験では、ResNet、VGG、さらに簡単なネットワークなどのさまざまなネットワークを試すことで、小規模なネットワークで安定するためのホールドアウト検証の精度を得ました。

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