Ответ
При увеличении размера батча (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)
Важные нюансы:
- Это правило хорошо работает для SGD и его модификаций (например, SGD с моментом) в широком диапазоне размеров батча.
- Для очень больших батчей (тысячи и более) часто требуется дополнительная техника warmup — плавное увеличение LR от малого значения до целевого в начале обучения, чтобы стабилизировать процесс.
- Это правило — хорошая отправная точка, но окончательный LR всегда требует валидации и тонкой настройки под конкретную задачу и архитектуру.