[Пост на Love. Death. Transformers. ]
TL;DR - наивное усреднение батчей при gradient accumulation приводит к тому, что результат отличается от того, чтобы прогнать за один шаг большой батч. Причем, как утверждают авторы, лосс всегда больше. В стандартном способе вычисления кросс-энтропии есть деление на длину последовательности, и если они разные в разных микробатчах - результат усреднения будет не такой, как лосс на суммарном батче. Потому предлагается избавлятьcя от усреднения.
Утверждение про то, что лосс при naive gradient accumulation больше, вообще говоря, неверно. В конце блога авторы доказывают, что лосс при наивном gradient accumulation больше и в доказательстве делают внезапный 😱 переход от лосса по микробатчам к среднему лоссу по батчу.
Можно подобрать контрпример. Пусть на первом батче лосс L_1 = 1, и в батче 4 токена, а на втором батче L_2=9 и 6 токенов.
Тогда усредненный лосс на всем батче:
(1 + 9) / (4 + 6) = 1А при наивном gradient_accumulation:
1/2(1/4 + 9/6) = 0.875 (то есть меньше)