自动微分的基础是,根据复合函数求导法则来合并微分值。以 为例,根据复合函数求导法则,我们有:
-
通常有两个不同的模式:“前向积累”(或“前向模式”)和“反向积累”(或反向模式)。
前向积累由右到左地使用复合函数求导法则,即先计算 ,然后才 。
反向积累则是由左到右。
前向积累
前向积累式的自动微分是最容易理解和实作的。
这个函数是可被电脑(或程序员)
解释成一连串对变数 的运算。
前向积累式自动微分的工具则会增加相对应的作用于第二项上的运算。
原本程式码叙述
|
为导数而新增的叙述
|
---|
|
(种子)
|
|
(种子)
|
|
|
|
|
|
|
计算 的导数需要初始化,
以区别是要对 或 来求导数。
上述表格则以 和 来初始化,
并且我们可以看到其结果 正是对 的导数。
注意,虽然表格列出了符号微分,
但以电脑的角度而言,电脑总是储存数值。图2则以图形表明上述的叙述。
为了计算这个例子的导数,其分别为 和 ,
需要计算两次,一次是以 和 做初始值,
另一次则以 和 做为初始值。
前向积累的计算复杂度则正比于原来程式的计算复杂度。
对于函数 且 来说,
前向积累只要计算一次,优于需要计算 m 次的反向积累。
反向积累
前向式积累自动微分可借由扩充实数中的代数并得到一个新的算术系统来达成。
每一个数都会新增另一数,用来表示一函数在这数上导数的数。
而每一个算术运算都被扩充于此新的代数。
这个扩充后的代数就是二元数的代数。
将每一个数 替换成数 ,其中 是一个实数,但 则只是一个据有 这个特性的符号。
使用这特性,我们可以有运算
-
-
减法和除法则类似。
现在,我们可以计算多项式。
如果 ,则
|
|
|
|
|
|
|
|
|
|
|
|
其中 表示 对第一个参数的导数。
而 则称作“种子”,可以任意选择。
新的算术是由有序对、写成
及对第一项的运算和对第二项的第一阶微分运算所组成。
将上述结果应用于多项式的解析函数上,
我们可以得到一系列关于基本算术和一些标准函数的新算术:
-
-
-
-
-
-
-
-
-
-
并且,一般而言,对于一个函数 ,我们会有
-
其中 和 分别是 对其第一项和第二项的导数。
对一个二元算术运算作用于混合的参数时(数对 和实数 ),
实数会先被转成 。
函数 在 上的导数
则为以上述算术计算 ,其结果为 。
向量参数和函数
借由采取方向导数的运算,
多变数函数也可以同单变数函数的效率和机制来处理。
亦即,函数 在 这点,
和 这个方向上的方向导数 ,
可以使用上述相同的算术来计算
而求得。
更高阶微分
以上的算术可以被一般化,以用于二阶及三阶导数。
然而,此算术的规则将会迅速变得复杂。
其复杂度将与最高阶导数阶数成平化。
取而代之的是使用限缩泰勒级数。
这是可行的,因为函数的泰勒级数中的通项为己知系数和函数导数的乘积。
使用自动微分来计算黑塞矩阵在某些最佳化已被证明是可行的。