Что нужно сделать с learning rate при увеличении размера batch?

«Что нужно сделать с learning rate при увеличении размера batch?» — вопрос из категории Нейронные сети и Deep Learning, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

При увеличении размера батча (batch size) learning rate (LR) обычно следует пропорционально увеличить.

Причина: Больший батч дает более точную (менее шумную) оценку градиента функции потерь. Поскольку шум в оценке градиента уменьшается, мы можем позволить себе делать более крупные и уверенные шаги в направлении антиградиента, не рискуя расходимостью из-за шума.

Эмпирическое правило (linear scaling rule): Новый LR = Базовый LR * (Новый размер батча / Базовый размер батча)

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

import torch
import torch.nn as nn

# Исходные параметры
base_batch_size = 32
base_lr = 0.01

# Новые параметры
new_batch_size = 256
scaled_lr = base_lr * (new_batch_size / base_batch_size)  # 0.08

model = nn.Linear(10, 1)
optimizer = torch.optim.SGD(model.parameters(), lr=scaled_lr)

Важные нюансы:

  1. Это правило хорошо работает для SGD и его модификаций (например, SGD с моментом) в широком диапазоне размеров батча.
  2. Для очень больших батчей (тысячи и более) часто требуется дополнительная техника warmup — плавное увеличение LR от малого значения до целевого в начале обучения, чтобы стабилизировать процесс.
  3. Это правило — хорошая отправная точка, но окончательный LR всегда требует валидации и тонкой настройки под конкретную задачу и архитектуру.