web-dev-qa-db-ja.com

ディープニューラルネットで検証の精度を上げる方法は?

13000のトレーニング画像と3000の検証画像を使用して11クラスの画像分類器を構築しようとしています。私はmxnetを使用してトレーニングされているディープニューラルネットワークを使用しています。トレーニングの精度は向上し、80%を超えていますが、検証の精度は54〜57%の範囲になり、向上していません。ここで問題になるのは何ですか?画像の数を増やす必要がありますか?

8
sau

ここでの問題は、ネットワークがある時点で有用な一般機能の学習を停止し、トレーニングセットの特性に適応し始めることです(結果として過剰適合)。便利な機能を学習し続けるためにネットワークを「強制」したいのですが、ここにはいくつかのオプションがあります。

  1. 重みの正則化を使用。重みを低く抑えようとするため、一般化が向上することがよくあります。さまざまな正則化係数を試してください。 0.1、0.01、0.001を試して、それらが精度にどのような影響を与えるかを確認してください。
  2. 入力を破損(たとえば、一部のピクセルをランダムに黒または白に置き換えます)。このようにして、入力から情報を削除し、ネットワークを「強制」して、重要な一般機能を取得します。入力のどれだけが破損されるべきかを決定するノイズ係数で実験してください。調査によると、15%〜45%の範囲であれば何でもうまく機能します。
  3. トレーニングセットを拡張します。画像を扱っているので、既存の画像を回転/拡大縮小するなどしてセットを拡張できます(提案どおり)。画像の前処理を試すこともできます(たとえば、画像を白黒、グレースケールなどにマッピングしますが、この手法の効果は正確な画像とクラスによって異なります)。
  4. ノイズ除去基準を使用してレイヤーを事前トレーニングします。ここでは、ネットワーク全体を微調整する前に、ネットワークの各レイヤーを個別に事前トレーニングします。事前トレーニングは、入力信号の再構築に役立つ重要な一般的な機能を取得するようにレイヤーを強制します。たとえば、自動エンコーダーを調べます(これらは過去に画像分類に適用されてきました)。
  5. ネットワークアーキテクチャの実験。ネットワークに十分な学習能力がない可能性があります。さまざまなニューロンタイプ、層の数、および隠れニューロンの数を試してください。圧縮アーキテクチャ(入力よりニューロンが少ない)と疎アーキテクチャ(入力よりニューロンが多い)を試すようにしてください。

残念ながら、よく一般化されたネットワークのトレーニングプロセスには、多くの実験と、少しの人間の監督によるパラメータ空間のほぼブルートフォース探索が含まれます(このアプローチを採用した多くの研究が見られます)。各パラメーターに3〜5の値を試して、それがどこかにつながるかどうかを確認することをお勧めします。

反復回数の関数としてプロットの精度/コスト/ f1を実験し、それがどのように動作するかを確認します。多くの場合、テストセットの精度がピークに達し、その後継続的に低下します。したがって、優れたアーキテクチャ、正則化、破損などとは別に、最良の結果をもたらす十分な数の反復も探しています。

もう1つのヒント:各トレーニングエポックが画像の順序をランダム化することを確認してください。

30
krychu

これは、モデルが特定の値に固定されるまで段階的に検証の精度が向上していたため、モデルがトレーニングセットに適合しているケースのように見えます。学習率がもう少し高い場合は、トレーニングセットの精度が高くなるにつれて、検証の精度が低下することになります。

トレーニングセットの数を増やすことが、この問題の最善の解決策です。また、既存の画像セットにさまざまな変換(フリッピング、少し大きい画像からランダムな部分を切り抜く)を適用して、モデルがよりよく学習しているかどうかを確認することもできます。

2
Anoop K. Prabhu