ディープ ラーニングの一般的な概念 (収束、オプティマイザ、学習率など)

1.収束

簡単に例えると、ネットワーク モデルのトレーニングは、方程式を解くようなものです. この方程式の極値を取得するために、トレーニング プロセスは、方向を見つけ、その方向に常に近づき、方程式の値が継続的に変化するようなものです.最終的に収束せずに極点に達する、つまり、いくら走っても方程式の解は減少しません。つまり、最後の極点に到達することができず、損失に関しては、安定性が比較的大きいことを示しています。反復の失敗やシステムの不安定性と同様に、上下の変動は固定値に近づくことができません。

収束とは、特定の値が期待するしきい値に近づいていることを意味します. 深層学習における損失損失を例に取ります. 次の図は、トレーニングの各ラウンド中の損失のグラフです. 損失が最初から1.8 ~ 1.0、1.0 は予想されるしきい値、1.8 は最初の最大損失値です。

ここに画像の説明を挿入

トレーニング プロセス中に損失値が予想されるしきい値に近づいていることがわかります.この曲線は非常に滑らかであり、曲線が特定のポイントでスタックし、下降したり突然上昇したりする理由はありません (この例では学習率の設定に問題がある可能性があります。以下に示すように:

ここに画像の説明を挿入

元の減少の間に突然増加したことがわかります. この理由は、学習率が減衰するときに問題がある可能性があります. このような損失値は、重みを更新するときに間違いなく影響を与えます. この状況は、局所発振とも呼ばれます. . つまり、特定のしきい値を前後にジャンプしたり、1.0 のしきい値間をジャンプしたりと、常に反復的であり、この場合、収束できないという問題があります。

学習率は損失値の利用率を表すため、損失の減衰は学習率に依存します。ネットワークの非収束の直感的な兆候は、損失関数を削減できないことです. 本質的には、ネットワークまたはトレーニング方法に問題があります, バッハサイズのサイズ, データが正規化されているかどうか, 学習率の設計、初期化の重みなど、すべてを確認する必要があります。

2.オプティマイザー

2.1 オプティマイザーとは

オプティマイザーは、ニューラル ネットワークがパラメーターを更新するように導くツールです. 深層学習が損失関数を計算した後、オプティマイザーを使用してバックプロパゲーションを実行し、ネットワーク パラメーターの更新を完了する必要があります. このプロセスでは、オプティマイザーが使用されます。オプティマイザーは、コンピューターの数値計算方法を使用して、最小の損失関数を持つネットワーク パラメーターを取得できます。深層学習では、異なるオプティマイザが異なる 1 次運動量と 2 次運動量を定義するだけです.1 次運動量は勾配に関連する関数であり、2 次運動量は勾配の 2 乗に関連する関数です. 一般的に使用されるオプティマイザーには、主に確率的勾配降下 (SGD)、Momentum、AdaGrad、RMSProp、および Adam オプティマイザーが含まれます。

2.1.1 バックプロパゲーション

バックプロパゲーションとは、ニューラル ネットワークに以前のパラメーターを更新させることです. 質問をするとき (質問はニューロン ノード 1 つずつと考えることができます) を想像することができます。次に、学習に焦点を当てるべき知識と学習する質問の種類を教えてください。次に、ニューラル ネットワークは、このノードのパラメーターの重みを順方向に増加させます。これは、方向伝播の更新パラメーターです。

オプティマイザーまたは最適化アルゴリズムは、最適化パラメーターをトレーニングすることにより、損失関数を最小化 (最大化) します。損失関数は、テスト セット内のターゲット値 Y の実際の値と予測値の間の偏差の程度を計算するために使用されます。

モデルの出力を最適な値に近づけたり、到達させたりするには、さまざまな最適化戦略とアルゴリズムを使用して、モデルのトレーニングとモデルの出力に影響するネットワーク パラメーターを更新および計算する必要があります。

2.2 勾配降下法

最適化アルゴリズムの場合、最適化の目標は、ネットワーク モデルのパラメーター θ (集合、θ1、θ2、θ3...) です。目的関数は、損失関数 L = 1/N ∑ Li (重ね合わせと各サンプル損失関数の平均値)。この損失関数の L 変数は θ であり、ここで L のパラメーターはトレーニング セット全体です. 言い換えれば、目的関数 (損失関数) はトレーニング セット全体を通して決定されます. フル トレーニング セットが異なる場合、画像は損失関数の値が異なります。では、ミニバッチで鞍点/極小点が検出された場合、なぜ最適化を実行できないのでしょうか? これらの点では、θ に対する L の勾配がゼロであるため、言い換えると、偏導関数が θ の各コンポーネントに対して計算され、完全なトレーニング セットに取り込まれるため、導関数はゼロになります。SGD/MBGD の場合、毎回使用される損失関数はこの小さなデータのバッチによってのみ決定され、その関数イメージは完全なセットの実際の損失関数とは異なるため、それが解く勾配にもある程度のランダム性が含まれます。鞍点または極小点では、ショックがジャンプします.この時点で、トレーニングセット全体、つまり BGD が取り込まれると、最適化が停止するためです.ミニバッチまたは SGD の場合、勾配はい、振動して前後にジャンプします。

2.3 一般的なオプティマイザー:

  • バッチ勾配降下法(BGD)
  • 確率的勾配降下 (SGD)
  • ミニバッチ勾配降下法(MBGD)
  • 勢い
  • ネステロフ加速勾配
  • Adagrad (適応勾配アルゴリズム)
  • アダデルタ
  • 実効値プラグ
  • Adam:適応モーメント推定

2.4 オプティマイザ効果の比較

鞍点と等高線に関するいくつかのアルゴリズムのパフォーマンスを見てみましょう:
ここに画像の説明を挿入
ここに画像の説明を挿入
上記の 2 つのケースでは、Adagrad、Adadelta、および RMSprop がほぼ迅速に正しい方向を見つけて前進し、収束速度が非常に速いことがわかります。高速、その他 メソッドが非常に遅いか、見つけるのに多くの回り道が必要です。この図から、適応学習率法、つまり Adagrad、Adadelta、RMSprop、Adam がより適切であり、このシナリオではより良い収束が得られることがわかります。

2.5 最適化アルゴリズムの選択方法

  • データがまばらな場合は、適応メソッド、つまり Adagrad、Adadelta、RMSprop、Adam を使用します。

  • RMSprop、Adadelta、Adam は多くの場合類似しています。

  • Adam は RMSprop に基づいてバイアス補正と運動量を追加しました。

  • 勾配がまばらになるにつれて、Adam は RMSprop よりも優れたパフォーマンスを発揮します。

  • 全体として、Adam が最良の選択です。

  • SGD は多くの論文で使用されていますが、勢いなどはありません。SGD は最小値に到達できますが、他のアルゴリズムよりも時間がかかり、鞍点に閉じ込められる可能性があります。

  • より高速な収束が必要な場合、またはより深く複雑なニューラル ネットワークをトレーニングする場合は、適応アルゴリズムを使用する必要があります。

3.学習率

パラメータ調整の最初のステップは、このパラメータが何であるか、およびその変更がモデルにどのように影響するかを知ることです。すべての機械学習研究者は、パラメータ調整プロセスのテストに直面します。パラメータ調整プロセスでは、学習率の調整は非常に重要な部分です。

3.1 学習率とは

学習率を理解するには、まず、ニューラル ネットワークのパラメーター更新、勾配降下 + バックプロパゲーションのメカニズムを理解する必要があります。

要約すると、出力エラーは、サンプルの出力に適合するようにネットワーク パラメーターに逆伝播されます. これは本質的に最適化のプロセスであり、徐々に最適解に向かう傾向があります.

ただし、各更新パラメーターに使用されるエラーの量は、パラメーターによって制御する必要があります。これは、ステップ サイズとも呼ばれる学習率 (Learning rate) です。

学習率は、時間の経過とともにニューラル ネットワークに情報が蓄積される速度を表します。学習率は、パフォーマンスに最も影響を与えるハイパーパラメーターの 1 つであり、1 つのハイパーパラメーターしか調整できない場合は、それが最良の選択になります。他のハイパーパラメータと比較して、学習率はモデルの有効容量をより複雑に制御します. 学習率が最適な場合、モデルの有効容量は最大になります. したがって、ニューラル ネットワークをトレーニングするために設定する必要がある重要なハイパーパラメータの 1 つは、学習率です。

3.2 モデルに対する学習率の影響

学習率が大きいほど、出力エラーがパラメータに与える影響が大きくなり、パラメータの更新が速くなりますが、同時に異常なデータの影響も大きくなり、発散しやすくなります。

学習率 (学習率、η) は、教師あり学習と深層学習における重要なハイパーパラメーターであり、目的関数が局所的最小値に収束できるかどうか、およびいつ最小値に収束するかを決定します。

適切な学習率により、適切な時間内に目的関数を極小値に収束させることができます。

勾配降下アルゴリズムを最適化に使用する場合、重み更新規則では、勾配項の前に係数が乗算され、この係数は学習率 α と呼ばれます。

学習率は、勾配降下法で損失関数の勾配を使用してネットワークの重みを調整する方法をガイドするハイパーパラメーターです。
new_weight = old_weight - learning_rate * gradient

3.3 学習率が損失値と深層ネットワークに与える影響

  • 学習率が大きすぎると、損失関数がグローバル最適点を直接横切る可能性があり、勾配爆発が発生しやすく、損失振動の振幅が大きくなり、モデルの収束が困難になります。
  • 学習率が小さすぎると、損失関数の変化速度が非常に遅くなり、オーバーフィットしやすくなります。ネットワークの収束の複雑さが大幅に増加します. 低い学習率を使用すると、極小値を見逃すことはありませんが、収束に時間がかかることも意味します.

3.4 学習率の役割

学習率は、モデルの学習の進行状況を制御します。

上記から、深いネットワークに適した学習率更新戦略を選択すると、次の 2 つの利点に抽象化できることがわかります。

  • 損失の最小値に早く到達する
  • 収束を保証する損失値は、ニューラル ネットワークの大域的最適解です。

3.5 学習率の設定

理想的な学習率は一定の値ではなく、トレーニングの回数によって変化する値、つまりトレーニングの初期段階では学習率が比較的大きく、トレーニングが進むにつれて学習率が下がり続けます。モデルが収束するまで減少します。

トレーニング プロセス中、動的に変化する学習率は通常、トレーニング ラウンドの数に応じて設定されます。

  • トレーニング開始時: 適切な学習率は 0.01 ~ 0.001 です。
  • 一定数のラウンド後: 徐々に速度を落とします。
  • トレーニングの終わり近く: 学習率の減衰は 100 倍以上になるはずです。

現在の研究では、一般的に合意されている学習率の設定基準は次のとおりです。最初に大きな学習率を設定してネットワークの損失値を急速に低下させ、次に反復回数の増加に伴って学習率を少しずつ減らして防止します。グローバル最適解 .

そのため、次の 2 つの問題に直面しています。

初期学習率の選択方法

  • ほとんどのネットワークの学習率の初期値は 0.01 と 0.001 に設定されています。
  • より科学的な設定方法: 最初に非常に小さい学習率を設定し、各エポック後に学習率を上げ、各エポックの損失または acc を記録します。反復エポックが多いほど、テストされる学習率が高くなります。さらに、最後に比較します。異なる学習率に対応する損失または acc。
  • 反復回数に応じて学習率を更新する方法 (つまり、減衰学習率戦略)

3.5.3 学習率サイズ

ここに画像の説明を挿入

3.5.2 学習率軽減メカニズム

初期学習率から継続的に下方に減衰するまでの戦略には、一般に次の 3 つの方法があります: ラウンド減衰、指数関数的減衰、およびスコア減衰

  • ラウンド数が遅くなります。5 ラウンドのトレーニング後に学習率が半分になると、次の 5 ラウンド後に再び半分になります。
  • 指数関数的な減速: つまり、トレーニング ラウンドの数などに応じて、学習率が指数関数的に増加します。
  • スコアが遅くなる

3.6 学習率と目的関数損失値曲線

理想的には、曲線は下向きのスライド [緑の線]である必要があります。
ここに画像の説明を挿入

  • 曲線は最初に上昇します [赤線]:
    解決策: 初期の学習率が大きすぎて、振動が発生します. 学習率を下げて、トレーニングをゼロから開始する必要があります.
  • 曲線は最初は大きく落ち込み、しばらくすると元のレベルに戻りました [紫色の線]:
    解決策: 後の段階の学習率が大きすぎて、収まりません。学習率を下げて、次の数ラウンドのトレーニングは再トレーニングする必要があります。
  • 曲線全体が遅い [黄色の線]:
    解決策: 初期の学習率が小さすぎるため、収束が遅くなります. 学習率を上げて、ゼロからトレーニングを開始する必要があります.

3.7 学習率のまとめ

最適な学習率を選択することは、ニューラル ネットワークが全体的な最小値に収束できるかどうかを決定するため、重要です。より高い学習率を選択すると、損失関数に望ましくない結果が生じる可能性があるため、スキップする可能性が高いため、グローバル最小値に到達することはほとんどありません。したがって、常にグローバル ミニマム付近にいますが、グローバル ミニマムに収束することはありません。小さい学習率を選択すると、ニューラル ネットワークが全体的な最小値に収束するのに役立ちますが、ネットワークの重みをほとんど調整しないため、時間がかかります。この方法では、ニューラル ネットワークのトレーニングにより多くの時間を費やす必要があります。学習率が小さいほど、ニューラル ネットワークが局所的最小値にトラップされる可能性も高くなります。つまり、ニューラル ネットワークは局所的最小値に収束し、学習率が小さいため、局所的最小値から飛び出すことができなくなります。最小。そのため、学習率を設定するときは非常に注意する必要があります。以下の図は、この問題を視覚化したものです。
ここに画像の説明を挿入
最適な最適学習率は、特定のデータセットに対して推論 (予測) を実行するときに、ネットワーク パラメーター値の関数であるニューラル ネットワークの損失関数マップ (損失ランドスケープ) に関連付けられています。量子化および関連する「エラー」は、特定のパラメーターを使用して構成されます。この損失マップは、非常に類似したネットワーク アーキテクチャでは非常に異なって見える場合があります。最適な学習率は、損失マップのトポロジ、つまりモデル構造とデータセットによって異なります。デフォルトの学習率 (ディープ ラーニング ライブラリによって自動的に決定される) を使用して同様の結果を得ることができますが、最適な学習率を検索してパフォーマンスを向上させることもできます。

最終的には、ネットワーク損失を大幅に削減する学習率を取得したいと考えています。これは、各ミニバッチ (反復) の学習率を徐々に上げながら簡単な実験を行い、各増分後の損失を記録することで観察できます。この漸進的な増加は、線形または指数関数的である可能性があります。

学習率が遅すぎると、損失関数が減少する可能性がありますが、非常に浅い率です。最適な学習率領域に入ると、損失関数が非常に大きく低下することがわかります。学習率をさらに上げると、損失関数の値が「ジャンプ アラウンド」したり、最低点付近で発散したりする可能性があります。最良の学習率は、損失関数の最も急な降下と対になっていることを思い出してください。そのため、主に分析グラフの勾配に関心があります。下の図に示すように、
ここに画像の説明を挿入
この実験の学習率の境界を設定して、3 つの段階すべてを確認できるようにし、最適な範囲を特定する必要があります。

もう 1 つの一般的に使用される手法は、学習率アニーリングです. 比較的高い学習率から始めて、トレーニング中に徐々に学習率を下げることをお勧めします. このアプローチの背後にある考え方は、初期パラメーターから「適切な」パラメーター値の範囲にすばやく移動したいが、「損失関数のより深く狭い場所」を探索できるように十分に小さい学習率が必要であるということです ( Karparthy の CS231n コース ノートから: http://cs231n.github.io/neural-networks-3/#annealing-the-learning-rate)。これの主な理由は、前述のように、学習率が高すぎると、パラメーターの更新が最小値とその後の更新の間で「ジャンプ」する可能性があり、最小範囲の収束で一定のノイズが発生する可能性があるためです。最小値からの逸脱を引き起こす可能性があります。

学習率アニーリングの最も一般的な方法は、「ステップ減衰」であり、一定数のトレーニング エポックの後に学習率が一定の割合で減少します。他の方法は、定期的な学習率テーブル、または確率的勾配降下 (SGDR) の使用などです
ここに画像の説明を挿入
。 .

4. ハイパーパラメータ

機械学習 (深層学習を含む) のコンテキストでは、ハイパーパラメーターは、トレーニングによって取得されたパラメーター データではなく、学習プロセスを開始する前に値が設定されるパラメーターです。通常、学習のパフォーマンスと効果を向上させるには、ハイパーパラメータを最適化し、学習マシンに最適なハイパーパラメータのセットを選択する必要があります。

4.1 ハイパーパラメータは通常、次の場所に存在します。

  1. 複雑さや学習能力など、モデルに関する上位レベルの概念を定義します。
  2. 標準モデルのトレーニング中にデータから直接学習することはできず、事前に定義する必要があります。
  3. 異なる値を設定し、異なるモデルをトレーニングし、より良いテスト値を選択することで決定できます

具体的には、深層学習における学習率(learning rate)、勾配降下法の反復回数(iterations)、隠れ層(hidden layer)の数、隠れ層ユニットの数、活性化関数(activation function)をすべて実際の状況に基づいて設定する必要があります.これらの数値は実際に最終的なパラメーターの合計の値を制御するため、ハイパーパラメーターと呼ばれます.

4.2 ハイパーパラメータの最適値を見つける

ハイパーパラメータは手動で設定する必要があり、設定値は結果に大きな影響を与えます。ハイパーパラメータを設定する一般的な方法は次のとおりです。

  • 推測と確認: 経験や直感に基づいてパラメータを選択し、ずっと繰り返します。
  • グリッド検索: 一定の範囲内で均等に分布する一連の値をコンピューターに試行させます。
  • ランダム検索: コンピュータに一連の値をランダムに選択させます。
  • ベイジアン最適化: ベイジアン最適化ハイパーパラメーターを使用すると、ベイジアン最適化アルゴリズム自体が多くのパラメーターを必要とするという問題に直面します。

4.3 ハイパーパラメータ検索プロセス

ハイパーパラメータ検索の一般的なプロセスは次のとおりです。

  1. データセットをトレーニング セット、検証セット、テスト セットに分割します。
  2. モデルのパフォーマンス インジケーターに従って、トレーニング セットのモデル パラメーターを最適化します。
  3. モデルのハイパーパラメーターは、モデルのパフォーマンス インジケーターに従って検証セットで検索されます。
  4. ステップ 2 とステップ 3 を交互に繰り返し、最終的にモデルのパラメータとハイパーパラメータを決定し、評価モデルの長所と短所をテスト セットで検証します。
  5. それらの中で、検索プロセスには検索アルゴリズムが必要であり、一般に、グリッド検索、ランダム検索、ヒューリスティックインテリジェント検索、ベイジアン検索などを含みます。

おすすめ

転載: blog.csdn.net/weixin_45277161/article/details/127949030