ディープネットワークが機能していませんか?ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)

ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)

吴恩达老师DeepLearning.ai课程笔记
【吴恩达Deeplearning.ai笔记一】直观解释逻辑回归
【吴恩达deeplearning.ai笔记二】通俗讲解神经网络上
【吴恩达deeplearning.ai笔记二】通俗讲解神经网络下

ディープニューラルネットワークのトレーニング効率を向上させたい場合は、すべての側面から始めて、計算プロセス全体を最適化し、発生する可能性のあるさまざまな問題を防ぐ必要があります。

この記事では、ディープニューラルネットワークでのデータ分割の最適化、モデルの推定、オーバーフィットの防止、データセットの標準化、重みの初期化、勾配テストなどについて説明します。

1データ分割


ニューラルネットワークモデルを構築する場合は、最初に、データセット全体のトレーニングセット(トレーニングセット)、開発セット(開発セット)、およびテストセット(テストセット)を設定する必要があります。

トレーニングセットをトレーニングに使用する場合、いくつかのハイパーパラメーターの値を変更することにより、いくつかの異なるモデルが取得されます。開発セットは、ホールドアウトクロス検証セット(ホールドアウトクロス検証セット)とも呼ばれ、確立されたいくつかの異なるモデルの中から最高のパフォーマンスを発揮するモデルを見つけるために使用されます。次に、このモデルをテスト用のテストセットに適用し、アルゴリズムの品質を公平に推定します。通常、最終テストセットは直接省略され、開発セットは「テストセット」と見なされます。

注意が必要な問題の1つは、トレーニングセットとテストセットのソースが一貫していることを確認する必要があることです。そうしないと、最終結果に大きな偏差が生じます。

2モデル推定


ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)

図の左の写真では、線形フィッティングなどの単純なモデルを使用してデータを適切に分類することはできません。分類後、分類モデルと呼ばれる大きな偏差(バイアス)があります。フィッティング(アンダーフィッティング)。

右の図では、ディープニューラルネットワークモデルなどの複雑なモデルを使用して分類しています。モデルの複雑さが高すぎると、オーバーフィットが発生しやすくなり、分類後のばらつき(差異)が大きくなります。

真ん中の図では、適切なモデルのみを使用してデータを同様に分類できます。
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)

開発セットは通常、モデルにバイアスまたは時間変動があるかどうかを診断するために使用されます。

  • モデルをトレーニングすると、トレーニングセットのエラー率は小さく、開発セットのエラー率は大きいことがわかります。このモデルは、適合しすぎてばらつきが大きい可能性があります。
  • トレーニングセットと開発セットのエラー率が両方とも大きく、2つが等しいことがわかった場合、モデルが適合しておらず、大きな偏差がある可能性があります。
  • トレーニングセットのエラー率が大きく、開発セットのエラー率がトレーニングセットのエラー率よりもはるかに大きいことがわかった場合、モデルは少し悪く、大きなばらつきとバイアスがあります。

トレーニングセットと開発セットのエラー率が小さく、両者の差が小さい場合にのみ、モデルは分散とバイアスが小さい優れたモデルになります。

モデルの偏差が大きい場合は、ニューラルネットワークの隠れ層の数、隠れ層のノードの数を増やす、長時間のトレーニングなどの方法を使用して、フィット不足を防ぐことができます。ばらつきが大きい場合は、トレーニングサンプルの追加やサンプルデータの正規化などの方法で、オーバーフィットを防ぐことができます。

3オーバーフィットを防ぐためのL2正規化


ロジスティック回帰のコスト関数にL2正規化(「L2ノルム」とも呼ばれます)項を追加し
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
ますその中で、
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
L2正規化は最も一般的に使用されるタイプの正規化であり、L1正規化項もあります。L1正規化
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
により、最終的にωを取得します。 0が多数あるため、モデルがまばらになるため、通常はL2正規化が使用されます。パラメータλは正規化パラメータと呼ばれ、このパラメータは通常、開発セットを通じて設定されます。

ニューラルネットワークのコスト関数に正規化項を追加します。
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
これはFrobeniusNorm(Frobenius Norm)と呼ばれるため、ニューラルネットワークの正規化項はFrobeniusNorm行列と呼ばれます。
正規化項を追加した後
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
、パラメータを更新するときに逆伝播が発生します。
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
したがって、L2正規化のプロセスは重み減衰とも呼ばれます。

パラメータλは、式の2つの項の相対的な重要性を調整するために使用されます。小さいλは元のコスト関数を最小化する方向にバイアスされ、大きいλは重みωを最小化する方向にバイアスされます。λが大きい場合、重みω[ι]は0に近づきます。これは、深い神経ネットワークの隠れたユニットの一部を削除することに相当します。

一方、重みω[L]が小さくなると、入力サンプルXのランダムな変化は、ニューラルネットワークモデルにあまり影響を与えず、ニューラルネットワークはローカルノイズの影響を受けにくくなります。これが、正規化によってモデルの差異を減らすことができる理由です。

4オーバーフィットを防ぐためのランダムな不活性化の正規化


ランダムな非アクティブ化(DropOut)の正規化は、ニューラルネットワークの各レイヤーの各ノードの削除の確率を事前に設定し、トレーニング中に一部のノードをランダムに削除することを決定し、削減することです。分散を減らす目的を達成するためのニューラルネットワーク。

DropOutの正規化は、主にComputerVisionの分野で使用されます。

Pythonでプログラミングする場合、Inverted DropOutを使用して、DropOutの正規化を実現できます。

ニューラルネットワークレイヤー3の場合

keep.prob = 0.8
d3 = np.random.randn(a3.shape[0],a3.shape[1]) < keep.prob
a3 = np.multiply(a3,d3)
a3 /= keep.prob
z4 = np.dot(w4,a3) + b4

d3は、ランダムに生成された3番目のレイヤーと同じサイズのブール行列であり、行列の値は0または1です。また、keep.prob≤1であり、各レイヤーのノード数によって変化し、失われたノードの数を決定します。

たとえば、keep.probが0.8に設定されている場合、行列d3の値の20%は0になります。行列a3とd3を乗算すると、このレイヤーのノードの20%が削除されることを意味します。keep_probで除算する必要がある理由は、次のステップでa3を使用してz4を検索し、a3の値の20%がクリアされているためです。z4の次のレイヤーの最終的な期待出力値に影響を与えないために、このステップが必要です。損失の値を修正するために、このステップは逆ランダム非アクティブ化テクノロジーと呼ばれます。これにより、a3の期待値がノードの削除によって影響を受けないようにし、DropOutの前のニューラルネットワークがテストに使用されるようにします。 。

以前のL2正規化と同様に、DropOutを使用すると、ニューラルネットワークの構造の一部を単純化して、オーバーフィットを防ぐことができます。さらに、多くのノードが入力されると、各ノードが削除される可能性があります。これにより、特定のノードへのニューラルネットワークの依存性、つまり特定の機能への依存性を減らし、入力ノードの重みを拡散し、重みの2乗を縮小できます。ノルム。

5オーバーフィットを防ぐためのデータ増幅方法


ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)

データ拡張は、追加のトレーニングサンプルを取得できない場合に、既存のデータに対していくつかの簡単な変換を実行することです。たとえば、より多くのトレーニングサンプルを導入するために、画像が反転、拡大、および歪められます。

6オーバーフィットを防ぐための早期停止方法


ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)

早期停止とは、勾配降下を行ったときに、トレーニングセットと開発セットのコスト変化曲線をそれぞれ同じ座標軸上に描き、時間内に修正して、矢印が両者の大きなずれを示したときにトレーニングを停止することです。

真ん中の矢印では、パラメータwは大きすぎたり小さすぎたりしない値になり、理想的な条件下ではオーバーフィットの発生を回避できます。しかし、一方で、この方法はコスト関数をあまり削減しないだけでなく、オーバーフィットを避けたいと考えています.1つの方法は2つの問題を解決しますが、どちらもうまく解決できません。

7つの標準化されたデータセット


トレーニングセットとテストセットを標準化するプロセスは次のとおりです。
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
元のデータは次のとおりです。
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
最初の2つのステップの後、xから平均値を引いたもの:
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
最後の2つのステップの後、xを分散で除算し
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
ます。データセットが標準化されていない場合、コスト関数の画像と勾配降下プロセスは次のようになります。
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
正規化後、次のようになります。
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)

8重みを初期化します


ニューラルネットワークを構築する前のプロセスで、重みωを0にすることはできないと述べられ、ランダムな値に初期化されました。ただし、深部神経回路網では、初期化されたωの値が大きすぎると、深層に入るときに指数関数的に増加し、勾配が爆発します。小さすぎると、指数関数的に減衰し、勾配が消えます。

ωがPythonでランダムに初期化される場合、numpyライブラリのnp.random.randn()メソッドが使用されます。randnは、平均が0の単位標準正規分布(「ガウス分布」とも呼ばれます)からサンプリングされます。

ニューラルネットワークの特定の層への入力データnの量が増加すると、出力データ分布の分散も増加します。入力データ量nの平方根で除算して数値範囲を調整できるため、ニューロン出力の分散は1に正規化され、大きすぎて指数関数的に爆発したり、小さすぎて指数関数的に減衰したりすることはありません。これは、重みを次のように初期化することです。

w = np.random.randn(layers_dims[l],layers_dims[l-1]) \* np.sqrt(1.0/layers_dims[l-1])

これにより、ネットワーク内のすべてのニューロンが最初はほぼ同じ出力分布を持つことが保証されます。
アクティベーション関数がReLU関数の場合、重みは次のように初期化するのが最適です。

w = np.random.randn(layers_dims[l],layers_dims[l-1]) \* np.sqrt(2.0/layers_dims[l-1])

上記の結論の証明プロセスについては、参考資料を参照してください。

9勾配テスト


勾配テストの実現原理は、導関数の定義に従ってコスト関数を導出することです。
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
勾配テストの式:
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
εが小さいほど、結果は真の導関数、つまり勾配値に近くなります。この方法を使用して、勾配降下を逆伝播するときにエラーがあるかどうかを判断できます。

勾配試験のプロセスは、コスト関数の各パラメータθ[i]に小さなεを加算し、勾配近似値を取得することです
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
。J '(θ)でのJ'(θ)の勾配値は、分析的に取得されます。 dθ、次にそれらの間のユークリッド距離を見つけます。
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)
計算された距離の結果がεの値に近い場合、勾配値は正しく計算されたと見なすことができます。そうでない場合は、戻ってコードにバグがあるかどうかを確認する必要があります。

モデルのトレーニング時には勾配テストを実行しないことに注意してください。コスト関数に通常の用語を追加する場合は、テスト用の通常の用語も持参する必要があります。ランダムな非アクティブ化を使用した後は、勾配テストを使用しないでください。

注:この記事に含まれる写真と資料は、AndrewNgのDeepLearningシリーズから編集および翻訳されており、著作権は彼に帰属します。翻訳と照合のレベルは限られており、不適切な点を指摘することを歓迎します。

ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)

推奨読書:

ビデオ|紙を作成できない場合はどうすればよいですか?これらの方法を試してみません
か[深層学習戦闘] pytorchでのRNN入力可変長シーケンスパディングの処理方法[
機械学習の基本理論]最大事後確率推定(MAP)の詳細な理解

      欢迎关注公众号学习交流~         

ディープネットワークが機能していませんか? ウーエンダ先生がニューラルネットワークを最適化するためにあなたを連れて行きます(1)

おすすめ

転載: blog.51cto.com/15009309/2554213