あなたが遭遇した学習のピット深?ニューラルネットワーク11個の最も一般的な落とし穴と対策

あなたが遭遇した学習のピット深?ニューラルネットワーク11個の最も一般的な落とし穴と対策

新・ジウォン 市ポールプラットフォーム  2017年9月9日

この記事は、新・ジウォンから転送された認可します

出典:theorangeduck.com

著者:ダニエル・ホールデン

コンパイル:劉Xiaoqin、ウェン・キアン

 

あなたのニューラルネットワークが機能しない場合、どのようにしますか?ここでは、ニューラルネットワークを構築解く場合、彼自身の経験だけでなく、間違って行くことができるすべてのもののリストです。

 

  1. 正規化されたデータを忘れます

  2. 結果を確認することを忘れ

  3. 前処理データを忘れ

  4. 正則を使用して忘れて

  5. バッチも使用します

  6. 学習の誤率

  7. 最終層に誤った活性化関数を使用します

  8. お使いのネット​​ワークが不正なグラデーションで構成されてい

  9. 再初期化ネットワークの重みが正しくありません

  10. ネットワークの使用は深すぎます

  11. 間違ったを使用して、隠れユニット数

     

     

 

正規化されたデータを忘れます

 

 

 

ニューラルネットワークを使用する場合は、適切に正規化されたデータは非常に重要であるかを考えます。これは、ステップを変更することはできませんされて - このステップは慎重に取り扱い、適切に行われていない場合は、お使いのネット​​ワークが動作することはほとんど不可能です。このステップは非常に重要ですので、初心者は、多くの場合、このステップ間違ったので、それはほとんど、紙で言及されていないので、深さの学習コミュニティも良く知られています。

 

どのように解決するには?

 

一般的に、標準化(正規化)を意味する:マイナスデータの平均、次いで分散で割りました。通常、これは、個々の各入出力特性のために行われていますが、多くの場合、やりたいことや特別な機能は、主翼の標準化プロセスの特定の機能を設定します。

 

なぜ?

 

我々はデータを正規化する必要がある主な理由は、ニューラルネットワークのほとんどは、分布の約1標準平均値の差に入力データおよび出力を処理することが想定される約ゼロです。これらの仮定は、ネットワークを訓練するためのアルゴリズムを最適化するために再初期化、活性化機能に右から、どこでも深い学習文献です。

 

また、注意してください

 

典型的には約-1から1までの範囲内の訓練を受けていないニューラルネットワークの出力値。あなたが他の範囲の出力値が必要な場合(このような記憶の0〜255バイトの範囲でRGB画像のような)いくつかの問題があるでしょう。例えば、期待値は255であるため、訓練の開始時に、ネットワークは、非常に不安定になり、値は-1またはネットワークが生成1--この最も最適化されたアルゴリズムは、ニューラルネットワークは重大なミスを検討し訓練するために使用されます。これは、過剰なグラデーションになり、勾配が爆発を引き起こす可能性があります。それが爆発しないので、ネットワークは、出力値を狭めるための最初の研究であるため、トレーニングの最初の数段階は、廃棄物の場合は約予想される範囲です。データを標準化した場合、これらの問題は発生しません(この場合、あなたは単に128マイナス1で割った値ができます)。

 

一般的には、特徴的な規模ニューラルネットワークはまた、その重要性を決定します。大規模の出力特性は、その後、他の機能と比較した場合、それは大きな間違いを持っ​​ています。同様に、入力ネットワークの大規模な特性に支配し、下流に生じる大きな変化をもたらすであろう。ニューラルネットワークライブラリを使用すると、自動的に標準化は、多くの場合、十分ではありませんので、これらのニューラルネットワークライブラリは盲目的にあたり、機能上の平均値を差し引くと分散で割った値。あなたは、通常0.0〜0.001の範囲内で、入力機能を有することができる - それは重要でない機能となるように、小さな特徴のこの範囲(この場合は、あなたが再スケールしたくない場合があります)、または理由他のいくつかの機能はその小さな単位に比べてあります(この場合、あなたは再スケールをする場合がありますか)?それらは標準化されている場合は同様に、それらの分散近いか0に等しい小さい範囲そのような特性を有するように注意して、不安定NaNに導くことができます。どのような各機能のあなたが本当に代表、および標準化など、このプロセスに等しい「単位」のすべての入力機能を考える - 慎重に、これらの問題を考慮することが重要です。私はこれが本当に必要で、このループでは、人間の深さの研究のいくつかの側面の一つだと思います。

 

 

 

あなたは結果を確認することを忘れ

 

 

 

問題の説明

 

また、エラーの削減を参照して、ネットワークのいくつかのエポックを訓練してきました。これは、完了したことを意味していますか?残念ながら、私はあなたがほぼ確実にコード内の特定の問題がある、あなたに言います。データ前処理、トレーニングコード、あるいは推論ではバグを持っている可能性があります。エラーレートが低下しているからといって、あなたが有益な何かを学んでいるという意味ではありません。

 

どのように解決するには?

 

すべてのチェックが正常に非常に重要であるプロセスデータの各段階です。多くの場合、あなたは結果を視覚化するためにいくつかの方法を見つける必要があります。画像データならば、これは非常に簡単です、あなたは、画像データを移動する多くの問題を可視化することができる必要はありません。他のタイプのデータなら、あなたはトレーニングと推論さの前処理、各プロセスが正しい、との結果がグランドトゥルースデータと比較したことを確認するために結果を確認することができるようにする方法を見つける必要があります。

 

なぜ?

 

従来のプログラミングとは異なり、機械学習システム障害は、ほぼすべてのケースで静かに発生します。伝統的なプログラミングプロセス、我々は、コンピュータは、彼らが発生したときにエラーをスローし、そして戻ってバグをチェックするための信号として使用します。残念ながら、このプロセスは、機械学習には適用されませんので、我々はあなたが戻って、より徹底した検査コード行く必要がある場合は、バグが表示されるようにするときを知るためには、プロセスの各段階で、人間の目をチェックするためには非常に注意しなければなりません。

 

また、注意してください

 

ネットワークが正常に動作しているかどうかを確認するために多くの方法があります。この方法の一部は、報告書は、それが何を意味するのかであるまさにの間違った説明を訓練することです。結果のトレーニングセットで使用するネットワークの可視化 - 地上の結果、何に比べて、真実のあなたのネットワークを練習?結果はまだ利用できないことを、あなたはトレーニング中1までの100から間違っているかもしれませんが、間違いはまだ受け入れられない結果である場合。ネットワークは、トレーニングセットで作業している場合は、検証セットをチェック - それはまだ以前にそれを見ていなかったデータに適用されますか?私の提案は、すべてのコンテンツを視覚化開始からに慣れている - だけでなく、ネットワークの可視化を動作しない場合 - それは異なる神経ネットワークアーキテクチャを使用する前に始めることを確認するには、プロセスの整合性をチェックしました。これは正確に潜在的な多くの異なるアプローチを評価するための唯一の方法です。

 

 

 

あなたは前処理データを忘れます

 

 

 

問題の説明

 

データの大部分は非常に困難である - 我々は、データが、それは非常に異なる数で表現することができ、一般的に類似であることを知っています。一例として、キャラクタアニメーション(キャラクタアニメーション)を有する:我々は、データを表現するために3次元モーションキャプチャスタジオの中心に対して役割関節位置を使用し、そうであれば位置またはアクション指向の特定の方向には、異なると比較した場合同一の操作位置を実行する、または異なる方向に、異なるデジタル表現の数を生成することができます。その後、我々は異なる方法でデータを表現する必要がある - 例えば、いくつかのローカル基準フレーム内(例えば、キャラクタに対する質量の中心)は、同様の数値表現の操作と同様、。

 

どのように解決するには?

 

何を特徴表現を考える - いくつかの簡単な変換が存在する場合、そのデータポイントは、同様の事が常に同様の値を表し得る表し確保するために?おそらく、より良い色空間 - - 異なるフォーマットのローカル座標系でデータを表現するために、より自然なことができありますか?

 

なぜ?

 

データ入力、データが連続する空間であるそのうちの一つだけで、いくつかの基本的な仮定のためのニューラルネットワークについて - スペースのほとんどのために、2つのデータポイント間のポイント「ミックス」の少なくとも一部、隣接する2つのデータは、「類似」のものという意味で指します。そこデータ空間における大きな不連続(不連続)がある、または学習タスクがより困難になるように、個別のデータの多数の存在は、同じこと(分離されたデータ)を表しています。

 

また、注意してください

 

もう一つの方法は、組み合わせ爆発所望のデータ変更を前処理データを削減しようとすることです。あなたは、ニューラルネットワークを訓練し、各方向とキャラクターアニメーションデータの各位置でのアクションの同じ組み合わせを学ぶ必要がある場合たとえば、ネットワーク容量の多くが浪費されており、学習プロセスの大部分が繰り返されます。

 

 

 

正則を使用することを忘れ

 

 

 

問題の説明

 

正則(正則化) - 通常ドロップアウト、ノイズやネットワークの確率過程の一部形成するが、変更することができないニューラルネットワークを訓練するための別の態様です。あなたはとてもフィットして重要でない、あるいはないデータパラメータの量、またはオーバーフィッティングの場合よりもはるかに多くを持っていると思う場合でも、あなたはまだドロップアウトやノイズの他の形態を追加する必要があります。

 

どのように解決するには?

 

正則ニューラルネットワークの最も基本的な方法は、各線形ドロップアウト層(緻密層又は層畳み込み)ネットワークの前に添加されます。以下のような0.75または0.9、高確率な保持開始までのメディアから。オーバーフィッティングの可能性に基づいて調整。あなたはまだフィット感があったと考えていることができない場合は、そのような150のように、高いな保持確率に設定することができます。

 

なぜ?

 

正則化は、単にオーバーフィッティング制御に関するものではありません。訓練過程でいくつかのランダムなプロセスを導入することで、あなたはある意味で損失パターン(平滑化)「スムーズ」です。これは、データ内の外れ値に対処し、極端な右のネットワークの再構成を防止するのに役立つためにトレーニングをスピードアップすることができます。

 

また、注意してください

 

拡張データ(データ増強)やノイズの他のタイプとしては、正則化ドロップアウト方法と同じであってもよいです。一般的にサブネットワークの組み合わせであっても複数のランダムシーケンスドロップアウト予測技術であると考えられているが、動的にトレーニングセットのサイズのトレーニング中に多くの変更を同様の入力データを作成することによって拡張方法ドロップアウトとして見てもよいです。そして、我々は過剰フィッティングを避けるために、ということを知っているとネットワークの精度を向上するための最良の方法は、より多くのデータネットワークが見られないことです。

 

 

 

バッチの多くでは

 

 

 

問題の説明

 

これは勾配降下ランダム性が低下しますので、それは、あまりにも多くのバッチを使用しての訓練過程におけるネットワークの精度に悪影響を及ぼす可能性があります。

 

どのように解決するには?

 

あなたが最小のバッチを受け入れることができ訓練で発見。訓練は、GPUの並列バッチサイズを最大限に活用することができた場合、いくつかの点で、大きなバッチが同じ精度を達成するために戻ってより多くのトレーニング(エポック)を必要とするので、精度は、おそらく最高ではありません。こうした16、8、さらに1として、非常に小さなバッチから始まる心配しないでください。

 

なぜ?

 

(choppier)より便利な小さなバッチ生産を使用して、よりランダムな重み更新。これには2つの利点があります。まず第一に、訓練はそうでない場合は極小値で立ち往生する可能性がある「ジャンプ」を助けることができる。第二に、あなたはより良い汎化性能のだろう後者を代表して、一般的には、「平ら」最小最後の訓練を行うことができます。

 

また、注意してください

 

データ内の他の要素は、時にはバッチサイズなどの効果を取ることができます。例えば、画像を処理するときに、解像度を倍に、バッチサイズ4×同様の効果があるかもしれません。ビューの視点は、CNNに、各フィルタ重み更新の重量は、バッチ内の各画像と入力画像の全画素にわたって平均されます。バッチサイズは4回同じ増加等の画像解像度を倍、平均効果の4倍以上のピクセルを生成します。要するに、最終的な更新は、各反復においてどのように多く、平均傾斜する考慮することが重要であり、できるだけ負の影響は、GPUの並列処理の使用との間のバランスを維持します。

 

 

 

学習率は正しくありません。

 

 

 

問題の説明

 

学習率は良いトレーニングネットワークが大きな影響力を持っているかもしれません。あなただけの一般的な学習の枠組みの深さに影響を受けて、様々なデフォルトのオプションに参加する場合は、ほぼ確実に右の設定で学びませんでした。

 

どのように解決するには?

 

オフ勾配(勾配クリッピング)をトリミング。訓練中に発生しないエラーの学習率の最高値を検索します。おそらく最良の学習率に非常に近いです - そして、学習率がこの値よりも少し低く設定されています。

 

なぜ?

 

多くの深い学習フレームワークは、デフォルトの勾配で有効になってトリミング。このオプションは、オーバートレーニングプロセスの最適化を防ぐことができ、再発生最大限にするために変更する権利を、各ステップにおける重みを変更することが強制されます。これは、データが外れ値として何度も大きな勾配と重み更新につながる、大きな間違いを持っ​​て、異常値が含まれている場合は特に、有用である可能性があります。ただし、このオプションはデフォルトで有効になっているが、ユーザーが手動で最高の学習率を見つけることは困難であるようになります。私はので、勾配のすべてのほとんどの初心者の深さの調査は、学習率が高すぎる設定されているカットスロートレーニングの全体的な動作を行うだけでなく、予測不可能な学習率の影響を変更することに気づきます。

 

また、注意してください

 

あなたは正しくデータ、外れ値をクリーンアップし、学習率が正しく設定されているのほとんどを削除した場合は、実際にグラデーションをカットする必要はありません。勾配作物を閉じた後、あなたは訓練誤差を見つけた場合、時折、あなたは再オープンすることができますオプションをトリミングこの勾配を、勃発しました。カットのみの一時的な救済 - しかし、ほとんど常にあなたのデータの他の異常の数を示しているので、頻繁に訓練誤差の、心に留めておきます。

 

 

 

最後の層では、誤った活性化機能を使用して

 

 

 

問題の説明

 

最終的には層の活性化関数を使用し、それは時々、あなたのネットワークが必要な値の完全な範囲を生成することができないことを意味します。最も一般的な間違いは、ネットワークができる唯一の出力値が得られ、最後の層ReLUを使用することです。

 

どのように解決するには?

 

あなたはリターンを作る場合は、そのほとんどの時間は、あなたはあなたがそうエクスポートする値の正確にどの種類の知っている限り、最終的には層の活性化関数のいずれかのタイプを使用する必要はありません。

 

なぜ?

 

あなたのデータは実際の値を表してどう思います、そして、彼らは将来の標準化の範囲にあります。この場合には、あなたが最終層で活性化関数を使用する必要があります - 最も可能性の高いシナリオでは、無制限出力正または負の値ということです。あなたの出力値が一定の範囲内でのみ有効である場合、例えば、0-1組成物中の確率によって、最終的な層は、シグモイド活性化関数としての特定の機能を使用して活性化されるべきです。

 

また、注意してください

 

最後の層では活性化機能を使用して多くの注意点があります。たぶん、あなたはあなたのシステムが最終的に[-1,1]に出力をカットしますことを知っています。だから、それはあなたのネットワークの誤差関数が-1よりも1よりも大きいか小さい値を罰するしないことが保証されますので、重要である最終層をアクティブにするために、この切断プロセスを追加します。しかし、何のエラーも値が勾配を持っていないよりも-1 1よりも大きいか小さいことを意味しない - それはあなたのネットワークがいくつかのケースで訓練することができないようになります。それとも、あなたは活性化関数の出力値の範囲は[-1、1]であるが、この機能の付近の勾配が1になるか-1ので、それはまた、問題を引き起こす可能性があるため、双曲線正接最後のいずれかを使用しようとするかもしれません非常に小さく、かつ1または1があなたの重量が非常に大きくなることがあり生成するためです。一般的には、安全側で最高のは、最終的に層の活性化機能を使用しないでください。時には賢い知恵間違っています。

 

 

 

ネットワークは悪い勾配を有します

 

 

 

問題の説明

 

後者は貧しい勾配に起因している間に深いウェブのReLU活性化機能は、通常、いわゆる「デッドニューロン」に影響され使用してください。これは、負のネットワークパフォーマンスへの影響、および訓練するいくつかのケースでさえも完全にできない可能性があります。

 

どのように解決するには?

 

あなたが複数のエポック後の訓練誤差が変更されていないことが判明した場合、すべてのニューロンが死亡しているように、それは、ReLU活性化機能を使用することができます。次に、このような漏洩ReLU又はELUなどの他の機能の活性化、に切り替えるような場合があるかどうかを確認しよう。

 

なぜ?

 

勾配ReLU活性化関数は、負の値は0であり、正の値は1です。入力が0未満である場合に、入力の小さな変化が出力に影響を与えないためです。短期的には、これは正の傾きがたくさんいるので、問題ではないかもしれません。しかしながら、層は、積層されてもよい量は勾配が0の負の勾配となる負の大きな値であってもよく、一般的には、さらにいくつかのコスト関数のすべての隠れユニットのためにかかわらず入力の、ゼロ勾配を有していますそれは何ですか。この場合、我々は重みが完全に更新することができないため、ネットワークが「死んだ」と言います。

 

また、注意してください

 

任意の動作誘導体コスト関数の重みに関して使用される場合(例えば、切断、丸めまたは最大値/最小値)、ゼロ勾配を有しているが、有害な勾配を生成します。彼らは、シンボルを持っているイトゥリに表示された場合、彼らは多くの場合、予期しない問題をもたらすので、それは、非常に慎重でなければなりません。

 

 

 

適切にネットワークの重みを初期化できません

 

 

 

問題の説明

 

あなたが正しく、ニューラルネットワークの重みを初期化していない場合は、ニューラルネットワークは、単に少ない行使する可能性があります。ニューラルネットワークの他の多くのコンポーネントは、いくつかの適切な初期化や標準化された重みがあり、重みがゼロに設定されている、または独自のカスタムランダム初期化は動作しません使用します。

 

どのように解決するには?

 

再初期化を右「彼」、「lecun」または「ザビエルは」非常に人気があり、ほとんどすべての場合にうまく仕事ができます。あなたは、ネットワークの正常な動作の後、あなたは自由にうん試すことができたときにあなたの神経、(私のお気に入りは「lecun」である)の罰金を選択します。

 

なぜ?

 

あなたはおそらくすでにあなたは、ニューラルネットワークの重みを初期化する「小さな乱数」を使用することができ、知っているが、物事はそう単純ではありません。上記のすべては、彼らは彼らと一緒に最高の数学の基礎である理由を説明し、複雑かつ詳細な数学的発見を、使用して初期化されています。さらに重要なことは、これらのコンポーネントを中心に構築された他のニューラルネットワークは、初期化、および経験的にテストするためにそれらを使用する - あなた自身の初期化を使用する他の研究者の結果はさらに困難に再現することがあります。

 

また、注意してください

 

他の層にも慎重に初期化する必要があります。(例えば、活性化関数のパラメータのような)他のより複雑な層は、それ自身で初期化されてもよいバイアスネットワークは、ゼロに初期化され、これも取得することが重要です。

 

 

 

あなたも使用ニューラルネットワーク

 

 

 

問題の説明

 

より深く、より良いですか?私たちは必死に更新したときにああ、これは必ずしもそうではありません......ベンチマーク、特定のタスクの1%の精度は、1%、一般より良いより深いニューラルネットワークを強化します。あなただけの何かを学ばない小規模ネットワークの3-5層を持っている場合は、その後、私はあなたが悪くない言葉場合、100階建てで失敗することを保証することができます。

 

どのように解決するには?

 

ニューラルネットワークに3-8表層を開始します。あなただけが何かを学び、その後、精度を高めるための方法を模索し、ネットワークを深めるしようとするニューラルネットワークを実行したとき。

 

なぜ?

 

過去十年間では、小さな根本的な変化の全て改良されたネットワークは、これらの変更は根深いパフォーマンスとして小さなネットワークにのみ適用されます。ネットワークが動作しない場合は、深さに加えて、他の問題である可能性が高いです。

 

また、注意してください

 

ネットワークは、幼い頃から訓練も速く推論を意味し、反復設計と各種設定が速くなり始めました。最初は、これらすべてのものは精度に大きな影響だけでなく、積層された層を持つことになります。

 

 

 

間違ったを使用して、隠れユニット数

 

 

 

問題の説明

 

いくつかのケースでは、多すぎても少なすぎても隠れユニット(隠れユニット)の使用は、ネットワーク、ハードトレーニングを引き起こす可能性があります。少なすぎる隠れユニットは、必要なタスクを発現する能力を持っている、とあまりにも多くの隠れユニット、遅いと困難なトレーニングになるかもしれないかもしれないが、残留ノイズを除去することは困難です。

 

どのように解決するには?

 

256-1024間の隠れユニットを起動します。次に、どのように多くのアプリケーションと参照他の同様の研究を見てください。あなたはデジタル使用し、他の研究者は非常に異なっている場合は、説明するために、いくつかの具体的な理由を持っている必要があります。

 

なぜ?

 

隠れユニットの数を決定するには、キーを使用して、ネットワークを実現するために必要な最低限の情報の真の価値を考えるものを検討することです。あなたはその数が大きく取得する必要があります。ネットワークのより冗長な表現のために、ドロップアウトができます。あなたが分類を行う場合は、10回のクラスに数5を使用することができますし、あなたがリターンを行う場合は、2〜3回の入力または出力の可変数を使用する必要があります。もちろん、環境に大きく依存しているすべてが、そこには簡単な自動化されたソリューションではありません - 最も重要であり、隠れユニットの数を決定するための良好な本能を持っています。

 

また、注意してください

 

実際には、他の要因と比較して、隠れユニットの数は、通常、ニューラルネットワークのパフォーマンスにほとんど影響を与え、多くの場合、電車を遅くしません隠れユニットの必要数を過大評価しました。ネットワークいったん作業を、あなたはまだ心配ならば、あなたのネットワークの最適な値を見つけるまで、ちょうど、異なる図面の多くは、測定精度を試しています。

おすすめ

転載: www.cnblogs.com/think90/p/11568726.html