すべてのトレーニングデータを含む単一の「バッチ」よりもミニバッチサイズの方が優れているのはなぜですか?


40

ディープラーニングモデルの場合、通常のプラクティスは、いくつかのトレーニングエポックにミニバッチ(通常は小さなバッチ、32/64)を適用することです。この理由を本当に理解することはできません。

誤解がない限り、バッチサイズとは、トレーニングの反復中にモデルから見られるトレーニングインスタンスの数です。エポックは、各トレーニングインスタンスがモデルによって認識されたときの完全なターンです。その場合、各ターンで利用可能なトレーニングインスタンスをすべてモデルに公開することで「最大バッチ」を適用するのとは対照的に、トレーニングインスタンスのほとんど意味のないサブセットを数回反復する利点を見ることができません(もちろん、想い出)。このアプローチの利点は何ですか?


1
チェックアウト、この答えを。
Icyblade



回答:


46

完全なデータセットとは対照的にミニバッチを使用する主な利点は、確率的勾配降下法1の基本的な考え方にまでさかのぼります。

バッチ勾配降下では、データセット全体の勾配を計算し、潜在的に膨大な量の情報を平均化します。それには多くのメモリが必要です。しかし、実際のハンディキャップは、バッチグラジエントトラジェクトリが悪い場所(サドルポイント)に落ちてしまうことです。

一方、純粋なSGDでは、データセットの単一インスタンスで計算された勾配を追加(マイナス記号)することにより、パラメーターを更新します。1つのランダムデータポイントに基づいているため、非常にノイズが多く、バッチグラディエントから遠く離れた方向に進む可能性があります。ただし、ノイズは、非凸最適化で必要なものです。これは、addle点または極小値からの脱出に役立つためです([2]の定理6)。欠点は、非常に非効率的であり、適切なソリューションを見つけるためにデータセット全体を何度もループする必要があることです。

ミニバッチ手法は、各勾配の更新に十分なノイズを注入する一方で、比較的迅速な収束を実現する妥協案です。

1 Bottou、L.(2010)。確率的勾配降下による大規模機械学習。COMPSTAT'2010の議事録(pp。177-186)。Physica-Verlag HD。

[2] Ge、R.、Huang、F.、Jin、C。、およびYuan、Y.(2015年6月)。addle点からの脱出テンソル分解のためのオンライン確率勾配 COLTで(pp。797-842)。

編集:

Yann LeCunのfacebookでこのコメントを見たところです。この質問に新しい視点を与えてくれます(fbにリンクする方法はわかりません)。

大きなミニバッチでのトレーニングは健康に悪いです。さらに重要なことは、テストエラーにとっては悪いことです。友人は友人が32レッツ顔にそれをより大きくminibatchesを使用してみましょういけない:唯一の人は、2012年以来、1より大きいが、GPUはバッチの非効率的であるため、ひどい理由ですより小さい32のサイズであるサイズminibatchに切り替えています。それは単にハードウェアがひどいことを意味します。

彼は、数日前(2018年4月)arXivに投稿されたばかりのこの論文を引用しました。

Dominic Masters、Carlo Luschi、ディープニューラルネットワーク向けの小規模バッチトレーニングの再検討、arXiv:1804.07612v1

要約から、

大きなミニバッチを使用すると利用可能な計算並列性が向上しますが、小さなバッチトレーニングは一般化パフォーマンスを向上させることが示されています...

最適なパフォーマンスは、m = 2からm = 32までのミニバッチサイズで一貫して得られています。これは、数千単位のミニバッチサイズの使用を提唱している最近の研究とは対照的です。


2
なぜミニバッチ勾配降下法は、バッチ勾配降下法よりも悪い局所的最小値を避ける可能性が高いのでしょうか?その主張を裏付けるものはありますか?
マーティントーマ

@MartinThoma JMLRに関する最近の論文[2]の定理6を参照してください。
horaceT

2
このペーパーはarXivにも掲載されています。また、これがあなたの主張をどのようにサポートしているかわかりません。彼らはミニバッチ勾配降下についても言及しませんでした。私はその定理を理解していません(たとえば、「g(X)」とは何ですか?どこでその表記法を導入しましたか?統計クラスでは、g(X)= E(X)...しかし、ここではあまり意味がありません) 。とは何ですか?-この定理の記述は、悪い極小値がないことを示唆しているようです。しかし、これは、SGDとバッチ勾配降下、およびミニバッチ勾配降下に当てはまりますか?ϕ(w,X)
マーティントーマ

2
@MartinThoma与えられたデータセットに1つのグローバルミニマムがあるとすると、そのグローバルミニマムへの正確なパスは各GDメソッドの異なるものに依存します。バッチの場合、唯一の確率的側面は初期化時の重みです。同じ初期重みとデータセットを使用してNNを再度トレーニングすると、勾配パスは同じになります。ミニバッチとSGDの場合、パスは、各ステップでトレーニングするためのデータポイントの確率的サンプリングからの各ステップ間で、いくつかの確率的側面を持ちます。これにより、ミニバッチとSGDは、ローカルオプティマが途中にある場合、それらを回避できます。
ウェズリー

8

メモリがありません、あなたがするので、本当にこのようにする理由ができただけでデータセットをご繰り返し処理として、あなたのグラデーションを蓄積し、最後にそれらを適用するが、それでもSGDにあなたはすべてのステップでそれらを適用します。

SGDが広く使用されている理由は次のとおりです。

1)効率。通常、特にトレーニングの初期段階では、データの異なるサブセットのパラメーター勾配は同じ方向を指す傾向があります。したがって、データの1/100で評価された勾配は、完全なデータセットとほぼ同じ一般的な方向を指しますが、計算は1/100で済みます。高度に非線形のディープネットワークでの収束には、勾配がどれほど良好であっても、通常は数千または数百万回の反復が必要になるため、良好な勾配に基づく少数の更新ではなく、勾配の安価な推定に基づいて多くの更新を行うことは理にかなっています。

2)最適化:ノイズの多い更新により、悪いローカルの最適値からバウンスすることができます(実際にはこれが重要であることを示す情報源はありません)。

3)一般化。(Zhang et al:Theory of Deep Learning III:Generalization Properties of SGDを参照)SGDは実際にはトレーニングセットで「フラットな」最小値を見つけることで一般化に役立ちます。テストセットでも最小値になる可能性が高いようです。直観的に、SGDは一種のバギングと考えることができます-データの多くのミニバッチに基づいてパラメーターを計算することにより、ミニバッチ全体に一般化するルールを強化し、そうでないルールをキャンセルすることで、オーバーフィットしにくくなりますトレーニングセット。


3

誤解がない限り、バッチサイズは、トレーニングの反復中にモデルから見られるトレーニングインスタンスの数です。

正しい(ただし、「重み更新ステップ」と呼びます)

また、エポックは、各トレーニングインスタンスがモデルによって認識されたときの完全なターンです

正しい

その場合、各ターンで利用可能なトレーニングインスタンスをすべてモデルに公開することで「最大バッチ」を適用するのとは対照的に、トレーニングインスタンスのほとんど意味のないサブセットを数回反復する利点を見ることができません(もちろん、想い出)。このアプローチの利点は何ですか?

まあ、ほとんどそれ。通常、十分なメモリがありません。画像分類について話しているとしましょう。ImageNetは非常に人気のあるデータセットです。かなり長い間、VGG-16Dは最も人気のあるmod.elsの1つでした。1つの224x224の画像に対して、15個の245 800個のフロート(機能マップ内)を計算する必要があります。これは、画像あたり約61MBを意味します。これは、各画像のトレーニング中に必要なメモリ量の大まかな下限です。ImageNetには、数千(約120万と思う?)の画像が含まれています。メインメモリはそれほど多くないかもしれませんが、GPUメモリはそれほど多くありません。GPUが速度を約21倍高速化するのを見てきました。したがって、GPUを使用することは間違いありません。

また、1つのミニバッチの時間ははるかに短くなります。したがって、質問は次のとおりです。GPUで1時間あたりミニバッチでn個の更新手順を実行するか、GPUを使用しないバッチでm個の更新手順を実行しますか(n >> m)。


それは本当に限られた記憶の問題ではありません。固定モデルパラメーターを使用して、多数のバッチでデータセット全体の勾配を計算することは常に可能です(機能的には、単一の巨大なバッチで勾配を計算するのと同等です)。実際には、SGD / MBGDの確率/ノイズに起因する一般化特性と、収束に到達するために必要なデータセットのエポックが少ないという事実についてです。単一のエポック内でモデルパラメーターを更新すると、より良い中間パラメーターが得られ、エポック内でさらに勾配を計算できるようになります。
マディソン

1

他の答えとは別に、はっきりしているがしばしば結合している2つの量があることを指摘する価値があると思います。

  1. 各ステップでパラメーターの勾配を計算するために使用される入力の数。

他の人が指摘したように、ミニバッチに関する勾配は真の勾配の近似値です。ミニバッチが大きいほど、近似は良くなります。

  1. 配列に収集され、「同時に」計算された入力の数

ここでのトレードオフは、純粋にパフォーマンス(メモリ/サイクル)に関するものです。

通常、これらの数量は同じ、つまりミニバッチサイズですが、原則的には分離できます。

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