COMRAD404 / GLOSSARY

Размер батча (Batch size)

batch size

Batch size — число примеров в одном шаге обучения. Объясняем, как он влияет на память, скорость, последний батч и global batch size в distributed training.

TL;DR

Количество примеров в одном батче; в distributed training важно различать per-replica и global batch size.

Batch size — это число примеров, которые модель обрабатывает как один батч при обучении или подготовке входного потока. В distributed training этот термин нужно читать аккуратно: иногда имеется в виду batch size на одну реплику, а иногда — global batch size.

Английский термин: batch size. Также встречается: размер батча, размер мини-батча; в distributed training — per-replica batch size и global batch size.

Практический вывод: batch size — это не «лучшее число по умолчанию», а рабочий компромисс между памятью, скоростью и тем, как часто вы обновляете веса.

Простыми словами

Можно представить датасет как большую стопку карточек. Batch size говорит, сколько карточек вы берёте за один раз, прежде чем сделать один шаг обучения. Если карточек берёте больше, шагов будет меньше; если меньше — шагов будет больше.

Для вас это означает простую вещь: batch size влияет на то, как быстро идёт обучение, сколько памяти нужно на устройство и будет ли последний «кусок» данных полным.

Как это работает

В типичном пайплайне данные сначала разбиваются на группы фиксированного размера, затем модель обрабатывает каждый батч и после этого делает один шаг оптимизатора. В PyTorch DataLoader по умолчанию использует batch_size=1; если вы задаёте число больше 1, он начинает отдавать уже сгруппированные примеры. В Keras Model.fit() нарезает входные данные на батчи и проходит по датасету в каждом epoch.

датасет
  ↓
разбиение на батчи по N примеров
  ↓
forward pass + backward pass
  ↓
шаг оптимизатора
  ↓
следующий батч

Если примеров не хватает на последний полный батч, фреймворк может либо оставить его короче, либо отбросить. В TensorFlow Dataset.batch(batch_size, drop_remainder=False) оставляет короткий хвост, а drop_remainder=True убирает его и помогает сохранить статические формы. В PyTorch аналогичную роль играет drop_last=True.

В распределённом обучении важно различать размер батча на одну реплику и общий размер батча. По документации TensorFlow: GLOBAL_BATCH_SIZE = BATCH_SIZE_PER_REPLICA * num_replicas_in_sync.

Где применяется

  • В PyTorch — когда вы настраиваете загрузчик данных и хотите получать батчи, а не отдельные примеры.
  • В Keras — когда Model.fit(), evaluate() и predict() работают с входными данными порциями фиксированного размера.
  • В TensorFlow — когда вы собираете входной пайплайн через Dataset.batch() и контролируете последний батч через drop_remainder.
  • В distributed training — когда один и тот же batch делится между несколькими устройствами, а вы считаете global batch size.

Практический пример

Ниже — простой пример на PyTorch. Он показывает, как batch_size и drop_last меняют поведение загрузчика.

from torch.utils.data import DataLoader, TensorDataset
import torch

x = torch.arange(10).float().unsqueeze(1)
y = x * 2
dataset = TensorDataset(x, y)

loader = DataLoader(dataset, batch_size=4, drop_last=True)

for step, (batch_x, batch_y) in enumerate(loader, start=1):
    print(step, batch_x.squeeze().tolist())

Смысл такой: вы группируете 10 примеров по 4. Без drop_last последний батч был бы короче; с drop_last=True неполный хвост не попадёт в обучение. Это удобно, если вам важны одинаковые размеры батчей на всех шагах.

Чем отличается от epoch и iteration

Термин Что означает Где чаще путают
Batch size Сколько примеров входит в один батч С числом шагов обучения или размером датасета
Epoch Один полный проход по датасету С количеством батчей в одном шаге
Iteration Один шаг обучения, обычно после одного батча С эпохой или с количеством примеров
Global batch size Суммарный батч по всем репликам/устройствам С batch size на одно устройство

Важно: в PyTorch BatchSampler не задаёт размер напрямую, а группирует индексы в мини-батчи. Это отдельный уровень логики, который влияет на то, какие примеры попадут в один батч.

Ограничения и заблуждения

  • Заблуждение: batch size — это размер всего датасета. На самом деле: это размер одной порции, а не всей выборки.
  • Заблуждение: последний батч всегда такой же, как остальные. На самом деле: он может быть короче, если вы не используете drop_last/drop_remainder.
  • Заблуждение: в distributed training batch size всегда один и тот же термин. На самом деле: нужно отдельно смотреть на per-replica и global batch size.
  • Заблуждение: чем больше batch size, тем лучше. На самом деле: Google Research показал, что в некоторых настройках увеличение batch size может сохранить learning curves при меньшем числе обновлений, но это не универсальное правило.

Редакционная оговорка: если вы сравниваете два запуска, фиксируйте не только batch size, но и то, как именно ваш фреймворк трактует последний батч и распределение по устройствам. Иначе сравнение будет неточным.

Связанные термины и материалы

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

Источники

Вопросы и ответы

Batch size и batch sampler — это одно и то же?

Нет. Batch size задаёт, сколько примеров входит в один батч. BatchSampler в PyTorch группирует индексы в мини-батчи и работает на другом уровне.

Почему последний батч иногда меньше остальных?

Потому что размер датасета не всегда делится на batch size без остатка. В TensorFlow это зависит от drop_remainder, а в PyTorch — от drop_last.

Какой batch size использовать в распределённом обучении?

Смотрите отдельно на batch size на реплику и на global batch size. В TensorFlow global batch size вычисляется как batch size на реплику, умноженный на число синхронных реплик.

Можно ли просто увеличить batch size вместо изменения learning rate?

Не всегда. В источнике Google Research это показано для некоторых настроек, но такое поведение нельзя считать универсальным правилом для всех моделей и датасетов.

Источники

SOURCES

Вопросы и ответы

FAQ
Batch size и batch sampler — это одно и то же?

Нет. Batch size задаёт, сколько примеров входит в один батч. BatchSampler в PyTorch группирует индексы в мини-батчи и работает на другом уровне.

Почему последний батч иногда меньше остальных?

Потому что размер датасета не всегда делится на batch size без остатка. В TensorFlow это зависит от drop_remainder, а в PyTorch — от drop_last.

Какой batch size использовать в распределённом обучении?

Смотрите отдельно на batch size на реплику и на global batch size. В TensorFlow global batch size вычисляется как batch size на реплику, умноженный на число синхронных реплик.

Можно ли просто увеличить batch size вместо изменения learning rate?

Не всегда. В источнике Google Research это показано для некоторых настроек, но такое поведение нельзя считать универсальным правилом для всех моделей и датасетов.

Читайте также

LINKS