На предыдущей странице: собираем чувствительности в вектор.
Одна строка чувствительности на каждый выход
Если F:Rn→Rm, результат имеет несколько компонент, поэтому одного gradient-вектора недостаточно. В курсе используется соглашение
JF(x)∈Rm×n,(JF)ij=∂xj∂Fi.
Строка относится к одному выходу, столбец — к одному входу. Некоторые источники используют транспонированный layout; формулы корректны только после явного объявления соглашения.
Для
F(x,y)=[x2xy]
получаем
JF(x,y)=[2xy0x].
В точке z=[2,1]T:
F(z)=[4,2]T,JF(z)=[4102].
Первый столбец [4,1]T описывает изменение обоих выходов при движении входа по x; второй [0,2]T — при движении по y.
Jacobian является локальной матрицей преобразования
Для малого δ
F(z+δ)≈F(z)+JF(z)δ.
При δ=[0.1,−0.2]T:
Jδ=[4102][0.1−0.2]=[0.4−0.3].
Линейное предсказание равно [4.4,1.7]T, а точный выход
F(2.1,0.8)=[4.41,1.68]T.
Ошибка [0.01,−0.02]T состоит из членов второго порядка: δx2 и δxδy.
Forward и backward используют разные произведения
Произведение Jδ переносит малое изменение входа вперёд и имеет shape [m,1]. Теперь пусть скалярный loss зависит от F, а upstream gradient равен
gF=∇FL∈Rm×1.
Chain rule даёт gradient по входу:
gz=JTgF,[n,m][m,1]=[n,1].
Например, при gF=[1,−2]T:
JTgF=[4012][1−2]=[2−4].
Это сумма вкладов всех выходных путей к каждому входу. Транспонирование появляется из согласования shapes и скалярного дифференциала:
dL=gFTdF=gFTJdz=(JTgF)Tdz.
В больших системах полный Jacobian часто не материализуют. Forward-mode вычисляет Jacobian-vector product Jv, reverse-mode — vector-Jacobian product uTJ, эквивалентный JTu в столбцовой записи. Это разные способы применить ту же производную, а не разные определения.
В лаборатории меняйте x и y отдельно. Нулевой элемент J01=0 означает, что первый выход локально не зависит от y, но не отменяет существование второго выхода.