Может показаться, что размер батча стоит просто сделать как можно больше до такой степени, пока будет влезать в доступную память, - и тогда каждый шаг обучения становится мощнее с точки зрения импакта на параметры.
Но давайте посмотрим на это чуть ближе. Для обучения можно определить две независимые оси, по которым нужно проводить оптимизации:
Число шагов - это мера серийного время. Каждый шаг идеи строго один за другим, и этот процесс не параллелится. Чем меньше таких шагов, тем быстрее в абсолюте мы можем обучить модель.
Тотальное количество обработанных примеров - это суммарный компьют, получается из размер батча × число шагов.
Каждый пример, прогнанный через модель, стоит каких-то вычислений (FLOPs). Меньше примеров в батче, меньше сожженного компьюта.
И тут мы приходим к следующим трейд-оффам.
Если размер батча большой:
Если размер батча маленький, то
И рыбку съесть, и на хуй залезть не получается.
Тут важно понимать, что оси, которые мы рассматриваем, не приводимы. Можно попробовать сказать и там, и там что-то тратится, это все - какое-то время, а значит - какие-то вычисления и какой-то компьют, но это не так.
Давайте чуть подробнее:
Компьют покупается, а шаги - нет. Даже с бесконечными картами каждый шаг ждет предыдущий. Число обновлений весов до нужного качества является неустранимой последовательностью.