SGDトレーニングでの小さいバッチサイズの処理


7

確率的勾配降下法(SGD)を使用して、大規模モデル(カフェを使用したディープネット)をトレーニングしようとしています。
問題は、私がGPUメモリ容量の制約を受けているため、各確率的勾配推定に対して大きなミニバッチを処理できないことです。

トレーニングでこの不安定さを克服するにはどうすればよいですか?

私が考えていたのは、モーメンタムを使用して、デフォルトの通常の設定よりも高い値に設定することでした。これは有効な戦略ですか?


Caffeをたまたま使用している人にとって、Caffeがすでにミニバッチ全体の勾配の累積を実装していることを知るのは興味深いかもしれません(Indie Alによって提案されています)。あなたは、単に定義する必要がiter_size'solver.prototxt'

これはpytorchでも実行できます。たとえば、この投稿を参照してください。


クロスポストしないでください。投稿するサイトを選択して、他のスレッドを削除します。
ガン-モニカの回復

@gung現在、両方のサイトで応答がありません。いずれかのサイトで応答が得られたら、他のサイトから削除します。
Shai

@gungはここでパルスを取得し、SOの元の質問を削除しました。
Shai

回答:


4

バッチサイズが小さい場合、SGDの降下方向は「真の」降下方向の非常にノイズの多い推定になると思います(つまり、トレーニングセット全体で評価した場合)。バッチサイズが小さい場合、非常に騒々しい方向に運動量が蓄積されるため、運動量の増加がどれほど役立つかわかりません。しかし、私は間違っている可能性があります。おそらく、あなたの最適化問題は、これが機能するのに十分な位置にあります。

「最先端の」結果を狙っていない場合、自然な画像データの選択肢の1つは、画像のサイズを変更することです。私は実際、エリートベンチマークパフォーマンスを追跡するモジュロ、自然画像には多くのスケール不変のプロパティがあり、それらのセマンティック機能の多くは、妥当なスケーリング変換の下でかなり堅牢であると思います。これにより、GPUメモリの一部が軽減され、バッチサイズを増やすことができます。SGD降下方向は、降下方向のより良い推定になります。

負の対数尤度のような分離可能な損失関数を扱っている場合、大きなバッチの勾配は、その構成要素であるサブバッチの勾配の合計/平均に過ぎないという事実を利用できます。たとえば、バッチサイズが場合、通常どおりバッチを反復して各バッチの勾配を計算することにより、スーパーバッチサイズ勾配を計算できますが、重みを更新する代わりに、各勾配を実行中の合計または平均にキャッシュします。適切に平均化すると、サイズのスーパーバッチの正確な勾配が計算されます。次に、各番目のバッチが処理された後に、重みの更新を実行します。BBKBKK

上記のように計算をシリアル化することにより、バッチ勾配を正確に計算します。計算やメモリのオーバーヘッドが最小限で済みます。ミニバッチイテレータを変更して、スーパーバッチのシリアル化と勾配キャッシュを含めるだけで済みます。BK


スケーリングできる入力はすべてスケールダウンしました...ミニバッチサイズにダウンしました...
Shai

お返事ありがとうございます。事は、私が本当に「勾配ノイズリダクション」の構成要素としての仕事に勢いの能力に専門家の意見を得ることを目指している
シャイ

ああ、そうですね、そのときは別の可能性を提案するように私の回答を更新しました。まだ試していませんが、うまくいくかもしれません。何がうまくいかないのかを理解しても、それが役に立てば幸いです。
インディーAI

これは興味深いアプローチですが、多くの場合、「後方」勾配を計算するには「前方」情報が必要です。したがって、勾配を推定するために、平均化するすべてのミニバッチを「再転送」する必要があります。これは、トレーニング時間の観点からは実行できません。CPUに移動して、より大きなバッチで同じ速度を取得します。 。
Shai

1
さて、今はもっと理にかなっています。勢いが増しているように聞こえますが、ここの最後の段落を参照してください。「[momentum]は、以前の勾配が現在の更新に組み込まれる反復回数を決定します」
Shai

0

最近私は面白い仕事に出くわしました:

Samuel L. Smith、Pieter-Jan Kindermans、Chris Ying、Quoc V. Le、 学習率を落とさないで、バッチサイズを増やします(ICLR 2018)。

この作品は、バッチサイズと学習率の間の直接リンクを示しています。具体的には、学習率を下げると、バッチサイズを増やすのと同じ効果が得られます。
結論を極端にすると、バッチサイズを減らし、学習率を上げることでそれを補正することを検討できます。
まだ実際に試したことはありません。

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