深さの学習とトレーニングのヒント、アシスタント経験(RPM)

多くの場合、あなたは深い学習トレーニングモデル、それを使用して結果を改善する方法を尋ねましたか?そして、すべての無知な力は、まず、私はあまり理解して、第二は、あまりの実験ではない、3つのメモリは忘れていません。だから、自分自身の経験のいくつかを記録するために、このブログだけでなく、他の人の書き込み。

イリヤSutskever(ヒントン学生)の深さ洞察力や実用的なアドバイスを学びます:

 

データ収集:高品質の入力/出力データ・セットを確認する必要があり、データセットが十分に大きいと代表ラベルが比較的明確に持っています。データセットの欠如は、成功することは困難です。

前処理:集中化されたデータは、つまり、非常に重要であるゼロ平均データを作成するために、各次元の各変化が1になるように。入力はソートの大きさ順に変更したときに時々、それは(1 + X)をログ寸法を使用するのが最適です。基本的には、信頼できる寸法コーディングと0値の自然境界を見つけることが重要です。そうすることで、より良い仕事することを学ぶことができます。WIJの変更\ propto XIDL / dyj(xは重量yを層から層へ表しwは、Lは損失関数である):重みが式で更新されるので、このようなは、ケースです。xが多く(例えば100)を意味している場合、更新された重みが非常に大きくなり、学習が貧しいと遅くなりますされ、相互に関連しています。ゼロ平均と小さな分散を維持することは重要な成功要因です。

バッチ:のみ、今日のコンピュータにおける学習サンプルの各実装は非常に非効率的です。128バッチの一例である一方、効率が大幅に、その出力の非常に印象的である改善されます。実際にだけでなく、オーバーフィッティング低減しながら性能を向上させるために利用可能であるだけでなく、バ​​ッチ1のオーダーの効果を使用する;これは大規模なバッチを超えてなりやすいです。非効率的とオーバーフィッティング過度にそこにつながる可能性があるため、しかし、あまりにも大規模なバッチを使用しないでください。だから私のアドバイスは次のとおりです。彼らの手段に従って、適切なハードウェア構成のバッチスケールを選択して、より効率的に。

正規化された勾配:勾配はバッチの大きさに応じて分割します。バッチが(あまりない、どのような場合には)学習率を変えずに、乗算(または縮小倍)場合ので、良いアイデアです。

料金プランを学習:ノーマルサイズの学習率(LR)は縮小の終わりに向かって始めたから。

1LR典型的な値は0.1であり、驚くべきことに、ニューラルネットワークの問題の多数のために、0.1は、良好な学習率値です。通常、小さな学習率ではなく、大きなを好みます。
ときに停止すると(たとえば、検証エラーがセットされると増加し始めた場合など)、学習率の訓練を軽減する時期を決定するために、トレーニングセットせずにトレーニングのコレクション-バリデーションセットを使用してください。
練習は、料金プランを学ぶお勧めします:それは検証セットのボトルネック発見された場合、継続し、その後、2(または5)で割ったLRに望むことができます。最後に、LRも訓練を停止する時間である、非常に小さくなります。これは、被害の性能検証は、あなたが収まらない時にトレーニングデータを(またはオーバーフィット)ことを保証します。LRが正しいアプローチであるバリデーションセットによって制御され、LRを低減することが重要です。

しかし、最も重要なことは、学習率に焦点を当てることです。一部の研究者は、方法(例えばアレックスKrizhevskyなど)、ノルムを用いると重量ノルム間の比の更新値を監視しています。比の値は約10 3です。値が小さすぎる場合には、学習は非常に遅くなり、値が大きすぎる場合、学習は非常に不安定になり、さらには失敗します。

重みの初期化。無作為研究の開始時に初期化重みをご覧ください。

あなたが怠惰になりたい場合は、0.02 *関数randn(num_params)をしてみてください。この範囲の値は、さまざまな問題に適しています。もちろん、小さい(またはそれ以上)の値も試してみる価値があります。
それがうまく機能した場合(例えば、型にはまらない、および/または非常に深いニューラルネットワークアーキテクチャ)は、各重み行列を初期化するために/ SQRT(layer_width)*関数randnをinit_scale使用する必要があります。この場合、init_scaleは1又は0.1、又は同様の値に設定されるべきです。
深さとサイクルネットワークは、ランダムな初期化は非常に重要です。うまく処理されない場合は、何も学んでいないように、それが見えます。我々は条件が設定されると、ニューラルネットワークは学習、ということを知っています。
興味深い話:何年もの間、研究者はSGDがランダムに初期化の深さから、ニューラルネットワークを訓練することができないと信じていました。それぞれの試みは失敗に終わりました。浅いネットワーク上の実際にはほとんど価値が非常にうまく動作しますが、ネットワークの深さのパフォーマンスが良くありませんが恥ずかしい、彼らは、理由は初期化するための「小さなランダム重み」を使用することで成功しませんでした。ネットワークが非常に深い場合、重み行列の間の数の積になり、結果が拡大されていません。
それは浅いネットワークである場合でも、SGDは、私たちは、この問題を解決することができます。

だから、心配初期化が必要です。異なる初期化の様々なを試してみてください、努力が報われる。ネットワークが完全に動作しない場合(すなわち、実施形態ではない)、ランダムな初期化を改善し続けて正しい選択です。

あなたは、ハードの制約ノルムを使用して(勾配がバッチサイズで分割されている覚えている)の勾配に、RNNやLSTMを訓練している場合。私の個人的な実験では15のまたは5ような制約と同じようにうまく動作します。バッチのサイズで割って、それが15以上(または5)のための規範だかどうかを確認グラデーションしてください。それがない場合は、15(または5)に削減されます。遊びRNNとLSTMトレーニングで重要な役割は、そうしていないこの小さなトリックは、爆発的な勾配が失敗したことを学習につながる、そして最終的には1E-6学習率ほど小さなと無用を使用していただろう。

勾配の値をチェックします。noすぎたりTheanoトーチ、勾配が手だけを達成した場合。勾配の実現でミスを犯すことは非常に簡単なので、数値勾配のチェックを使用することが不可欠です。そうすることで自分のコードで、あなたが自信を持って行います。(そのような学習率や初期化など)スーパー調整パラメータは非常に貴重なので、良いナイフを賢く使用する必要があります。

あなたがLSTMを使用している場合は、同じ時間は広い範囲でそれらを訓練したいことは問題に依存し、それは忘れられるべきでLSTM偏差マークは、より大きな値に初期化されます。デフォルトでは、入力の全てがマークSタイプを忘れされ、値は忘却マークは、問題の一部のみに有効である0.5に設定され、電力が小さいです。これは初期化さLSTMへの警告です。

データ(データ増強)を増加させる:トレーニング例の数を増加させるためにアルゴリズムを使用する創造的なアプローチです。画像場合は、そのためその回転を変換する必要があり、音声部分が雑音と混合プロセスのすべてのタイプには明らかであるべきである場合。データを追加することは常識のある程度が必要、(画像の処理を除く)技術です。

ドロップアウト:ドロップアウトは、パフォーマンスを向上させるための簡単な方法を提供します。(つまり、1ドロップアウト率)中退率を調整することではなく、ドロップアウトをテストするときに、製品の価値を発見する権利をオフにすることを忘れないでください覚えておいてください。もちろん、ネットワークは少し長く訓練することを確実にします。通常の訓練とは違って、徹底的なトレーニングを入力した後、検証エラーは、通常は増加します。より良い、より良い仕事をする時間をかけてドロップアウトネットワーク、忍耐が鍵となります。

統合(Ensembling)。ニューラルネットワーク10を訓練し、そのデータの平均予想。アプローチはシンプルですが、それはより直接的かつ大幅なパフォーマンス向上を得ることができます。平均的には非常に効果的である理由一部の人々は不思議に思われるかもしれませんか?これは、実施例により説明されるかもしれない:正しい率が高いままである場合、70%の2分類誤り率場合、前記予測が正しい結果の平均に近いであろう。結果が間違っているとき、ネットワークが信頼できるない、信憑性の結果であるとき、この効果は、信頼できるネットワークのためのより顕著です。

(以下の点は、上記の簡易版です)

 

1:データの準備:常に高品質かつクリーンなラベルデータを持つ多数のため、データが存在していることを確認し、学ぶことは不可能です
2:前処理:このくらいは言っても、1のゼロ平均と分散であります
3:minibatch:128の推奨値、1最高のが、効率は高くありませんが、過度の値を使用していない、それはオーバーフィッティングと非常に簡単になります
4:勾配正規化:実際には、計算勾配後、minibatchの数で分割します。この多くの説明
5:以下は、主に次の学習率に言及
5.1:一般的な、一般的な学習率でスタートし、その後は徐々に減少します
5.2:0.1は、NNの多くの問題のための推奨値は、一般的に小さくなる傾向があります。
5.3:率を学習するための推奨スケジュール:パフォーマンスはもはやであれば、最終的にあなたは電車を停止することができ、2または5で割ったバリデーションセットの学習率の増加をせず、その後、学習率は常に非常に小さくなり続けています。
5.4:この値より小さい場合には、原則としては、学習率(現在の体重の各アップデートのノルムで割ったノルム勾配)のデザインで多くの人々の割合を監視することで、10-3の近傍でこの比率ならば、学習は非常に遅くなり、この値よりも大きいが、その後の学習は非常に不安定である場合は、失敗をもたらすであろう。
6:学習率を下げる開始するとき、およびトレーニングを停止するときに知ることができ、検証セットを使用してください。
7:重量の初期化の選択に関するいくつかのアドバイス:
7.1:あなたは怠惰であれば、0.02 *関数randn(num_params)を直接使用することは、もちろん、あなたも試すことができ、他の値を初期化します
7.2:上記うまく動作しない場合は、限りターンはそれぞれinit_scale / SQRT(layer_width)*関数randnは、init_scaleは0.1又は1に設定することができるために重み行列を開始します
7.3:結果の初期化パラメータの影響は注意を払うことが必要不可欠です。
7.4:重みはランダムに初期化軽量初期ので、深さネットワークは、次に、SGDを使用して、一般的なプロセスは、良好ではありません。浅い効果的なこの場合のネットワークが、深い十分な時間が死ぬことをするとき、それは体重の多くを乗じて重みの更新は、平均勾配を消えて小さく、やや似を掛けるので、(この文があります私が追加)
8:トレーニングRNN又はLSTM場合、勾配ノルムは15又は5(又は第一前提正規化勾配)に拘束されていることを確認し、それにそのRNNとLSTM重要です。
9:それは勾配の独自の計算であれば、グラデーションを確認してください。
10:あなたは時間依存の長さの問題を解決するためにLSTMを使用する場合は、初期化バイアスが大きくなるようにするとき、覚えて
12:あなたは画像データを使用している場合は、トレーニングデータを増幅する方法を見つけることができる限り、それはああトレーニングセットデータを拡大したい画像を反転させるために少しを行うことができます。
13:ドロップアウト
14:より多くの数回は、その後、その結果について平均し、最終的な結果の評価。
 
 
オリジナル住所ます。https://blog.csdn.net/yanhx1204/article/details/79625382

おすすめ

転載: www.cnblogs.com/ldh-up/p/11652553.html