ニューラルネットワークがうまく一般化されない場合はどうすればよいですか?


37

私はニューラルネットワークをトレーニングしていますが、トレーニング損失は減少しますが、参照損失または非常に類似したアーキテクチャとデータを使用した実験に基づいて、検証損失は減少しません。どうすれば修正できますか?


質問は

ニューラルネットワークが学習しない場合はどうすればよいですか?

この質問に触発された質問は、ニューラルネットワークの一般化誤差を達成可能であることが証明されているレベルまで下げる方法に関する他の質問をこの質問の複製として閉じることができるように、意図的に一般的に残されています

Metaの専用スレッドも参照してください。

「なぜ私のニューラルネットワークが一般化されないのか」というタイプの質問をリダイレクトできる一般的な質問はありますか?


4
独自の包括的な回答を投稿する場合は、QとAを同時に投稿することをお勧めします(ユーザーインターフェイスで許可されています)。そうしないと、他の人に答えを書くように勧めているので、いくつかの答えが互いに部分的に重複する可能性があります...とにかく、あなたの答えを楽しみにしています。
アメーバは、モニカを復活させる

@amoebaああ、私はそれを知りませんでした:質問に答えようとするとUIがポップアップを開くので、Q&Aを一緒に投稿できないと思いました...私が書くつもりだったものよりも完全な答え、私はちょうど重複を追加しないようにします。
DeltaIV

回答:


37

まず、「私のニューラルネットワークがうまく一般化しない」とはどういう意味か、「私のニューラルネットワークはうまく機能しない」と言うことの違いは何ですか

ニューラルネットワークをトレーニングするとき、トレーニングセットと呼ばれるラベル付きデータのセットで絶えず評価しています。お使いのモデルが正常に動作していないとトレーニングセットから学ぶことが表示されない場合、あなたはしていない、まだ一般化の問題を持って、代わりに参照してください、このポスト。お使いのモデルがトレーニングセットに十分な性能を達成しているが、以前は目に見えないデータにうまく実行できません(例えば、検証/テスト・セット)しかし、もし、あなたはない一般化の問題を抱えています。

モデルが適切に一般化されないのはなぜですか?

最も重要なことは、ネットワークがうまく一般化されない理由を理解することです。大容量の機械学習モデルには、トレーニングセットを記憶する機能があり過適合につながる可能性があります

オーバーフィッティングとは、推定者がトレーニングセットの学習を開始し、トレーニングサンプルのノイズのモデル化を開始した状態です(すべての有用な関係に加えて)。

たとえば、下の画像では、青い線が明らかにオーバーフィットしていることがわかります。

しかし、なぜこれが悪いのでしょうか?

以前に見えなかった新しいデータ(検証/テストセット)でモデルを評価しようとすると、モデルのパフォーマンスは予想よりもはるかに悪くなります。

オーバーフィットを防ぐ方法は?

投稿の冒頭で、モデルの複雑さが実際にオーバーフィッティングを引き起こしていることを示唆しました。これは、モデルが固有のノイズをマッピングするトレーニングセットから不要な関係を抽出できるようにするためです。過剰適合を減らす最も簡単な方法は、モデルの容量を本質的に制限することです。これらの手法は、正則化手法と呼ばれます。

  • パラメータノルムペナルティ。これらは、各モデルの重み更新関数に追加の項を追加します。これは、パラメーターのノルムに依存します。この用語の目的は、実際の更新に対抗することです(つまり、各重量を更新できる量を制限します)。これにより、モデルは外れ値やノイズに対してより堅牢になります。このような正則化の例はL1およびL2正則化で、LassoRidgeElastic Netのリグレッサーで見つけることができます。
    ニューラルネットワークの各(完全に接続された)レイヤーは単純な線形回帰のように機能するため、これらはニューラルネットワークで使用されます。最も一般的な用途は、各レイヤーを個別に正規化することです。
    ケラスの実装

  • 早期停止。この手法は、ノイズのモデル化を開始する前に、データからすべての意味のある関係を抽出することを学習した時点で、推定器のトレーニングフェーズを時期尚早に停止しようとします。これは、検証の損失(または選択した検証メトリック)を監視し、このメトリックの改善が停止したときにトレーニングフェーズを終了することによって行われます。このようにして、推定器に有用な情報を学習するのに十分な時間を与えますが、ノイズから学習するには十分ではありません。ケラスの実装

  • ニューラルネットワーク固有の正則化。以下に例を示します。
    • ドロップアウトドロップアウトは、驚くほどうまく機能する興味深い手法です。ドロップアウトは、ネットワーク内の連続する2つのレイヤー間に適用されます。各反復で、2つのレイヤーを接続する、指定された割合の接続(ランダムに選択)がドロップされます。これにより、後続のレイヤーは、前のレイヤーへのすべての接続に依存します
      ケラスの実装
    • 転移学習。これは特にディープラーニングで使用されます。これは、大規模な汎用データセットで事前にトレーニングされた同じアーキテクチャを使用して、ネットワークの重みを別のネットワークの重みに初期化することにより行われます。
    • ディープニューラルネットワークに過剰適合を制限できる他のものがあります:バッチ正規 regulizerとして、いくつかのケースで行動することができ、(例えば当初のモジュールが)ドロップアウトと同様に動作します。SGDの比較的小さなサイズのバッチ。これは過剰適合を防ぐこともできます。隠れ層の重み小さなランダムノイズを追加します。

モデルの容量を制限する以外に、過剰適合を防ぐ別の方法は、データの品質を改善することです。最も明白な選択は外れ値/ノイズ除去ですが、実際にはその有用性は限られています。より一般的な方法(特に画像関連のタスク)は、データ拡張です。ここでは、トレーニングサンプルをランダムに変換して、モデルからは異なるように見えても、同じセマンティック情報(画像の左右反転など)を伝えるようにします。
データ拡張の概要

実用的な提案:

  • 最も効果的な正則化手法はドロップアウトですです。これは、最初に使用する必要があることを意味します。ただし、ドロップアウトをあらゆる場所に配置する必要はありません(おそらくそうすべきではありません)!オーバーフィッティングが発生しやすい層は、ほとんどのパラメーターが含まれているため、完全接続(FC)層です。これらのレイヤーにドロップアウトを適用する必要があります(次のレイヤーへの接続に影響します)。
  • バッチ正規化は、正則化効果を持つことに加えて、他のいくつかの方法でモデルを支援します(たとえば、収束を高速化し、より高い学習率の使用を可能にします)。FCレイヤーでも使用する必要があります。
  • 前述のように、トレーニングフェーズでモデルを予定よりも早く停止することも有益です。早期停止の問題は、どの時点でもモデルが再び改善を開始しないという保証がないことです。早期停止よりも実用的なアプローチは、検証セットで最高のパフォーマンスを達成するモデルの重みを保存することです。ただし、これはモデルのパフォーマンスの公平な推定値ではないため、注意が必要です(トレーニングセットよりも優れています)。検証セットをオーバーフィットすることできます。それについては後で詳しく説明します。
    ケラスの実装
  • 一部のアプリケーション(画像関連のタスクなど)では、ImageNetの重みを見つけることができる既に確立されたアーキテクチャ(例:VGG、ResNet、Inception)に従うことを強くお勧めします。このデータセットの一般的な性質により、画像関連のタスクに使用するのに十分な機能を順番に使用できます。オーバーフィットに対して堅牢であることに加えて、これによりトレーニング時間が大幅に短縮されます。
    同様の概念のもう1つの使用法は次のとおりです。タスクに多くのデータがないが、同じようなタスクがある場合は、転移学習を使用して過剰適合を減らすことができます。最初に、より大きなデータセットを持つタスクのためにネットワークをトレーニングし、次に微調整を試みます最初に欲しかったモデルへのモデル。ほとんどの場合、最初のトレーニングにより、モデルが過適合に対してより堅牢になります。
  • データ増大。データセットを大きくすることは常に役立ちますが、データ増強手法には欠点があります。より具体的には、データのセマンティックコンテンツを台無しにする可能性があるため、過度に増強しないように注意する必要があります。たとえば、画像の増強では、画像の翻訳/シフト/スケーリングまたは明るさ/コントラストの調整が多すぎると、含まれている情報の多くが失われます。さらに、タスクごとにアドホックな方法で拡張スキームを実装する必要があります(たとえば、手書きの数字認識では、通常、数字は揃えられ、回転しすぎないようにします。また、方向を反転させないでください。水平/垂直対称ではありません。医療画像でも同じです。
    0、トレーニングセットで損失がます。

9

以下の経験的証拠がたくさんあります 十分な深さのニューラルネットワークが巨大なデータセットのランダムラベルを記憶できるます(Chiyuan Zhang、Samy Bengio、Moritz Hardt、Benjamin Recht、Oriol Vinyals、「ディープラーニングを理解するには一般化の再考が必要です」)。したがって、原則として、十分に大きいNNを取得することにより、トレーニングエラーを常に非常に小さな値に減らすことができます。

物事はかなり異なります 一般化エラーます。学習問題ごとに、必要なだけ一般化エラーを生成できる学習可能なNNモデルが存在することを確認できません。このため、最初のステップは

1.期待を正しく設定する

データセットまたは参照を見つけることができる最も類似したものに、探している一般化エラーに到達する可能性のあるアーキテクチャが存在することを示す信頼できる参照を見つけます。たとえば、こちらをご覧ください

現在の最先端の畳み込みニューラルネットワークとは何ですか?

さまざまなタスクでのCNNの現在の(回答時の)SOTA(State Of The Art)パフォーマンスを見つける。すべてのインフラストラクチャが適切に配置されていることをテストするために、独自のデータセットでトレーニングする前に、これらの参照データセットでそのような結果を再現することをお勧めします。

2.トレーニング手順に問題がないことを確認します

質問への回答に記載されているすべてのチェック

ニューラルネットワークが学習しない場合はどうすればよいですか?

トレーニング手順に問題がないことを確認することは、一般化エラーを減らすための前提条件です(NNが学習していない場合、一般化することは学習できません)。これらのチェックには、とりわけ以下が含まれます。

  • 単体テスト
  • データセットチェック(トレーニングセットとテストセットの両方のいくつかのランダムな入力/ラベルサンプルを見て、ラベルが正しいことを確認します。入力画像の幅とサイズをチェックします。トレーニング/テストセットのサンプルをシャッフルし、影響を確認します結果;など)
  • ランダム化テスト
  • 前処理とパッケージのバージョンを標準化する
  • 数値実験のログブックを保持する

3.超収束を試みます

「スーパーコンバージェンス:大きな学習率を使用したニューラルネットワークの非常に高速なトレーニング」、レスリーN.スミスとニコライトピンによる、場合によってはラージラーニングレートとレスリーN.スミスの周期的ラーニングレートメソッドの組み合わせが正則化として機能することを示しています、収束を1桁加速し、広範な正則化の必要性を減らします。したがって、これは前に試すのが良いことです

4.正則化をMAXXXに設定する

正則化は、多くの場合、トレーニング時間を増やし(悪い)、トレーニングエラーを増やし、一般化エラーを減らします(良い)が、あまりにも多くの正則化は実際に両方のエラーを増やす(アンダーフィッティング)ことがあります。このため、またトレーニング時間が増加するため、トレーニングセットのオーバーフィットに成功した、さまざまな正則化手法を一度に1つずつ導入する方がよい場合がよくあります。正則化自体は、必ずしも一般化エラーが小さくなることを意味するわけではないことに注意してください。良好な一般化プロパティを実現するには、モデルに十分な容量が必要です。これは、多くの場合、正規化の利点を理解する前に、十分に深いネットワークが必要であることを意味します。

最も古い正則化方法は、おそらく早期停止と重量減衰です。他のいくつか:

  • バッチサイズを小さくします。通常、バッチサイズを小さくすると一般化エラーが小さくなるため、これを試してみてください。ただし、ミニバッチの有用性に異議を唱える人もいることに注意してください。私の経験では、それらは役立ちます(次のようなクレイジーな小さなサイズを使用する必要がない限り)m=16)、しかし、Elad Hoffer、Itay Hubara、Daniel Soudry Trainはより長く一般化する:ニューラルネットワークの大規模なバッチトレーニングにおける一般化のギャップを閉じることは同意しません。バッチノルム(以下を参照)を使用する場合、小さすぎるミニバッチは非常に有害であることに注意してください。
  • 適応オプティマイザーではなくSGDを使用します。これはすでに@shimaoでカバーされているため、完全を期すために言及しています。
  • ドロップアウトを使用:LSTMを使用する場合は、LSTMレイヤーの入力および出力ユニットにのみ標準ドロップアウトを使用します。Yarin Gal の博士号で最初に示されているように、再発ユニット(ゲート)には再発ドロップアウトを使用します論文。ただし、CNNを使用する場合、ドロップアウトの使用頻度は低くなりました。代わりに、あなたは…
  • ...バッチ正規化を使用する:最新のCNNアーキテクチャは、ドロップアウトを避けてバッチ正規化を支持します。これは単なる流行かもしれませんし、ドロップアウトとバッチ正規化が明らかにうまくいかないという事実による可能性もあります(Xiang Li、Shuo Chen、Xiaolin Hu、Jian Yang、ドロップアウトとバッチ正規化の不均衡の理解Shift)。大量のデータセットがある場合、ドロップアウトよりもバッチノルムの方が効果的であるため、これがドロップアウトがCNNアーキテクチャの支持を失った理由である可能性があります。バッチ正規化を使用する場合、各レイヤーの重みとバイアスの分布がほぼ標準正規分布に見えることを確認してください。RNNの場合、バッチノルムの実装は複雑です。重みの正規化(Tim Salimans、Diederik P. Kingma、重みの正規化:ディープニューラルネットワークのトレーニングを加速するための簡単な再パラメーター化)は、実行可能な代替手段です。
  • データ拡張を使用します。これには、正則化効果もあります。

5.ハイパーパラメーター/アーキテクチャー検索

他に何も役に立たない場合、複数の異なるハイパーパラメーター設定をテストする必要があります(ここで、ベイジアン最適化が役立つ場合があります)または複数の異なるアーキテクチャーの変更(たとえば、GANアーキテクチャーや作業中のデータセットに対して、バッチノルムは、ジェネレーターですが、ディスクリミネーターにも追加すると事態が悪化します)。これらの長くて退屈な実験の結果は、よく整理されたログブックに記録してください。

GANのPSでは、一般化エラーについて話すのはあまり意味がありません:上記の例は、ディープラーニングにはまだ多くの錬金術が存在することを示すものであり、うまく機能すると期待されることもあれば、またはその逆の場合、何回も正常に機能するものは、突然新しいデータセットを探し出します。


5

私が文献で見た一般的に使用される正則化技術のリストは次のとおりです。

  1. バッチ正規化を使用します。これは、ドロップアウトが使用されるのをほとんど必要としないため、驚くほど効果的な正規化ツールです。
  2. 少量の重量減少。
  3. 最近の正則化手法には、Shake-shake(Xavier Gastaldiによる「Shake-Shake正則化」)およびCutout(Terrance DeVriesとGraham W. Taylorによる「Coutoutを使用した畳み込みニューラルネットワークの改善された正則化」)があります。特に、カットアウトを簡単に実装できるため、非常に魅力的です。これらはドロップアウトよりもうまくいくと思いますが、よくわかりません。
  4. 可能であれば、完全に接続された層を備えたアーキテクチャよりも完全に畳み込みのアーキテクチャを選択してください。完全に接続された単一のレイヤーに1億個のパラメーターを持つVGG-16と、レイヤー数が10倍でパラメーターがさらに少ないResnet-152を比較してください。
  5. RmspropやAdamなどの他のオプティマイザーよりもSGDを優先します。より一般化することが示されています。(Nitish Shirish KeskarとRichard Socherによる「AdamからSGDへの切り替えによる一般化パフォーマンスの改善」)

0

Djib2011のように、自動化された方法について素晴らしい点を挙げていますが、過剰適合を減らすために採用された方法がうまくいったかどうかをどのように知るかという根本的な問題に本当に取り組んでいません。したがって、DeltaIVの回答に対する重要な脚注として、過去2年間の最近の研究に基づいてこれを含めたいと思いました。ニューラルネットワークのオーバーフィッティングは、モデルを過剰に記憶することだけでなく、モデルが新しいことを学んだり、異常に対処することができないことも含みます。

ブラックボックスモデルでの過剰適合の検出:モデルの解釈可能性は、モデルが一般化する能力をどれだけうまく伝えることができるかに直接関係しています。したがって、多くの解釈可能なプロットは、過剰適合を検出する方法であり、上記で提案された方法のどれがうまく機能しているかを伝えることができます。特に検証プロットとテスト結果プロットを比較する場合、解釈可能性プロットはそれを直接検出します。この未公開の本の第5章と第6章では、過適合の現場検出における最近の進歩について説明しています。解釈可能なモデリング

この本に基づいて、過剰適合を検出および除去する他の3つの方法について言及したいと思います。だから、私は心が1つではない場合、それらを強調したいと思います:

  1. 特徴選択の検出:パラメーターの数が少なく、モデルの特徴が少ないほど優れています。そのため、1億の重要なものだけを含めると(代わりに7,500万を持っている可能性があります)、より一般化可能なモデルになります。問題は、多くのニューラルネットワークが、特に#2が存在する場合、特徴選択において完全ではないことです。ブートストラップまたはブースティングは基本的に両方を修正することはできません(wild bootstrapと呼ばれるバージョンのみが修正できます)。簡単に言えば、ニューラルネットワークのジャンクデータを提供すると、ジャンクアウトが発生します。(上記のL2正規化はこれを支援するのに非常に優れています)

  2. 異常の検出と対処:「異常値」が少ないほど、モデルをより一般化できます。「外れ値」とは、データの単なる外れ値を意味するものではありません。データの外れ値(ボックスプロットで表示されるようなもの)は、ニューラルネットワークの定義が狭すぎます。モデルの誤差の外れ値も考慮する必要があります。これは影響と呼ばれ、他の異常とも呼ばれます。したがって、ネットワークを実行する前に異常を検出することが重要です。ニューラルネットは、1つのタイプの異常に対して堅牢ですが、他のすべてのタイプに対して堅牢ではありません。Counter Exampleメソッド、Critisticismメソッド、Adversarialサンプルメソッド、および影響プロットは、外れ値を発見し、それらをどのように因数分解するかを把握するのに役立ちます。

  3. 統計的または倫理的な考慮事項に基づいた層別サンプリング、オーバーサンプリング、およびアンダーサンプリング (人種、性別、性別)などの重要な要素をクラスタリングし、クラスターによる層別サンプリングを行うことは、ビッグデータを考慮したときに過剰適合しないようにするために不可欠です。画像検出を行う場合、人種差別を避けるために、一部の分野ではクラスタリングと組み合わせた層別サンプリングが法的に必要です。上記のリンクされた本では、これを行う方法について簡単に説明しています。

PSもっとリンクを含めるべきですか?

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