モデルが実際にどう学習するか — 普通の勾配降下法からAdamまで
勾配累積は、メモリが限られているときに、より大きなバッチを模倣する手法だ。マイクロバッチのたびに更新するのではなく、複数のマイクロバッチの勾配を足し合わせてから、オプティマイザーのステップを1回だけ実行する。
実効バッチサイズは、マイクロバッチのサイズに累積ステップの回数を掛けたものになる。これにより、小さなGPUでも、あたかもより大きなバッチで訓練しているかのように振る舞わせることができる。
雨水を溜めるバレルが、この発想をよく捉えている。小さなカップ1杯では庭全体に水をやれないので、何杯かをバレルに注ぎ込み、そのバレルにたまった分を使う。勾配累積も、1回の更新の前に、いくつもの小さな勾配の寄与を集めておく。下の図は、まさにこのプロセスそのものだ。新しい項がひとつ加わるたびにカップ1杯分になり、伸びていく棒グラフが、バレルが合計に向かって満ちていく様子を表している。勾配累積とは、勾配の部分和を積み立て、1回のステップとして換金するようなものだ。