COMRAD404 / GLOSSARY

Epoch, batch и iteration

Epoch, batch и iteration — базовые единицы цикла обучения модели: полный проход по данным, размер пакета и число шагов обновления весов.

Epoch, batch и iteration — это три разные единицы обучающего цикла. Epoch — один полный проход по обучающему набору, batch — порция примеров, которую модель обрабатывает за раз, iteration — один шаг цикла по одному batch, обычно с одним обновлением весов. Эти термины полезны почти во всех задачах обучения нейросетей, но их нельзя считать универсальными: в потоковом обучении, на бесконечных датасетах, в reinforcement learning, при накоплении градиента и в распределенном обучении число эпох, микропакетов и реальных шагов оптимизатора может расходиться.

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

Если у вас есть набор из 10 000 примеров, вы не обязаны прогонять все 10 000 через модель одновременно. Обычно данные делят на небольшие части.

  • Batch — это одна такая часть. Например, 128 примеров.
  • Iteration — один проход модели по этому batch: прямой проход, расчет ошибки, обратное распространение и шаг оптимизатора.
  • Epoch — момент, когда модель прошла по всему обучающему набору один раз.

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

Если в датасете N примеров, а размер batch равен B, то число итераций в эпохе обычно равно ceil(N / B). Если неполный последний batch отбрасывают, то используют floor(N / B).

Главная практическая ошибка — путать iteration с количеством просмотренных примеров. Iteration считает шаги цикла, а не отдельные объекты.

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

Базовый цикл обучения

  1. Из датасета берут очередной batch.
  2. Модель делает предсказание.
  3. Считается функция потерь.
  4. Градиенты вычисляются обратным распространением.
  5. Оптимизатор обновляет веса.
  6. Счетчик iteration увеличивается на один.
  7. Когда batch в датасете закончились, epoch увеличивается на один.

Именно поэтому iteration обычно ближе всего к понятию training step. Во многих логах фреймворков шаги обучения, шаги оптимизатора и iteration совпадают. Но это не гарантировано.

Что меняет размер batch

Размер batch влияет на три вещи:

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

Крайние случаи тоже полезны для понимания:

  • Если batch_size = N, это обучение по всему датасету за один шаг, то есть full-batch gradient descent.
  • Если batch_size = 1, это по сути стохастическое обучение по одному примеру.

Где возникают расхождения

На практике определения начинают расходиться в более сложных режимах:

  • Gradient accumulation: модель обрабатывает несколько маленьких batch подряд, а оптимизатор делает один шаг позже. Тогда микропакетов больше, чем реальных optimizer step.
  • Distributed training: у каждой GPU может быть свой локальный batch, а суммарный global batch — это сумма по устройствам.
  • Drop last: последний неполный batch иногда отбрасывают. Тогда не все примеры участвуют в каждой эпохе.
  • Resampling и heavy augmentation: формально epoch та же, но фактически модель видит разные версии данных.

Зачем нужно

Понимание этих трех терминов нужно не для теории, а для настройки обучения.

  • Планирование обучения: вы задаете число эпох или число шагов, исходя из размера датасета и бюджета времени.
  • Настройка learning rate schedule: часть расписаний привязана к эпохам, часть — к шагам.
  • Контроль памяти: batch size почти всегда ограничен доступной памятью GPU.
  • Сравнение экспериментов: два запуска с одинаковыми эпохами, но разным batch size, выполняют разное число шагов оптимизатора.
  • Интерпретация логов: loss по шагам и метрики по эпохам отвечают на разные вопросы.

Для практики важен еще один момент: число эпох само по себе мало что говорит о сложности обучения. Одна эпоха на датасете из миллиона примеров и одна эпоха на датасете из десяти тысяч — несопоставимые величины. Поэтому в статьях и репозиториях полезно смотреть сразу на размер набора, batch size, steps per epoch и общее число optimizer step.

Пример

Допустим, вы обучаете классификатор текстов на 10 000 примерах. Размер batch — 128, обучение идет 3 эпохи.

Параметр Значение
Размер датасета 10 000
Batch size 128
Итераций в эпохе ceil(10000 / 128) = 79
Полных batch 78
Последний batch 16 примеров
Epoch 3
Всего iteration 237

Что это означает на практике:

  • За одну эпоху модель увидит весь набор данных один раз.
  • За каждую эпоху оптимизатор выполнит 79 шагов, если последний неполный batch не отбрасывается.
  • За 3 эпохи каждый пример в среднем будет использован 3 раза.

Если же в вашем загрузчике включено отбрасывание неполного последнего batch, то итераций в эпохе будет 78, а 16 примеров на каждой эпохе не попадут в обучение. Это маленькая деталь, но она влияет и на статистику, и на воспроизводимость.

Теперь добавим ограничение памяти. Предположим, batch 128 не помещается в GPU, и вы переходите на batch 32. Тогда одна эпоха будет состоять уже из ceil(10000 / 32) = 313 итераций. Модель делает больше шагов обновления на ту же эпоху, а значит поведение optimizer и расписания learning rate тоже изменится. Поэтому менять batch size без пересчета шагов — частая причина неожиданных результатов.

Заблуждения и ограничения

  • “Чем больше эпох, тем лучше”. Нет. После некоторого момента модель начинает переобучаться, а качество на валидации ухудшается.
  • “Batch — это всегда фиксированное число примеров”. Не обязательно. Последний batch может быть меньше, а в некоторых задачах используют динамические batch по токенам или по длине последовательности.
  • “Iteration всегда равна одному шагу optimizer.step()”. Не всегда. При накоплении градиента несколько микропакетов могут соответствовать одному реальному обновлению весов.
  • “Одна эпоха означает, что модель увидела каждый пример ровно один раз”. Не всегда. Возможны шардирование, повторная выборка, отбрасывание последнего batch, взвешенный sampling и аугментации на лету.
  • “По эпохам удобно сравнивать все эксперименты”. Это слабая метрика сравнения, если размер датасета, batch size или число устройств отличаются.

Есть и случаи, где сама терминология менее полезна:

  • Потоковое обучение, когда данные приходят непрерывно и естественного конца у датасета нет.
  • Синтетические или бесконечные датасеты, где epoch становится условной единицей.
  • Reinforcement learning, где удобнее считать environment steps, episodes или update steps.
  • Full-batch методы, где в одной эпохе может быть всего одна iteration.

Частые вопросы

Чем batch отличается от minibatch?

В разговорной практике почти ничем: словом batch часто называют именно мини-пакет. Строго говоря, batch может означать любую группу примеров, а minibatch подчеркивает, что это только часть всего датасета.

Что считать iteration при накоплении градиента?

Нужно смотреть определение в конкретном коде и логах. В одних проектах iteration — это каждый микропакет, в других — только момент, когда вызывается шаг оптимизатора. Для сравнения экспериментов надежнее явно указывать оба числа.

Как выбрать batch size?

Обычно начинают с размера, который стабильно помещается в память и дает хороший throughput. Дальше проверяют качество на валидации, стабильность градиентов и, при необходимости, корректируют learning rate. Самый большой batch не всегда лучший.

Почему число шагов в логах не равно N / batch_size?

Потому что может быть неполный последний batch, отбрасывание последнего batch, распределенное обучение, повторная выборка, ограничение steps_per_epoch или накопление градиента.

Можно ли обучаться вообще без эпох?

Да. В потоковых сценариях часто фиксируют не число эпох, а число шагов, время обучения или число обработанных примеров.

Связанные понятия

  • Training step — один шаг обучающего цикла; часто близок к iteration.
  • Optimizer step — момент обновления параметров модели.
  • Mini-batch gradient descent — режим оптимизации, где градиент оценивается по части датасета.
  • Learning rate schedule — правило изменения скорости обучения по эпохам или по шагам.
  • Gradient accumulation — накопление градиентов по нескольким микропакетам перед одним обновлением весов.
  • DataLoader — механизм выдачи batch из датасета.
  • Shuffle — перемешивание порядка примеров между эпохами.
  • Global batch size — суммарный batch на всех устройствах в распределенном обучении.

Если нужен короткий ориентир для практики, пользуйтесь таким правилом: epoch отвечает на вопрос «сколько раз прошли по данным», batch — «сколько примеров берем за раз», iteration — «сколько шагов цикла сделали». Но для точного сравнения экспериментов всегда уточняйте, что именно считается шагом и как устроен загрузчик данных.

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

LINKS