Tensorflow 反向传播和反向模式autodiff之间有什么区别?

Tensorflow 反向传播和反向模式autodiff之间有什么区别?,tensorflow,machine-learning,deep-learning,backpropagation,Tensorflow,Machine Learning,Deep Learning,Backpropagation,经历这些,我熟悉以下几点: 对于每个训练实例,反向传播算法首先进行 预测(向前传递),测量误差,然后遍历每个 反向分层以测量每个层的误差贡献 连接(反向传递),最后稍微调整连接 减少误差的权重 但是,我不确定这与TensorFlow的反向模式autodiff实现有何区别 据我所知,反向模式autodiff首先在正向方向通过图形,然后在第二次过程中计算输出相对于输入的所有偏导数。这与传播算法非常相似 反向传播与反向模式autodiff有何不同?自动微分与标准微积分课程中讲授的方法不同,其特点是如何

经历这些,我熟悉以下几点:

对于每个训练实例,反向传播算法首先进行 预测(向前传递),测量误差,然后遍历每个 反向分层以测量每个层的误差贡献 连接(反向传递),最后稍微调整连接 减少误差的权重

但是,我不确定这与TensorFlow的反向模式autodiff实现有何区别

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


反向传播与反向模式autodiff有何不同?

自动微分与标准微积分课程中讲授的方法不同,其特点是如何计算梯度,以及在某些方面,例如其固有的数据结构梯度能力,而不仅仅是定义良好的数学函数。我不是足够的专家,无法深入了解更多细节,但这是一个很好的参考资料,可以更深入地解释这一点:

这是我刚刚找到的另一本看起来很不错的指南

我相信backprop可能正式指的是计算梯度的手工演算算法,至少它最初是这样推导出来的,并且是在这门学科的课堂上教授的。但在实践中,backprop与上述指南中描述的自动差异化方法可以互换使用。因此,拆分这两个术语在语言学上可能和在数学上一样困难

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


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

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


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

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

反向传播是否将反向模式AD的更一般定义应用于标量损失函数,或将反向模式AD的更具体定义应用于用于训练神经网络的标量损失函数,取决于个人喜好。这个词在不同的上下文中含义稍有不同,但在机器学习社区中最常用来谈论使用标量损失函数计算神经网络参数的梯度


完整性:有时反向模式AD可以在单个反向过程中计算完整的雅可比矩阵,而不仅仅是向量雅可比矩阵积。此外,向量为向量[1.0]的标量函数的向量雅可比积与梯度相同

这是一种递归定义:反向传播由多个反向传播步骤组成。这是一个相当糟糕的定义,我会说。这与我的部落的语言相反,在我的部落中,反向传播只是推导链式规则的应用,而梯度下降(多种风格)是使用反向传播的优化算法。虽然有点晚了,但这是一个非常好的解释!