Градиенты в .grad по умолчанию накапливаются; без обнуления шаг оптимизатора смешает градиенты разных батчей.
Разбор
- В PyTorch часто
set_to_none=True экономит память.
- Gradient accumulation специально пропускает zero_grad несколько шагов.
- Забытый zero_grad — классический баг «loss падает странно».
- Альтернатива:
loss.backward() + ручной сброс.
Итог
zero_grad сбрасывает накопленные градиенты перед новым backward.