Выбор ответа Middle Оптимизаторы и обучение обновлено

Накопление градиентов

Вопрос

Батч 256 не влезает в память, влезает 64. Как эмулировать батч 256?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Накопление градиентов: 4 forward и backward с loss / 4, затем один step() и zerograd(). Градиенты в PyTorch складываются при повторных backward.

Варианты ответа

  1. Уменьшить learning rate в 4 раза, чтобы шаг по батчу 64 был эквивалентен шагу по 256
  2. Накопление градиентов: 4 forward и backward с loss / 4, затем один step() и zero_grad()правильный ответ
  3. Вызывать optimizer.step() после каждого батча 64, но с учетверённым lr, как при батче 256
  4. Это невозможно без большей GPU: батч 256 обязан целиком лежать в памяти

Разбор

Градиенты в PyTorch складываются при повторных backward. Делим loss на число шагов накопления, чтобы получить среднее, как у большого батча, и делаем шаг раз в 4 мини-батча. Отличие только в BatchNorm: его статистики всё равно считаются по 64.

  • Уменьшение lr не равно большему батчу.
  • Частые шаги это уже другой режим обучения.
  • Накопление решает задачу на той же GPU.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме