前向自动微分
前向自动微分既不是数值微分,也不是符号微分,但在某些方面,它是他们的爱情结晶。它依赖对偶数。对偶数是奇怪但迷人的,是 形式的数,这里a
和b
是实数, 是无穷小的数,满足 ,但 。你可以认为对偶数 类似于有着无穷个 0 的 42.0000⋯000024(但当然这是简化后的,仅仅给你对偶数什么的想法)。一个对偶数在内存中表示为一个浮点数对,例如, 表示为(42.0, 24.0)
。
对偶数可相加、相乘、等等操作,正如公式 D-3 所示。
最重要的,可证明h(a + bϵ) = h(a) + b × h'(a)ϵ
,所以计算一次h(a + ϵ)
就得到了两个值h(a)
和h'(a)
。图 D-2 展示了前向自动微分如何计算 关于x
,在 处的导数。我们所要做的一切只是计算 ;它将输出一个对偶数,其第一部分等于 ,第二部分等于 。
为了计算 我们不得不再遍历一遍计算图,但这次前馈的值为 。
所以前向自动微分比数值微分准确得多,但它遭受同样的缺陷:如果有 1000 个参数,那为了计算所有的偏导数,得历经计算图 1000 次。这正是反向自动微分耀眼的地方:计算所有的偏导数,它只需要遍历计算图 2 次。