跳到主要内容

前向自动微分

阐述

自动微分中从输入变量开始,依次计算各个中间变量对输入变量的导数,从而逐渐推出输出对输入变量的导数。

实现(基于运算符重载)

给定函数 f:RnRmf:\mathbb R^n\to\mathbb R^m,定义多个基元 t=(t1,,tn)Tt=(t_1,\cdots,t_n)^T 是具有性质 ti2=titj=0t_i^2=t_it_j=0 的代数系统,则该系统的原语为

α(x+aiti)=α(x)+α(x)aiti\alpha(x+a_it_i)=\alpha(x)+\alpha'(x)a_it_i β(x+aiti,y+biti)=β(x,y)+βxaiti+βybiti\beta(x+a_it_i,y+b_it_i)=\beta(x,y)+\beta_xa_it_i+\beta_yb_it_i

等等。在给定点 x0x_0, 计算 f(x0+t)f(x_0+t) 得到 y0+citiy_0+c_it_i,则 cic_i 就是对应于 xix_i 的偏导数。

特别地,对于方向导数来说,在方向 vv 上的导数可以直接用 f(x+vt1)f(x+vt_1) 计算出来。

前向自动微分的高阶推广称为 高阶前向自动微分

实例

性质

前向自动微分和 jvp

若函数 f(x)f(x) 的输入为 vv,输出为 ww,则

wi=jfixjvjw_i=\sum_j\frac{\partial f_i}{\partial x_j}v_j

这等价于用处于该点的 Jacobian 矩阵来乘向量 vv,即 w=Jvw=Jv

相关内容

参考文献