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 считает шаги цикла, а не отдельные объекты.
Как это работает
Базовый цикл обучения
- Из датасета берут очередной batch.
- Модель делает предсказание.
- Считается функция потерь.
- Градиенты вычисляются обратным распространением.
- Оптимизатор обновляет веса.
- Счетчик iteration увеличивается на один.
- Когда 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 — «сколько шагов цикла сделали». Но для точного сравнения экспериментов всегда уточняйте, что именно считается шагом и как устроен загрузчик данных.