alterna ai
ALTERNA AI / ГЛАВА 09 · 05

09.5 Один вес используется несколько раз

На предыдущей странице: от одной ошибки ко всем весам.

Каждый путь вносит свой вклад. Их нужно сложить, а не переписать последним результатом.

Сохраним зависимости выполненных действий и пройдём от ошибки назад. Вклады разных путей к общему весу складываются. Это автоматическое дифференцирование, а не новый способ угадывать направление.

Один узел используется дважды

Пусть u=x²,L=u+u,x=2. Forward даёт u=4,L=8. Add передаёт в grad(u) два вклада1, итого2. Затем квадрат передаёт grad(x)=2×2x=8. При перезаписи grad(u)=1 вместо += получится4: forward останется правильным, backward сломается.

dLdx=(1+1)dudx=2⋅2x.\frac{dL}{dx}=(1+1)\frac{du}{dx}=2\cdot2x.

Topological sort посещает каждый узел один раз, а edges сохраняют кратность. Удалять повторные contributions нельзя. В batch MLP общий параметр тоже влияет на несколько примеров; его gradient суммирует все эти пути с учётом усреднения loss.

Исследовать. Создайте L=(x+x)*(x+x). Сравните вариант с общим u=x+x и вариант с разными u,v, содержащими одинаковые выражения. Правильная derivative8x совпадёт, хотя число операций различается.

Повторный backward. Некоторые frameworks накапливают gradients между batches. Наш engine перед полным backward обнуляет все достижимые узлы: второй вызов повторяет результат, не удваивает его. Это явное соглашение учебной реализации, не универсальный контракт PyTorch.

x=2
u=x*x
grad_u=1+1
grad_x=grad_u*x+grad_u*x
assert u+u==8 and grad_x==8

Код повторяет только что разобранные операции. Полный проверяемыйPython-пример главы доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.

Nodes обходятся один раз, но кратность edges сохраняется.

Программа вычисляет производные. Как этот вопрос продолжает полученный результат?

Python-примеры главы 09 Академическая база →