Batch — это порция данных
Batch (батч) — это порция примеров, которую модель обрабатывает за один шаг обучения. Если у тебя 10 000 картинок, а batch_size = 32, то модель учится не на всех сразу, а по 32 штуки за раз. Один такой проход называется шагом (step) или итерацией. Полный проход по всем данным — эпоха (epoch).
Схема простая:
10 000 примеров / batch_size 32 ≈ 313 шагов = 1 эпоха
Что реально меняет batch size
1. Память GPU. Это главное ограничение. Чем больше батч, тем больше тензоров держится в памяти одновременно. Поэтому «просто взять 1024» не выйдет — упрёшься в CUDA out of memory.
2. Скорость обучения. Большой батч → меньше шагов на эпоху → GPU загружен эффективнее. Но не линейно: после определённого размера выигрыш исчезает.
3. Качество и стабильность. Маленький батч (8–32) даёт «шумный» градиент — модель учится нестабильно, но часто лучше обобщает. Большой батч — градиент точнее, обучение глаже, но модель может «застрять» в плохом минимуме и хуже работать на новых данных.
4. Learning rate. Большой батч требует большего learning rate. Классическое правило: увеличил батч в 2 раза — можешь увеличить LR в 2 раза (linear scaling rule). Если этого не делать, обучение с большим батчем идёт медленно и вяло.
Почему нельзя просто поставить 100500
- Память. Упираешься в железо.
- Падение качества. Слишком большой батч даёт меньше обновлений весов за эпоху, и модель учится хуже.
- Плато. После ~512–1024 для многих задач выигрыша почти нет, только минусы.
Как выбирать на практике
- Начни с 32 или 64 — это безопасный дефолт.
- Если влезает в память и обучение идёт — попробуй 128–256 и подними LR.
- Если
out of memory — уменьшай батч или используй gradient accumulation: копишь градиенты с нескольких маленьких батчей и обновляешь веса один раз. Эффект как от большого батча, но памяти ест мало.
- Для тонкой настройки больших моделей часто берут 8–16 из-за нехватки памяти.
Коротко
Batch size — это компромисс между памятью, скоростью и качеством. Маленький — шумно, но часто обобщает лучше. Большой — быстро и гладко, но жрёт память и может испортить качество. 32/64/128 в примерах — просто удобные значения, которые влезают почти на любую видеокарту.
Ответить на вопрос