Выбор ответа Middle Цепное правило и autodiff обновлено
Переменная в двух ветках
Вопрос
Переменная x используется в графе дважды: a = 2x и b = x². Как получить ∂L/∂x?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Сложить вклады по обеим веткам: ∂L/∂a·2 + ∂L/∂b·2x. Многомерное цепное правило: если x влияет на L через несколько путей, вклады путей суммируются.
Варианты ответа
- Взять вклад только той ветки, что идёт к L короче
- Перемножить вклады веток: ∂L/∂a·2 · ∂L/∂b·2x
- Сложить вклады по обеим веткам: ∂L/∂a·2 + ∂L/∂b·2xправильный ответ
- Взять максимум из двух вкладов, как в узле max
Разбор
Многомерное цепное правило: если x влияет на L через несколько путей, вклады путей суммируются. Поэтому в autograd градиенты листьев накапливаются (и поэтому в PyTorch их надо обнулять между шагами).
- Длина пути роли не играет, считаются все пути.
- Произведение получилось бы для цепочки последовательных функций, а здесь ветки параллельны.
- Максимум это правило узла max, а не разветвления.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.