主要内容

自动判别背景

什么是自动差异化?

自动微分(也称为autodiff广告,或算法的区别)是一种广泛用于深度学习的工具。它对于创建和训练复杂的深度学习模型特别有用,而不需要手动计算导数以进行优化。有关演示如何创建和定制深度学习模型、训练循环和损失函数的示例,请参见定义自定义训练循环、损失函数和网络

自动微分是一套数值计算导数(梯度)的技术。该方法使用符号规则求导,比有限差分逼近更精确。与纯符号方法不同,自动微分在计算的早期计算表达式的数值,而不是进行大量的符号计算。换句话说,自动微分计算在特定数值上的导数;它不构造导数的符号表达式。

  • 转发模式通过对函数本身求值的同时进行初等导数运算来求数值导数。下一节将详细介绍,该软件在计算图上执行这些计算。

  • 反模式自动微分使用正向模式计算图的扩展,通过对图的反向遍历来实现梯度的计算。当软件运行代码来计算函数及其导数时,它将操作记录在名为a的数据结构中跟踪

正如许多研究人员所指出的(例如,Baydin, Pearlmutter, Radul和Siskind)[1]),对于多变量的标量函数,反向模式比正向模式更有效地计算梯度。因为深度学习损失函数是所有权重的标量函数,深度学习工具箱™自动微分使用反向模式。

转发模式

考虑计算这个函数及其梯度的问题:

f x x 1 经验值 1 2 x 1 2 + x 2 2

自动微分作用于特定点。在这种情况下,拿x1= 2,x2= 1/2。

下面的计算图编码了函数的计算fx).

计算的梯度fx)使用正向模式,您可以在相同的方向上计算相同的图形,但根据基本的微分规则修改计算。为了进一步简化计算,您填写每个子表达式的导数值u就在你走的时候。为了计算整个梯度,你必须遍历图两次,一次是关于每个自变量的偏导数。链式法则中的每个子表达式都有一个数值,因此整个表达式具有与函数本身相同的计算图。

计算是链式法则的重复应用。在这个例子中,求导f关于x1展开为以下表达式:

d f d x 1 d u 6 d x 1 u 6 u 1 + u 6 u 5 u 5 x 1 u 6 u 1 + u 6 u 5 u 5 u 4 u 4 x 1 u 6 u 1 + u 6 u 5 u 5 u 4 u 4 u 3. u 3. x 1 u 6 u 1 + u 6 u 5 u 5 u 4 u 4 u 3. u 3. u 1 u 1 x 1

u ˙ 表示表达式的导数u关于x1.的评估值u从函数求值,你可以计算偏导数f关于x1如下图所示。的所有值 u ˙ 在从上到下遍历图形时变得可用。

求关于的偏导数x2,您将遍历一个类似的计算图。因此,当你计算函数的梯度时,图遍历的次数与变量的数量相同。对于典型的深度学习应用程序来说,这个过程太慢了,因为它有数千或数百万个变量。

反模式

反向模式使用计算图的一次正向遍历来设置跟踪。然后,它在反方向遍历图的一次过程中计算函数的整个梯度。对于深度学习应用来说,这种模式效率要高得多。

逆向模式背后的理论也是基于链式法则,以及用超棒表示的相关伴随变量。伴随变量为u

u ¯ f u

在计算图上,根据链式法则,每个从变量向外的箭头都通过其项贡献给相应的伴随变量。例如,变量u1有指向两个变量的箭头,u1而且u6.图中有相关的方程

f u 1 f u 1 u 1 u 1 + f u 6 u 6 u 1 u ¯ 1 u 1 u 1 + u ¯ 6 u 6 u 1

在这个计算中,回想一下 u 1 u 1 2 而且u6u5u1,你得到

u ¯ 1 u ¯ 1 2 u 1 + u ¯ 6 u 5

在图的正向遍历过程中,软件计算中间变量u.在反向遍历期间,从种子值开始 u ¯ 6 f f 1 ,反模式计算得到所有变量的伴随值。因此,反向模式只需一次计算梯度,与正向模式相比节省了大量的时间。

下图显示了该函数在反向模式下的梯度计算

f x x 1 经验值 1 2 x 1 2 + x 2 2

同样,计算需要x1= 2,x2= 1/2。反向模式计算依赖于u在原始计算图中函数的计算过程中获得的值。在图的右侧,使用图左侧的公式,伴随变量的计算值出现在伴随变量名旁边。

最终的梯度值显示为 u ¯ 0 f u 0 f x 2 而且 u ¯ 1 f u 1 f x 1

要了解更多细节,请参阅Baydin, Pearlmutter, Radul和Siskind[1]或Wikipedia关于自动微分[2]的文章。

参考文献

[1]贝丁,a.g., B. A.皮尔穆特,A. A.拉杜,J. M.西斯金德。《机器学习中的自动区分:综述》机器学习研究杂志,18(153), 2018,第1-43页。可以在https://arxiv.org/abs/1502.05767

[2]自动分化。维基百科。可以在https://en.wikipedia.org/wiki/Automatic_differentiation

另请参阅

|||

相关的话题