バッチサイズ(ハイパーパラメータ、バッチサイズ)、なぜその設定範囲とサイズがすべて2の累乗なのでしょうか?何かを変えることはできますか?

オリジナル:

ハイパーパラメータのバッチサイズの調整については、関連する記録を作成してください。ご相談ください。
(バッチ サイズは、確率的勾配降下ベースの最適化アルゴリズムを介して逆伝播を使用してニューラル ネットワークをトレーニングするときの、各ミニバッチ内のトレーニング サンプルの数を指します。

1. 事前協議

現時点では、より適切なバッチ サイズを事前に計算するには、次の方法が考えられます。

BatchSize=int((n×(1<<14)×SM)/(H×W×C))

バッチ サイズのサイズによって、各エポックを完了するのに必要な時間と、深層学習トレーニング プロセス中の反復間の勾配の滑らかさが決まります。たった今:

バッチ サイズが大きいほど、トレーニング速度は速くなり、メモリ使用量も多くなり、収束速度は遅くなります。

既存の一般理論では、GPU は 2 の累乗または 8 の倍数のバッチでより優れたパフォーマンスを発揮できると考えられています。したがって、16、32、64、128、256... に設定すると、通常よりも良く表示されることがよくあります。他の倍数に設定すると、パフォーマンスが向上します。
(ははは、パラメータ調整の形而上学はわかりにくい気がします)

(現時点では、バッチ サイズを 2 の累乗または 8 の倍数として選択するのは、主に習慣によるものだと思います。これは、現在一般的に使用されている標準的な慣行と見なすことができ、改善できるという大きな利点があります)計算の観点からはトレーニング効率が向上しますが、新しく、実行可能で効果的な方法はありません)。

では、その違いの理論的根拠は何でしょうか? それについて先人たちはどのような思いを抱いていたのでしょうか?

2. 理論的根拠

1. メモリの調整

バッチ サイズを 2 のべき乗として選択する主な根拠の 1 つは、CPU と GPU のメモリ アーキテクチャが 2 のべき乗として編成されているということです (メモリ アーキテクチャと一致しており、おそらく計算に適しています...)。より正確には、メモリ ページという概念があり、これは本質的にメモリの連続したブロックです。その結果、1 つ以上のバッチを 1 つのページにきちんと配置して、GPU による並列処理を支援できます。たった今:

メモリの調整を改善するために、バッチ サイズ 2 を選択します。

2. 行列乗算 Tensor コア

行列の次元の選択では、2 の累乗ではなく、8 の倍数を選択することを検討できます。これは、Tensor Core を備えた GPU での混合精度トレーニングに有益である可能性があります。

なぜ8の倍数なのでしょうか?これは行列の乗算に関係しています。

ここに画像の説明を挿入
2 つの行列 A と B を乗算する 1 つの方法は、行列 A の行ベクトルと行列 B の列ベクトルの間の内積を計算することです。これらは、次のような k 要素ベクトルのペアの内積です。

ここに画像の説明を挿入

Tensor コアで GPU を使用する場合、FP16 混合精度トレーニングの場合、8 の倍数が効率にとって最適です。

1. ベンチマーク検証

1. 小さなバッチサイズのベンチマーク

CIFAR-10 で MobileNetV3 モデルを 10 エポックトレーニングします。GPU を適切に使用するために、画像のサイズが 224×224 に変更されます。ここでは、GPU の Tensor コアをより効率的に使用する 16 ビット ネイティブ自動混合精度トレーニングを使用して、Nvidia V100 カードでトレーニングを実行します。
ここに画像の説明を挿入
上の表を観察すると、バッチ サイズ 128 を基準点として、バッチ サイズ 127 およびバッチ サイズ 129 の場合、実際にトレーニング パフォーマンスが低下することがわかります。ただし、その差は小さく、おそらく無視できるほどであることがわかります。

3. 最大バッチサイズのベンチマーク

GPU の全負荷時のトレーニング時間の違いを調査するには、バッチ サイズを 512 に増やします。上の表を見ると、2 のべき乗 (または 8 の倍数) であるバッチ サイズでも違いが生じますが、ほとんど目立ちません。

4. マルチGPUトレーニング

デフォルトのマルチ GPU トレーニング戦略として DistributedDataParallel (DDP) を使用します。
ここに画像の説明を挿入
上の表を見ると、2 のべき乗および 8 の倍数 (256) であるバッチ サイズは 257 より速くないことがわかります。

4. 結論

バッチ サイズを 2 の累乗または 8 の倍数として選択すると、実際にはほとんど、あるいは無視できるほどの差が生じます。つまり、目立った違いはありません。

ただし、バッチ サイズは依然として非常に重要なハイパーパラメータであり、適切かつ効果的な調整を行う必要があります。研究ベンチマークや機械学習の実際の応用においては、調整が必要な箇所が数多くありますが、バッチ サイズを 2 の累乗として選択することは普遍的であり、標準であり、誰もが認識する実行可能な実践です。ハイパーパラメータの検索スペースを制限し、これより優れた実際の検出は存在しないため、物事をよりシンプルかつ管理しやすくするのに役立ちます。

· バッチ サイズ、ニューラル ネットワーク アーキテクチャ、損失関数の選択。
· バッチ サイズの調整は、ハイパーパラメーターの最適化検索に関連します。(ただし、メモリの制約によりバッチ サイズ 512 を使用できない場合は、256 に下げる必要はありません。限られた考慮事項を考慮すれば、バッチ サイズ 500 は完全に実現可能です。) バッチ サイズを小さくすると、汎化パフォーマンスが向上する可能性があります
。可能性が大きいほど、精度と速度が向上します。

この記事の内容は学習と共有のみを目的としています。侵害がある場合は削除するようご連絡ください。

おすすめ

転載: blog.csdn.net/qq_53250079/article/details/128453543