Может показаться, что размер батча стоит просто сделать как можно больше до такой степени, пока будет влезать в доступную память, - и тогда каждый шаг обучения становится мощнее с точки зрения импакта на параметры.

Но давайте посмотрим на это чуть ближе. Для обучения можно определить две независимые оси, по которым нужно проводить оптимизации:

Число шагов - это мера серийного время. Каждый шаг идеи строго один за другим, и этот процесс не параллелится. Чем меньше таких шагов, тем быстрее в абсолюте мы можем обучить модель.

Тотальное количество обработанных примеров - это суммарный компьют, получается из размер батча × число шагов.

Каждый пример, прогнанный через модель, стоит каких-то вычислений (FLOPs). Меньше примеров в батче, меньше сожженного компьюта.

И тут мы приходим к следующим трейд-оффам.

Если размер батча большой:

Если размер батча маленький, то

И рыбку съесть, и на хуй залезть не получается.

Тут важно понимать, что оси, которые мы рассматриваем, не приводимы. Можно попробовать сказать и там, и там что-то тратится, это все - какое-то время, а значит - какие-то вычисления и какой-то компьют, но это не так.

Давайте чуть подробнее:

Компьют покупается, а шаги - нет. Даже с бесконечными картами каждый шаг ждет предыдущий. Число обновлений весов до нужного качества является неустранимой последовательностью.