バッチ勾配降下と確率的勾配降下


101

トレーニングセットがます。また、トレーニングセットで何らかのタイプの教師あり学習アルゴリズムを実行するとします。仮説はます。と間の「距離」を最小化するパラメーターを見つける必要があります。ましょう(x(i),y(i))i=1,,mhθ(x(i))=θ0+θ1x(i)1++θnx(i)nθy(i)hθ(x(i))

J(θ)=12i=1m(y(i)hθ(x(i))2

次に、を最小化するを見つけます。勾配降下では、各パラメーターを初期化し、次の更新を実行します。θJ(θ)

θj:=θjαθjJ(θ)

バッチ勾配降下と確率的勾配降下の主な違いは何ですか?

両方とも上記の更新ルールを使用します。しかし、一方が他方より優れていますか?

回答:


121

バッチまたは確率的勾配降下の適用可能性は、実際に予想される誤差多様体に依存します。

バッチ勾配降下は、データセット全体を使用して勾配を計算します。これは、凸または比較的滑らかなエラー多様体に最適です。この場合、ローカルまたはグローバルのいずれかの最適なソリューションに向かっていくぶん直接移動します。さらに、学習した学習率が与えられると、バッチ勾配降下は、最終的にその引き込み領域にある最小値を見つけます。

確率的勾配降下(SGD)は、単一のサンプルを使用して勾配を計算します。SGDのほとんどのアプリケーションでは、いくつかのサンプルのミニバッチを実際に使用しますが、これについては少し後で説明します。SGDは、多くの局所的な最大値/最小値を持つエラー多様体に対してうまく機能します(よくありませんが、バッチ勾配降下よりも優れています)。この場合、減少したサンプル数を使用して計算されたややノイズの多い勾配は、モデルを局所的な最小値から、より最適な領域にジャークする傾向があります。単一のサンプルは本当にノイズが多く、ミニバッチはノイズを少し平均化する傾向があります。したがって、ミニバッチを使用すると、ジャークの量が減少します。ミニバッチのサイズが貧弱なローカルミニマムの一部を回避するのに十分小さいが、十分な大きさではない場合、良いバランスがとられます。tグローバルミニマムまたはパフォーマンスの良いローカルミニマムを回避する。(ちなみに、これは、最良の最小値がより大きく、より深い引き込み領域を持ち、したがって、陥りやすいと仮定しています。)

SGDの利点の1つは、計算がはるかに高速であることです。大規模なデータセットは多くの場合RAMに保持できないため、ベクトル化の効率が大幅に低下します。むしろ、各サンプルまたはサンプルのバッチをロードし、処理し、結果を保存する必要があります。一方、ミニバッチSGDは通常、計算的に扱いやすいように意図的に十分に小さくされています。

通常、この計算上の利点は、SGDのより多くの反復を実行することによって活用され、従来のバッチ勾配降下よりも多くのステップを作成します。これにより、通常、バッチ勾配降下法で検出されるモデルに非常に近いか、より良いモデルが作成されます。

SGDがどのように機能するかについて考えたいのは、入力分布を表す1つのポイントがあると想像することです。私のモデルは、その入力分布を学習しようとしています。入力分布の周囲には、サンプリング可能なすべてのミニバッチの入力分布を表す影付きの領域があります。通常、ミニバッチの入力分布が真の入力分布に近接していることは公正な仮定です。バッチ勾配降下は、すべてのステップで、最も急なルートをたどって真の入力分布に到達します。一方、SGDは、影付きの領域内でランダムなポイントを選択し、このポイントに向かって最も急なルートを取ります。ただし、反復のたびに、新しいポイントが選択されます。これらすべてのステップの平均は、通常は非常によく、真の入力分布に近似します。


13
実際には、バッチグラデーション降下を使用する人はいません。それほど多くの利益を得るには、単に計算的に高価すぎます。(ゲインは、実際に「真の」勾配をステップダウンしていることです。)非常に非凸損失関数がある場合は、ほとんど正しい方向にステップするだけでよく、最終的にローカルミニマムに収束します。したがって、ミニバッチSGD。
サバラバ

@Jason_L_Bensでは、これらのアルゴリズムの詳細を参照できる参考資料(論文またはオンラインテキスト)がありますか?
user110320

1
@ user110320頭に浮かぶわけではありませんが、それらは非常に一般的なアルゴリズムであるため、トピックで検索できるリソースが大量にあるはずです。一般的なアプローチを探している場合は、Yoshua BengioのAI向けラーニングディープアーキテクチャを読むことをお勧めします。それは私が始めたところです。
Jason_L_Bens

6

他の答えが示唆するように、SGDを使用する主な理由は、多くのミニバッチまたはサンプルで平均したときに勾配方向を大きく維持しながら、勾配の計算コストを削減することです。

  1. ミニバッチが機能する理由

この背後にある数学は、コスト関数の「真の」勾配(一般化誤差または無限に大きなサンプルセットの勾配)は、真のデータ生成分布に対する勾配の期待値であるということです。サンプルのバッチで計算される実際の勾配は、常に経験的データ分布を使用した真の勾配の近似値です。 pdatap^data

g=Epdata(J(θ)θ)
バッチ勾配降下は、すべてのデータサンプルが与えられた場合に可能な「最適な」勾配をもたらすことができますが、「真の」勾配ではありません。小さいバッチ(ミニバッチ)はおそらくフルバッチほど最適ではありませんが、どちらも近似値です-シングルサンプルミニバッチ(SGD)も同様です。それらの標準誤差の差は、ミニバッチのサイズに反比例します。つまり、
SE(g^(n))SE(g^(m))=mn
つまり、標準誤差の減少は、サンプルサイズの増加の平方根です。上記の式は、ミニバッチ勾配降下の1ステップで計算された勾配に対するものです。ミニバッチ勾配更新のステップを繰り返し、最終的にすべてのトレーニングサンプルを1つのエポックで使用すると、与えられたすべてのサンプルに基づいて、勾配の平均を仮想的に計算します。つまり、ミニバッチサイズ場合、 上記の方程式から、1つのエポックで、異なるミニバッチサイズ平均勾配と結論付けることができます。m
Ep^data(g^(m))=Ep^data(J(θ)θ)
m (1から完全なバッチまで)は同じ標準誤差を持ち、さらに重要なことに、それらはすべて「真」の勾配に対する忠実な近似、つまり「真」の勾配の正しい​​方向への移動です。
  1. なぜミニバッチがよりうまくいくのか

第一に、ミニバッチは、より小さいバッチサイズで計算の需要が減少するため、技術的に解決できないものから対処可能なものまで、いくつかの学習問題を作ります。

第二に、バッチサイズの減少は、必ずしも勾配精度の低下を意味するわけではありません。トレーニングサンプルの多くには、多くのノイズまたは外れ値またはバイアスがあります。ランダムにサンプリングされたミニバッチは、元のフルバッチよりも優れた(または悪化していない)真のデータ生成分布を反映する場合があります。ミニバッチグラデーション更新のいくつかの反復でより良い推定が得られる場合、1エポックの全体的な平均結果は、フルバッチから計算されたグラデーションよりも優れている可能性があります。

第三に、ミニバッチは、不快なデータサンプルの処理に役立つだけでなく、多くの局所的な最小値を持つ不快なコスト関数の処理にも役立ちます。Jason_L_Bensが言及しているように、エラー多様体は、ローカルミニマムに通常の勾配をトラップしやすく、ミニバッチで計算された一時的にランダムな勾配をトラップするのが難しい場合があります。

最後に、勾配降下では、1ステップでグローバルミニマムに到達するのではなく、エラーマニホールドで繰り返します。勾配は、主に反復する方向のみを提供します。ミニバッチを使用すると、はるかに高速に反復できます。多くの場合、反復回数が多いほど、より良いポイントに到達できます。すべての天気で、ポイントがグローバルに、またはローカルにさえ最適であるとは本当に気にしません。許容できる一般化エラーをもたらす合理的なモデルに到達したいだけです。ミニバッチはそれを簡単にします。

Ian Goodfellowなどによる「Deep learning」という本を注意深く読むと、このトピックに関するかなり良い議論があるかもしれません。


凸最適化問題については、あなたが言ったことは問題ありません。しかし、非凸関数で勾配法を使用するために、SGDがバッチGDより優れているという非常に重要な理由を見逃しました。私の応答を参照してくださいdatascience.stackexchange.com/questions/16807/...
horaceT

@horaceTコメントありがとうございます。あなたが言及した点は上記のJason_L_Bensによって詳細に説明されているので、繰り返すことを気にしませんでしたが、最後の3番目の段落で彼の答えを丁寧に参照しました。勾配降下最適化問題では、非凸はis点を含む局所最小値に反映されます(最後の3番目の段落を参照)。また、説明のため、SGDをミニバッチとして説明していますが、バッチサイズは1です(3番目の段落を参照)。

3

私にとって、バッチ勾配はリーン勾配に似ています。リーングラディエントでは、バッチサイズが選択されるため、更新されるすべてのパラメーターも、バッチ内で独立して変化しますが、必ずしも直交する必要はありません。たとえば、バッチに10個の実験、10行が含まれている場合、独立した列を形成できます。10行により、512個のパラメーターの独立した更新が可能になりますが、直交ではありません。2101=512

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