ミニバッチMini-Batch
データをまとまりに分け一歩ずつ処理する方式
- ミニバッチは、学習データをちょうどよい大きさのまとまりに分け、まとまり一つごとに値を一歩ずつ直す方式です。
- データを一件ずつ見ると判断がばらつき、全部いっぺんに見ると一歩を踏むのに時間がかかりすぎます。その間を取った方式です。
- まとまりの中のデータの結果を平均して一回分の方向を作ります。一件の風変わりなデータに引きずられずに済みます。
- まとまりの大きさはGPUのメモリに載る分が上限です。大きさを増やすとメモリも一緒に増えます。
- 大きさを変えると、ちょうどよい学習率も一緒に変わります。二つは切り離して考えにくいものです。
目次
1たとえで理解する
冬の漬物づくりで、白菜百個をいっぺんに漬けられる樽は家にありません。かといって一個ずつ漬けていたら日が暮れてしまいます。そこで大きなたらいに十個ほど入れて塩をふり、一杯漬けたら空にして次の十個を入れます。
一杯終えるたびに、漬かり具合を手で確かめます。今回の一杯が少ししょっぱくなったなと思えば、次の一杯では塩を少し減らします。十個のうち一個がやけに硬くても、残り九個があるので判断が大きくぶれることはありません。
このたらい一杯がミニバッチです。たらいを使い切れば百個を一周した勘定になり、一杯ごとに一回塩加減を直したので、一周で十回直したことになります。
2くわしく
一個ずつでも、百個いっぺんでもない
データを一件見るたびに値を直すと、一歩は頻繁に踏めますが方向が毎回大きく揺れます。風変わりなデータ一件が方向をまるごと決めてしまうからです。計算の効率も悪くなります。一件ずつ処理すると、複数の計算をまとめて片付ける装置の力をほとんど使えません。
反対にデータ全部を見てから一回だけ直すと、方向はとても正確になります。ただしデータが数百万件あれば一歩を踏むのに長い時間がかかり、そのデータを全部メモリに載せることもできません。
まとまりに分けると、両方の良さを得られます。まとまりの中で平均を取るので方向が大きく揺れず、まとまりが終わるたびに一歩を踏むので進みが速くなります。今日ほぼすべての学習がこの方式で動いています。
まとまりの大きさは何で決めるか
一つ目の基準はメモリです。まとまりの中のデータをいっぺんに計算するには、データも途中の結果もすべて載せておく必要があります。まとまりを二倍に増やせば、必要なメモリもおよそ二倍になります。学習の途中でメモリが足りないというエラーに出会ったとき、まず減らすのがまとまりの大きさです。
二つ目の基準は揺れです。まとまりが小さいと方向が毎回少しずつ変わりますが、この揺れは必ずしも悪いものではありません。中途半端な場所を抜け出す助けになり、新しいデータへの成績がかえって良くなることもあります。まとまりがとても大きいと一歩が滑らかになる代わり、一回の一歩がもったいなくなります。
学習率と一緒に動く
まとまりを大きくすると、一歩の方向がそれだけ信頼できるものになります。だから一歩の幅も少し大きくしてやるのが普通です。まとまりを大きくしたのに学習率をそのままにすると、一周で踏む歩数が減った分だけ学習が遅くなります。
大きなモデルを複数の装置で分けて学習するときは、装置ごとにまとまりを一つずつ受け持って計算し、結果を合わせます。このとき実際のまとまりの大きさは装置の数だけ大きくなるため、学習率と最初の慣らし区間を一緒に手当てしないと、序盤で学習が崩れやすくなります。
残ったデータと混ぜ方
データ件数がまとまりの大きさでちょうど割り切れないと、最後のまとまりだけ小さくなります。この端数をそのまま使うこともあれば、計算の大きさをそろえるために捨てることもあります。一周が終わるとデータをまた混ぜてまとまりを組み直すので、今回の周で外れたデータは次の周には入ります。
まとまりを組むときに一種類だけに偏らないようにすることも大切です。ひとまとまりが全部同じ種類で埋まると、その一歩は一方向にだけ偏ります。データをよく混ぜておくだけで、たいてい解決します。
長さがまちまちな文や大きさの違う写真をまとめるときは、ひとまとまりの中の大きさをそろえる手当てが別に要ります。短い文の後ろを空欄で埋めたり、写真を同じ大きさに切り抜いたりする具合です。この手当てが終わってはじめて、まとまり一つをいっぺんに計算できます。
3もう少し正確に
ミニバッチ学習は、まとまりの中のデータの勾配を平均した値で一回の更新を行う方式です。データ一件ごとに更新する方式と、データ全体で一回更新する方式のあいだにあり、今日「確率的勾配降下法」と呼ばれるものは、たいていこのまとまり方式を指します。まとまりの大きさは計算装置の構造の都合で2の累乗にする慣行があります。メモリが足りないのに大きなまとまりの効果が必要なときは、小さなまとまりをいくつか計算した結果をためておき、一度にまとめて更新する方法も使われます。
たとえがずれる点もあります。漬物のたらいは白菜を実際に分けて入れますが、ミニバッチはデータを複製して分けるのではなく、順番を決めて順に読み込むことに近いものです。また漬かった白菜は次のたらいに影響しませんが、学習では前のまとまりで直した値が次のまとまりの計算にそのまま反映されます。まとまりの順番が結果に影響するという点が、漬物とは違うところです。
4やってみる
5よくある誤解
まとまりが大きいほど学習がうまくいくと思われがちですが、実際にはメモリをより使う代わりに歩数が減り、新しいデータへの成績がかえって落ちることもあります。
まとまりの中のデータを一つずつ順に計算すると考えられがちですが、実際にはいっぺんに計算して平均を取ります。この点が速さの要です。
まとまりの大きさはどんな値でもよいと思われがちですが、実際にはメモリの上限と学習率に一緒に結び付いているので、一つだけ変えると学習が揺れます。
7ひとこと要約
つまりミニバッチはデータをたらい一杯分ほどのまとまりに分けまとまりごとに一歩ずつ直す方式で、その大きさが速さと揺れを一緒に決めます。
誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02