数学的微分与函数式自动微分
对于一元函数 y=f(x),在点 x0 处的微分定义为: dy=f′(x0)Δx
在几何上,微分描述了函数图像上某一点附近的小段曲线与通过该点的切线的近似程度。对于函数y=f(x)在点x0处,微分dy可以看作是当x从x0增加到x0+Δx(其中Δx是一个很小的增量)时,函数值y的增量Δy的近似值。
函数式自动微分是一种通过计算机程序自动计算函数导数数值的方法。它的基本原理是导数运算法则。自动微分主要解决的问题是将一个复杂的数学运算分解为一系列简单的基本运算,该功能对用户屏蔽了大量的求导细节和过程,大大降低了框架的使用门槛。
函数与计算
函数式自动微分通过构建一个计算图来表示数学表达式的计算过程。这个图由节点和边组成,其中节点代表操作(如加法、乘法等),边代表操作之间的数据流向(即哪个操作的输出是另一个操作的输入)。
计算图如下
在函数式自动微分中,计算图被设计为无副作用的(即不修改外部状态),并且通常是纯函数式的。这意味着每个节点都可以独立于其他节点进行计算,且每次计算都产生相同的结果(给定相同的输入的情况下)。这种特性使得函数式自动微分特别适用于并行计算和分布式计算。
微分函数与梯度计算
通过调用mindspore.grad
函数,来获得function
的微分函数。
Stop Gradient
通常情况下,求导时会求loss对参数的导数,因此函数的输出只有loss一项。当我们希望函数输出多项时,微分函数会求所有输出项对参数的导数。Stop Gradient可以实现对某个输出项的梯度截断,或消除某个Tensor对梯度的影响。
Auxiliary data
Auxiliary data意为辅助数据,是函数除第一个输出项外的其他输出。通常我们会将函数的loss设置为函数的第一个输出,其他的输出即为辅助数据。