Выбор ответа Middle Цепное правило и autodiff обновлено

Переменная в двух ветках

Вопрос

Переменная x используется в графе дважды: a = 2x и b = x². Как получить ∂L/∂x?

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

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

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

Коротко

Правильный ответ: Сложить вклады по обеим веткам: ∂L/∂a·2 + ∂L/∂b·2x. Многомерное цепное правило: если x влияет на L через несколько путей, вклады путей суммируются.

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

  1. Взять вклад только той ветки, что идёт к L короче
  2. Перемножить вклады веток: ∂L/∂a·2 · ∂L/∂b·2x
  3. Сложить вклады по обеим веткам: ∂L/∂a·2 + ∂L/∂b·2xправильный ответ
  4. Взять максимум из двух вкладов, как в узле max

Разбор

Многомерное цепное правило: если x влияет на L через несколько путей, вклады путей суммируются. Поэтому в autograd градиенты листьев накапливаются (и поэтому в PyTorch их надо обнулять между шагами).

  • Длина пути роли не играет, считаются все пути.
  • Произведение получилось бы для цепочки последовательных функций, а здесь ветки параллельны.
  • Максимум это правило узла max, а не разветвления.

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

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