回答:
バッチまたは確率的勾配降下の適用可能性は、実際に予想される誤差多様体に依存します。
バッチ勾配降下は、データセット全体を使用して勾配を計算します。これは、凸または比較的滑らかなエラー多様体に最適です。この場合、ローカルまたはグローバルのいずれかの最適なソリューションに向かっていくぶん直接移動します。さらに、学習した学習率が与えられると、バッチ勾配降下は、最終的にその引き込み領域にある最小値を見つけます。
確率的勾配降下(SGD)は、単一のサンプルを使用して勾配を計算します。SGDのほとんどのアプリケーションでは、いくつかのサンプルのミニバッチを実際に使用しますが、これについては少し後で説明します。SGDは、多くの局所的な最大値/最小値を持つエラー多様体に対してうまく機能します(よくありませんが、バッチ勾配降下よりも優れています)。この場合、減少したサンプル数を使用して計算されたややノイズの多い勾配は、モデルを局所的な最小値から、より最適な領域にジャークする傾向があります。単一のサンプルは本当にノイズが多く、ミニバッチはノイズを少し平均化する傾向があります。したがって、ミニバッチを使用すると、ジャークの量が減少します。ミニバッチのサイズが貧弱なローカルミニマムの一部を回避するのに十分小さいが、十分な大きさではない場合、良いバランスがとられます。tグローバルミニマムまたはパフォーマンスの良いローカルミニマムを回避する。(ちなみに、これは、最良の最小値がより大きく、より深い引き込み領域を持ち、したがって、陥りやすいと仮定しています。)
SGDの利点の1つは、計算がはるかに高速であることです。大規模なデータセットは多くの場合RAMに保持できないため、ベクトル化の効率が大幅に低下します。むしろ、各サンプルまたはサンプルのバッチをロードし、処理し、結果を保存する必要があります。一方、ミニバッチSGDは通常、計算的に扱いやすいように意図的に十分に小さくされています。
通常、この計算上の利点は、SGDのより多くの反復を実行することによって活用され、従来のバッチ勾配降下よりも多くのステップを作成します。これにより、通常、バッチ勾配降下法で検出されるモデルに非常に近いか、より良いモデルが作成されます。
SGDがどのように機能するかについて考えたいのは、入力分布を表す1つのポイントがあると想像することです。私のモデルは、その入力分布を学習しようとしています。入力分布の周囲には、サンプリング可能なすべてのミニバッチの入力分布を表す影付きの領域があります。通常、ミニバッチの入力分布が真の入力分布に近接していることは公正な仮定です。バッチ勾配降下は、すべてのステップで、最も急なルートをたどって真の入力分布に到達します。一方、SGDは、影付きの領域内でランダムなポイントを選択し、このポイントに向かって最も急なルートを取ります。ただし、反復のたびに、新しいポイントが選択されます。これらすべてのステップの平均は、通常は非常によく、真の入力分布に近似します。
他の答えが示唆するように、SGDを使用する主な理由は、多くのミニバッチまたはサンプルで平均したときに勾配方向を大きく維持しながら、勾配の計算コストを削減することです。
この背後にある数学は、コスト関数の「真の」勾配(一般化誤差または無限に大きなサンプルセットの勾配)は、真のデータ生成分布に対する勾配の期待値であるということです。サンプルのバッチで計算される実際の勾配は、常に経験的データ分布を使用した真の勾配の近似値です。
第一に、ミニバッチは、より小さいバッチサイズで計算の需要が減少するため、技術的に解決できないものから対処可能なものまで、いくつかの学習問題を作ります。
第二に、バッチサイズの減少は、必ずしも勾配精度の低下を意味するわけではありません。トレーニングサンプルの多くには、多くのノイズまたは外れ値またはバイアスがあります。ランダムにサンプリングされたミニバッチは、元のフルバッチよりも優れた(または悪化していない)真のデータ生成分布を反映する場合があります。ミニバッチグラデーション更新のいくつかの反復でより良い推定が得られる場合、1エポックの全体的な平均結果は、フルバッチから計算されたグラデーションよりも優れている可能性があります。
第三に、ミニバッチは、不快なデータサンプルの処理に役立つだけでなく、多くの局所的な最小値を持つ不快なコスト関数の処理にも役立ちます。Jason_L_Bensが言及しているように、エラー多様体は、ローカルミニマムに通常の勾配をトラップしやすく、ミニバッチで計算された一時的にランダムな勾配をトラップするのが難しい場合があります。
最後に、勾配降下では、1ステップでグローバルミニマムに到達するのではなく、エラーマニホールドで繰り返します。勾配は、主に反復する方向のみを提供します。ミニバッチを使用すると、はるかに高速に反復できます。多くの場合、反復回数が多いほど、より良いポイントに到達できます。すべての天気で、ポイントがグローバルに、またはローカルにさえ最適であるとは本当に気にしません。許容できる一般化エラーをもたらす合理的なモデルに到達したいだけです。ミニバッチはそれを簡単にします。
Ian Goodfellowなどによる「Deep learning」という本を注意深く読むと、このトピックに関するかなり良い議論があるかもしれません。
私にとって、バッチ勾配はリーン勾配に似ています。リーングラディエントでは、バッチサイズが選択されるため、更新されるすべてのパラメーターも、バッチ内で独立して変化しますが、必ずしも直交する必要はありません。たとえば、バッチに10個の実験、10行が含まれている場合、独立した列を形成できます。10行により、512個のパラメーターの独立した更新が可能になりますが、直交ではありません。