主要内容

自动鉴别背景

什么是自动区分?

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

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

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

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

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

转发模式

考虑这个函数及其梯度的求值问题:

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

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

下面的计算图对函数的计算进行编码fx)。

显示函数f(x)编码的计算图。

计算的梯度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 ˙ 在从上到下遍历图时变得可用。

计算图显示了f对x1的偏导数的计算。

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

反模式

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

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

u ¯ = f u

在计算图中,从一个变量出发的每个箭头都通过链式法则中的项贡献给相应的伴随变量。例如,变量u1有指向两个变量的箭头,u1u6。图中有相关方程

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 u6=u5u1,你得到

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] Baydin, a.g., b.a. Pearlmutter, a.a. Radul和j.m. Siskind。“机器学习中的自动区分:调查”。机器学习研究杂志,18(153), 2018, pp. 1-43。可以在https://arxiv.org/abs/1502.05767

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

另请参阅

|||

相关的话题

Baidu
map