TL; DR:ミニバッチのサイズが大きすぎると、通常、精度が低下します!
興味がある人のために、ここに説明があります。
速度には2つの概念があります。
計算速度は、単にハードウェアで数値計算を実行する速度です。あなたが言ったように、それは通常、より大きなミニバッチサイズで高くなります。これは、線形代数ライブラリがベクトル演算と行列演算にベクトル化を使用してそれらを高速化するため、より多くのメモリを使用するためです。ゲインは、ある時点まで大きくなる可能性があります。私の経験から、ある時点で速度の向上はわずかしかありません。ポイントは、データセット、ハードウェア、および数値計算(内部)に使用されるライブラリによって異なります。
しかし、他の速度の概念もあることを忘れないでください。これは、アルゴリズムの収束速度を示しています。
まず、アルゴリズムが収束することはどういう意味ですか?さて、検証セットで計算された精度またはエラーに満足したかどうかを定義して決定するのは私たち次第です。事前に定義してアルゴリズムがその時点に達するのを待つか、トレーニングプロセスを監視して、検証エラーが大幅に増加し始めたときに停止することを決定できます(モデルがデータセットを過剰適合し始めます)。Stochastic Gradient Descent(SGD)を使用しているため、ミニバッチで作業している場合、エラーが発生し始めた瞬間にすぐに停止しないでください。(フルバッチ)Gradient Descentの場合、各エポックの後、アルゴリズムは、ローカルまたはグローバルのいずれであっても、最小限に落ち着きます。SGDが実際に最低限に収まることはありません。それはその周りで振動し続けます。無期限に続く可能性がありますが、
今、すべてのその理論の後、私たちが注意を払う必要がある「キャッチ」があります。小さいバッチサイズを使用する場合、大きいバッチサイズを使用する場合よりも誤差の計算にノイズが多くなります。まあ、それは悪いことだと思うでしょうか?ノイズは、アルゴリズムが悪いローカルミニマムから飛び出し、より良いローカルミニマム、またはできればグローバルミニマムを見つける可能性が高くなるということです。
したがって、「望ましくない」ノイズの助けを借りて、大きなバッチサイズではなく小さなバッチサイズを使用することにより、より良いソリューションをより迅速に見つけることができる場合、アルゴリズムが満足のいくものを見つけるのにかかる合計時間を調整できますソリューションとより高い精度。
私が言いたいのは、多くの人が信じているように、与えられた精度(またはエラー)に対して、バッチサイズを小さくすると、総トレーニング時間が短くなる可能性があります。
または、以前と同じトレーニング時間を維持することにした場合、小さなバッチサイズでわずかに高い精度が得られる可能性があり、特に学習率を適切に選択した場合は、おそらくそうなります。
時間がある場合は、このペーパーを
ご覧
ください。ImageNetでのCNNの体系的な評価特に、「3.7。バッチサイズと学習率」、および図8を確認してください。大きなミニバッチサイズは、精度の低下につながります。 、学習率をヒューリスティックに調整しても。
一般に、32のバッチサイズは開始点として適切であり、64、128、および256でも試してください。一部のデータセットでは他の値(より低いまたはより高い)で問題ない場合がありますが、通常、指定された範囲が最適ですで実験を開始します。ただし、32未満では、ベクトル化を最大限に活用していないため、計算速度が大幅に低下するため、速度が低下しすぎる場合があります。「メモリ不足」エラーが発生した場合は、とにかくミニバッチサイズを小さくしてみてください。
そのため、メモリに収まる最大のミニバッチサイズを使用するだけではありません。
結論として、質問に答えるために、小さいミニバッチサイズ(小さすぎない)は、通常、大きいバッチサイズよりもトレーニングアルゴリズムの反復回数が少ないだけでなく、全体としてより高い精度にもつながります。同じトレーニング時間以下でより良いパフォーマンスを発揮するニューラルネットワーク。
ノイズが大きいと、ローカルの悪い最小値から飛び出すのを助けることができることを忘れないでください。