バッチサイズはSGDの収束にどのように影響しますか?


18

ミニバッチのサイズが大きくなると、SGDの収束が実際に難しく/悪化するという、多くの議論から同様の結論を見ました。たとえば、このペーパーこの回答です。また、早い段階で小さな学習率やバッチサイズなどのトリックを使用して、大きなバッチサイズでこの問題に対処する人もいると聞きました。

ただし、ミニバッチの平均損失は、データ分布で予想される損失の近似と考えることができるため、直感に反するように見えます。 バッチサイズが大きいほど、正確になります。なぜ実際にはそうではないのですか?

1|X|xXl(x,w)Expdata[l(x,w)]


以下に、説明しようとする私の(おそらく間違った)考えをいくつか示します。

モデルのパラメーターは相互に大きく依存しています。バッチが大きくなりすぎると、一度に多くのパラメーターに影響を与え、パラメーターが安定した固有の依存関係に達するのが難しくなりますか?(バッチ正規化ペーパーで言及されている内部共変量シフト問題のように)

または、ほぼすべてのパラメーターがすべての反復で責任がある場合、冗長な暗黙のパターンを学習する傾向があるため、モデルの容量が減少しますか?(つまり、数字の分類の問題については、いくつかのパターンがドット、エッジの原因となるはずですが、これが発生すると、すべてのパターンがすべての形状を担当しようとします)。

それとも、バッチサイズがトレーニングセットのスケールに近づくと、相関するミニバッチの確率が高くなるため、ミニバッチはデータ分布からiidとして認識できなくなるためですか?


更新
Benoit Sanchezの回答で指摘されているように、1つの重要な理由は、1つの更新を完了するために大きなミニバッチにより多くの計算が必要であり、ほとんどの分析が比較のために一定のトレーニングエポックを使用することです。

しかし、この論文(Wilson and Martinez、2003)は、十分な量のトレーニングエポックが与えられたとしても、バッチサイズを大きくすると依然として不利であることを示しています。一般的にそうですか? ここに画像の説明を入力してください

回答:


12

確かに1アップデートの大きなminibatchでは、より(精度の点で)「より良い」である1つの更新小さなminibatchと。これは、質問でコピーした表で見ることができます(サンプルサイズと呼びます):N

  • バッチサイズ1:更新数27N
  • バッチサイズ20,000:更新数8343×N200000.47N

大きなバッチでは、同じ精度ではるかに少ない更新しか必要ないことがわかります。

ただし、同じ量のデータを処理していないため、比較できません。私は最初の記事を引用しています:

「小さなミニバッチした SGD反復 の実行と、大きなミニバッチた単一の反復の効果を比較し "kBj1jkBj

ここでは、同じ量のデータ処理するためのものであり、複数のミニバッチのオーバーヘッドはわずかですが、これには同等の処理リソースが必要です。

(同じ量のデータを読み取るために)いくつかの更新が優れている理由を理解するには、いくつかの方法があります。これは、確率的勾配降下法と勾配降下法の重要な考え方です。すべてを読んでから最後に自分自身を修正する代わりに、途中で自分自身を修正します。より良い推測から自分自身を修正するので、次の読み取りはより便利になります。幾何学的には、各セグメントの開始時に(近似)勾配の方向にそれぞれのセグメントを描画しているため、複数の更新の方が優れています。単一の大きな更新は、(正確な)勾配の方向の最初からの単一のセグメントです。方向の精度が低い場合でも、方向を数回変更することをお勧めします。

ミニバッチのサイズは、基本的に更新の頻度です。ミニバッチが小さいほど更新が多くなります。極端な場合(minibatch = dataset)、勾配降下があります。他の極端な場合(ミニバッチ= 1行)、1行あたりのSGDがいっぱいになります。とにかくラインごとのSGDは優れていますが、より効率的な並列化にはより大きなミニバッチが適しています。

収束プロセスの終わりに、SGDは(バッチ)GDよりも精度が低くなります。しかし、この時点で、物事は(通常)役に立たない正確なフィッティングの一種になります。トレーニングセットの損失関数はわずかに小さくなりますが、実際の予測力は得られません。非常に正確な最適値を探しているだけですが、それは役に立ちません。損失関数が正しく正規化されていると(過剰適合を防ぐ)、正確に「過剰」適合しなくても、無駄に「過剰」適合します。これは、テストセットの精度に重大な変化がないことを示しています。


1
おかげで、それは非常に理にかなっています。基本的に、同じ量の更新を行う場合、バッチサイズを大きくしても少なくとも同じくらい良いでしょうか?
dontloo

その上で公開された実験を知っていますか(異なるバッチサイズと一定数の更新を比較します)?
dontloo

はい、同じ数の更新の場合、バッチが大きいほど常に優れています。私は出版物を知りません。それを見つけたら投稿します。
ブノワサンチェス

残りの質問(表)を読みます。興味深いことに、テストセットで結果を表示しますが、勾配を適切にする目的は、トレーニングセットで最適化することです。最適なものをランダム化することにより、小さなバッチが特定の種類の小さな過剰適合を回避することが可能です。それは私が直観的につかまえない微妙なことです。
ブノワサンチェス

記事によると、精度の違いは重要ではありません。彼らは正確さが本質的に同じであることを指摘したいだけです。彼らが主に指摘したいのは、小さなバッチでのSGDの方がずっと速いということです。
ブノワサンチェス

4

Curtis Whiteの回答に追加する(およびいくつかの参照を追加する)には:

はい、SGDは正則化の一種として機能します。そうでない場合、それはのでDNNSは、常にオーバーフィットしない理由を説明するのは難しいので、これは重要であり、彼らがすることができます

私が理解している理由は、SGDがパラメーター空間で「ホップアラウンド」を引き起こすため、トレーニング中にパラメーターが狭い最小値に留まることができず、より広い(またはそれに近い)だけであるためです。そして、これらのより広いものは明らかに[1]より一般化されています(別名、過剰適合が少ない)。

その他の参照:

  • これは [2]これを形式化する別の論文です(または、私がすべてをたどりませんでした、自分で確認してください!)
  • この論文 [3]は、"stochastic relaxation, or random diffusion"SGDに固有の確率論がにつながる段階があると主張してい"maximiz[ation of] the conditional entropy of the layer"ます。

どちらの場合も、SGDはエントロピー正則化用語に対応します。

バッチサイズが収束に影響する他の方法は間違いなくあります。これは私が知っているものです。


[1]例:「一般化と確率的勾配降下に関するベイジアンの視点」、スミス、ル、2018。 要約から: "We propose that the noise introduced by small mini-batches drives the parameters towards minima whose evidence is large."

[2]「確率的勾配降下は変分推論を実行し、深いネットワークのリミットサイクルに収束する」、Chaudhari、Soatto 2017

[3]「情報を介してディープニューラルネットワークのブラックボックスを開く」シュワルツジブ、ティシュビー、2017年

[4]「ディープラーニングを理解するには、一般化を再考する必要がある」、C。Zhangなど2016


(+1)良い参考文献。[4]の最初の著者はC. Zhang
user20160

ああ、あなたは正しい!修正してくれてありがとう。
dasWesen

0

バッチサイズが大きすぎると、少なくともSGDを使用し、Kerasを使用してMLPをトレーニングするときに収束が妨げられる可能性があります。なぜかというと、それが勾配の平均化に関係するのか、それとも小さな更新が極小値を逃げる可能性が高いのかについて100%確信が持てません。

こちらをご覧ください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.