モデルの収束に影響を与える2つの最も重要なパラメーター、Batchsizeとlearn_rate

最適化自体の観点から、ディープラーニングトレーニングのBatchSizeと学習率(および学習率削減戦略の影響)
は、モデルのパフォーマンスの収束に影響を与える最も重要なパラメーターです。
学習率はモデルの収束状態に直接影響し、batchsizeはモデルの汎化パフォーマンスに影響します。これら2つは分子と分母に直接関連しており、互いに影響することもあります。

記事ディレクトリ

1 Batchsizeがトレーニング結果に与える影響(同じ数のエポックラウンド)

ここでは、GHIM-20を使用します。20のカテゴリの各タイプの画像20枚、合計10000(train9000)(val1000)、および
合計100エポック(9000画像を100回トラバースするのと同じですが、acc(トラバースは反復ごとに10回印刷されます)合計1000 val_list)
ここに画像の説明を挿入
ここで使用されるAlexnet(それぞれtrain_batchsize = 32およびtrain_batchsize = 64)

結果の比較

1. Alexnet 2080s train_batchsize = 32、val_batchsize =64。lr= 0.01 GHIMyousan

  1. 2080sトレーニングs 4.68h、ほぼ28kの反復== 100epoch x 9000/32、各トレインバッチは濃い青の損失を記録します
  2. val-batchは、val-loss水色を記録します
    質問:損失は収束していますか?
    acc-lossは、train-lossよりも常に大きいため、過剰適合の問題であることがわかります。
    いくつかの回答を確認しました
    。1. 理論的には収束しませんつまり、設計したネットワークに問題があります。これは、考慮すべき最初の要素でもあります。勾配が存在するかどうか、つまり、逆伝播が壊れているかどうか;
    2. 理論的には収束している
    1. 学習率の設定は不合理です(ほとんどの場合)。学習率の設定が大きすぎると、非収束が発生します。小さすぎると、収束率が非常に遅くなります。

    2. バッチサイズが大きすぎると、ローカル最適になり、グローバル最適に到達できないため、収束し続けることができません。

    3. ネットワーク容量、複雑なタスクを完了するための浅いネットワークの損失が減少しないことは確かです。ネットワーク設計は単純すぎます。一般に、ネットワーク内のレイヤーの数とノードの数が多いほど、フィッティング能力が強くなります。レイヤーとノードの数が十分でない場合、複雑な状況に対応できないため、収束も発生しません。
      学習率ステップの減少のベースは大きすぎず、batchsize = 32は大きくないため、収束していますか?(結局のところ、損失= 0.0008は大きすぎません。)
      ここに画像の説明を挿入
      ここに画像の説明を挿入
      ここに画像の説明を挿入
      acc曲線は次のとおりです:基本的に、15,000回の反復(つまり、エポック= 15000 * 32/9000 = 53ラウンド)の後で画像を見てフィットします。興味深いのは、学習に対応していることです。レートが0.01から0.001に減少
      質問:値のacc84%が上昇しないのはなぜですか
      トレーニングセットのパフォーマンスは良好で、テストセットの違いは過剰適合であり、学習された機能がまだ十分に一般化されていないことを示してい
      ます。
      過剰適合ソリューション
      1.理由:

      • 過剰適合の理由は、トレーニングセットの大きさがモデルの複雑さと一致しないためです。
      • トレーニングセットの規模は、モデルの複雑さよりも小さくなります。
      • トレーニングセットとテストセットの機能の分布に一貫性がない。
      • サンプルのノイズデータ...

      2.ソリューション
      (より単純なモデル構造、データ拡張、正則化、ドロップアウト、早期停止、アンサンブル、データの再クリーニング)

2. Alexnet 2080 train_batchsize = 64、val_batchsize = 64、lr = 0.01 GHIM-me 14k itera

2080 train_batchsize = 64、4.5kの反復は基本的に適合され(4500 * 64/9000 = 32ラウンド)、trainとvalの両方が優れています。そして、フィッティングは良いです
ここに画像の説明を挿入
ここに画像の説明を挿入
下図に示すように

3. Alexnet 2080s train_batchsize = 64、val_batchsize = 64、lr = 0.02 GHIM-yousan

2080年代、収束や過適合はありませんか?
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

4 Squeezenet 2080s train_bs = 64 val-bs = 64 lr 0.01 GH

ここに画像の説明を挿入

ここに画像の説明を挿入
ここに画像の説明を挿入

4-再現性実験Squeezenet 2080s train_bs = 64 val-bs = 64 lr 0.01 GHIM-me、結果はまだ87%accをオーバーフィットしています

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

5 mobilenetv1 2080s t-bs:64、v-bs:64 lr:0.01、GHIM-me過剰適合

ここに画像の説明を挿入
ここに画像の説明を挿入

ここに画像の説明を挿入

5 mobilenetv2 2080s t-bs:64、v-bs:64 lr:0.01、GHIM-me過剰適合

ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入

6 mobilenetv1 2080 t-bs:64 v-bs:64 lr:0.01 GHIM-me適合

ここに画像の説明を挿入ここに画像の説明を挿入
ここに画像の説明を挿入

6 mobilenetv2 2080 t-bs:64 v-bs:64 lr:0.01 GHIM-me搭載

ここに画像の説明を挿入
ここに画像の説明を挿入
lr = 0.01

前任者10人がバッチサイズについて語る

回す

1 一般的に言えば、特定の範囲内では、Batch_Sizeが大きいほど、下方向が正確に決定され、トレーニングショックが少なくなります。

ここに画像の説明を挿入
ここに画像の説明を挿入

  • Batch_Sizeが増加すると、同じ精度を達成するために必要なエポックの数が増加します。最後から2番目の行
  • Batch_Sizeが増加すると、同じ量のデータの処理が速くなります。
  • 上記の2つの要素の矛盾により、Batch_Sizeは特定のポイントまで増加し、最適な時間に達します。
  • 最終的な収束精度はさまざまなローカルの極値に分類されるため、Batch_Sizeは、最適な最終的な収束精度に到達するために数倍に増加します。

2 バッチサイズのパフォーマンスが大幅に低下するのは、トレーニング時間が十分に長くないためです。これは、本質的にバッチサイズの問題ではありません。同じエポックでのパラメータの更新は少なくなるため、より多くの反復が必要になります。

ここに画像の説明を挿入
バッチサイズ= 8kの後でエラー率が上昇する

大きいバッチサイズはシャープな最小値に収束し、小さいバッチサイズはフラットな最小値に収束します。これにより、汎化能力が向上します。

ここに画像の説明を挿入
2つの違いは、上に示すように、1つは速く、もう1つはゆっくりと変化する傾向にあります。この現象の主な理由は、小さいバッチサイズによって引き起こされるノイズが鋭い最小値を回避するのに役立つためです。

4バッチサイズが増加し、他の人と一緒に学習率が増加するはずです

通常、バッチサイズを元のN倍に増やす場合、同じサンプルの後に更新された重みが等しくなるようにするには、線形スケーリングルールに従って、学習率を元のN倍に増やす必要があります[5]。ただし、重みの分散を維持する場合は、学習率を元のsqrt(N)倍に増やす必要があります[7]現在、両方の方法が検討されており、前者が主に使用されています。

5 Batchsizeのサイズを増やすことは、学習率の減衰を追加することと同じです。

ここに画像の説明を挿入
実際、SGDの重み更新式から、2つは実際に同等であることがわかります。これは、記事の十分な実験によって検証されています。

おわりに

1学習率を上げると、バッチサイズも増えるため、収束がより安定します。

2多くの研究がより大きな学習率は汎化能力の改善につながることを示しているので、大きな学習率を使用するようにしてください。本当に減衰させたい場合は、バッチサイズを増やすなど、他の方法を試すことができます。学習率はモデルの収束に大きな影響を与え、慎重に調整します。

3 bnを使用することの欠点は、小さすぎるバッチサイズを使用できないことです。そうしないと、平均と分散にバイアスがかかります。したがって、現在はビデオメモリが配置できる量と同じです。さらに、実際にモデルを使用する場合は、データを分散して前処理することが非常に重要であり、データが適切でない場合は、これ以上トリックを実行しても意味がありません。

参考資料
https://zhuanlan.zhihu.com/p/29247151
https://zhuanlan.zhihu.com/p/64864995

63の元の記事を公開 賞賛7 ビュー3396

おすすめ

転載: blog.csdn.net/weixin_44523062/article/details/105457045