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

09.3 Чувствительность одного действия

На предыдущей странице: сначала получаем значения.

Разберём только одно умножение или сложение. Их местные правила понадобятся для всей длинной цепи.

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

Маленькие правила вместо одной огромной формулы

Для c=a+b локальные производные по обоим операндам равны1. Для c=ab они равны b и a. Для c=tanh(a) derivative равна1−c². Для ReLU используется1 приa>0,0 приa<0; в0 выбран0 как соглашение, а не классическая производная.

В L=z*z каждый из двух входов mul имеет local derivative z=7. Это два ребра к одному узлу; суммарный эффект14. Если превратить operands в set и передать вклад только один раз, gradient будет вдвое меньше.

aˉ+=cˉ∂c∂a,bˉ+=cˉ∂c∂b.\bar a\mathrel{+}=\bar c\frac{\partial c}{\partial a},\qquad \bar b\mathrel{+}=\bar c\frac{\partial c}{\partial b}.

Черта обозначает derivative выбранного output L по узлу, не его forward value. Incoming gradient масштабирует local derivative, затем contribution добавляется к уже накопленному результату.

Эксперимент. Выберите шаг mul и сопоставьте operand, local derivative, incoming gradient и contribution. У add local derivative1 не означает, что gradient его родителя обязательно1: учитывается вся цепочка после этого узла.

Легко ошибиться. Удобный визуализатор не может подставлять одинаковую derivative1 для всех типов операций. Любой новый примитив требует своего локального правила и проверки численной разностью.

z=7
grad_z=0
grad_z+=1*z
grad_z+=1*z
assert grad_z==14

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

Второй множитель задаёт локальную чувствительность.

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

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