От одного output ко многим inputs
Начинаем с dL/dL=1, остальные gradients обнуляем. Обход идёт в обратном топологическом порядке. Для скалярного L так можно получить производные по многим параметрам одним обратным проходом. N03.
| Обработанный узел | Incoming gradient | Вклады |
|---|---|---|
| L=z*z | 1 | z:7+7=14 |
| z=a+b | 14 | a:14,b:14 |
| a=x*w | 14 | x:14×3=42,w:14×2=28 |
Независимый символический расчёт L=(xw+b)² даёт ∂L/∂x=2(xw+b)w=42, ∂L/∂w=2(xw+b)x=28, ∂L/∂b=2(xw+b)=14.
Эксперимент. Остановитесь перед обработкой a: grad(a) уже готов, grad(x) ещё не получил вклад через a. Один следующий шаг передаст эту чувствительность. Кнопка «Назад» восстанавливает snapshot, а не выполняет обратный optimizer.
Граница. Reverse-mode не обращает функцию: он не восстанавливает input по output. Derivative можно вычислять и для необратимых преобразований. После backward исходные w=3,b=1 ещё не обновлены. Для обучения требуется отдельный update, использующий gradients выбранных параметров одновременно.