自动微分的简单本质

第1章 引论

第2章 什么是导数?

既然自动微分 (AD) 和计算导数有关, 让我们以考虑什么是导数开始. 如果你所接受的入门性微积分课程和我差不多的话, 那么你会学到一个函数f::在一个点x处 (要求其在f的定义域之中) 的导数f(x)是一个数字, 定义如下:(1)f(x)=limε0f(x+ε)f(x)ε(1)也就是说, f(x)告诉了我们fx处对于输入变化的缩放有多快.

这个定义对于类型之外的函数有多适用呢? 复数情形 () 表现良好, 其中除法也有定义. 扩展至n的情形也能成立, 如果我们以通常的方式解释一个(n中的)向量除以一个标量. 然而, 如果我们扩展至mn的情形, 或者甚至只是m, 这个定义就不再适用了, 因为其依赖于除以一个向量ε::m.

这种非标量定义域上的微分的困难通常以相对于mm个标量分量的偏导数的概念解决, 经常记作f/xj, 其中j{1,,m}. 当n也是一个非标量时, 即n>1, 那么我们就有了一个矩阵J (Jacobi矩阵), 其中Ji,j=fi/xj而每个fi是函数f的第i投影, 其由取f的结果的第i个分量得到. {译注: 然而, 即便n=1, 我们得到的也是一个矩阵, 只不过是1×m的矩阵而已.}

到目前为止, 我们已经看到了一个函数的导数可以是一个数字 (), 一个向量 (n), 一个矩阵(mn). 而且, 每种情形都有与之相伴的链式规则, 其说明了该如何对于函数的复合进行微分. 标量链式规则牵涉将两个标量导数相乘, 而向量链式规则牵涉将两个矩阵AB (Jacobi矩阵) 相乘, 其定义如下:(AB)i,j=k=1mAi,kBk,j既然我们可以将标量视为向量的特殊情形, 那么标量乘法也可以是为矩阵乘法的特殊情形, 或许我们已经抵达了所需的一般性. 然而, 当我们将注意力转向高阶导数的时候, 即导数的导数, 情况就变得复杂起来了, 我们需要更高维度的表示, 以及相应的更加复杂的链式规则.

幸运的是,

第3章 微分的规则

第3.1节 顺序复合

第3.2节 并行复合

第3.3节 线性函数

第4章 将碎片拼在一起

第4.1节 范畴

第4.2节 幺半范畴

第4.3节 笛卡尔范畴

第4.4节 余笛卡尔范畴