backpropagation和反向模式autodiff有什么区别?

时间:2018-04-19 16:43:08

标签: tensorflow machine-learning deep-learning backpropagation

通过这个book,我熟悉以下内容:

  

对于每个训练实例,反向传播算法首先制作一个   预测(正向传递),测量误差,然后通过每个   反向层以测量每个的误差贡献   连接(反向传递),最后稍微调整连接   权重以减少错误。

但是我不确定这与TensorFlow的反向模式autodiff实现有何不同。

据我所知,反向模式自动存储器首先在前向方向上通过图形,然后在第二次通过中计算输出相对于输入的所有偏导数。这与传播算法非常相似。

反向传播与反向模式自动记录有何不同?

3 个答案:

答案 0 :(得分:7)

感谢David Parks对有效贡献和有用链接的回答,但是我已经找到了本书作者自己给出的这个问题的答案,这可能会提供一个更简洁的答案:

  

Bakpropagation指的是使用多个反向传播步骤训练人工神经网络的整个过程,每个反向传播步骤计算梯度并使用它们执行梯度下降步骤。 相比之下,反向模式自动差异只是一种用于有效计算梯度的技术,它恰好被反向传播使用。

答案 1 :(得分:4)

反向传播和反向模式AD之间最重要的区别是:反向传播AD从R ^ n-> R ^ m计算向量值函数的vector-Jacobian乘积,而反向传播从R ^ n-> R计算标量值函数的梯度。因此,反向传播是反向模式AD的子集。

当我们训练神经网络时,我们总是有一个标量值损失函数,因此我们总是使用反向传播。由于反向传播是反向模式AD的子集,因此我们在训练神经网络时也会使用反向模式AD。

无论反向传播是采用反模式AD的更笼统定义,如应用于标量损失函数,还是采用更具体的反向模式AD的定义,如应用于标量损失函数,用于训练神经网络< / em>是个人喜好问题。这个词在不同的上下文中含义稍有不同,但是在机器学习社区中最常用于谈论使用标量损失函数计算神经网络参数的梯度。

出于完整性考虑:有时反向模式AD可以在一次反向传递中计算完整的Jacobian值,而不仅仅是矢量-Jacobian乘积。同样,矢量为矢量[1.0]的标量函数的矢量雅可比积与梯度相同。

答案 2 :(得分:2)

自动微分不同于标准微积分课程中教授的关于如何计算梯度的方法,以及某些特征,例如其采用数据结构的梯度而不仅仅是明确定义的数学函数的本机能力。我不够专业,无法进一步详细说明,但这是一个很好的参考,可以更深入地解释它:

https://alexey.radul.name/ideas/2013/introduction-to-automatic-differentiation/

这是另一个看起来相当不错的指南,我现在才发现。

https://rufflewind.com/2016-12-30/reverse-mode-automatic-differentiation

我相信backprop可能会正式引用用于计算渐变的手工微积分算法,至少它是如何最初得出的,以及它是如何在关于该主题的课程中教授的。但在实践中,backprop与上述指南中描述的自动差分方法完全互换使用。因此,将这两个术语分开,可能与语言学和数学一样努力。

我还注意到关于反向传播算法的这篇很好的文章,与上面的自动微分指南进行比较。

https://brilliant.org/wiki/backpropagation/