Выбор ответа Middle Оптимизаторы и обучение обновлено
Накопление градиентов
Вопрос
Батч 256 не влезает в память, влезает 64. Как эмулировать батч 256?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Накопление градиентов: 4 forward и backward с loss / 4, затем один step() и zerograd(). Градиенты в PyTorch складываются при повторных backward.
Варианты ответа
- Уменьшить learning rate в 4 раза, чтобы шаг по батчу 64 был эквивалентен шагу по 256
- Накопление градиентов: 4 forward и backward с loss / 4, затем один step() и zero_grad()правильный ответ
- Вызывать optimizer.step() после каждого батча 64, но с учетверённым lr, как при батче 256
- Это невозможно без большей GPU: батч 256 обязан целиком лежать в памяти
Разбор
Градиенты в PyTorch складываются при повторных backward. Делим loss на число шагов накопления, чтобы получить среднее, как у большого батча, и делаем шаг раз в 4 мини-батча. Отличие только в BatchNorm: его статистики всё равно считаются по 64.
- Уменьшение lr не равно большему батчу.
- Частые шаги это уже другой режим обучения.
- Накопление решает задачу на той же GPU.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.