Выбор ответа Junior PyTorch на практике спрашивают часто обновлено

Зачем zero_grad

Вопрос

Что будет, если в цикле обучения забыть optimizer.zero_grad()?

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

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

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

Коротко

Правильный ответ: Градиенты будут складываться с предыдущими шагами, и обновления станут неверными. В PyTorch backward прибавляет градиенты к .grad.

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

  1. Градиенты будут складываться с предыдущими шагами, и обновления станут невернымиправильный ответ
  2. Модель не сможет вычислить forward, пока в .grad лежат старые значения
  3. PyTorch бросит исключение при следующем loss.backward() о повторном графе
  4. Ничего: градиенты обнуляются автоматически после каждого вызова optimizer.step()

Разбор

В PyTorch backward прибавляет градиенты к .grad. Это удобно для накопления, но в обычном цикле градиенты надо обнулять перед каждым backward (или после step). По умолчанию zero_grad ставит .grad в None.

  • Forward от этого не зависит.
  • Исключения не будет, ошибка тихая.
  • step() градиенты не обнуляет.

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

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