反向传播和反向模式自动差异有什么区别?
What is the difference between backpropagation and reverse-mode autodiff?
通过这个book,我熟悉以下内容:
For each training instance the backpropagation algorithm first makes a
prediction (forward pass), measures the error, then goes through each
layer in reverse to measure the error contribution from each
connection (reverse pass), and finally slightly tweaks the connection
weights to reduce the error.
但是我不确定这与 TensorFlow 的反向模式 autodiff 实现有何不同。
据我所知,反向模式 autodiff 首先正向遍历图形,然后在第二遍中计算输出相对于输入的所有偏导数。这和传播算法很相似。
反向传播与反向模式自动差异有何不同?
自动微分不同于标准微积分 类 中讲授的梯度计算方法,以及某些特性,例如它采用数据结构梯度的本机能力,而不仅仅是定义明确的数学功能。我不够专业,无法深入了解更多细节,但这是一个很好的参考,可以更深入地解释它:
https://alexey.radul.name/ideas/2013/introduction-to-automatic-differentiation/
这是我刚刚找到的另一本看起来相当不错的指南。
https://rufflewind.com/2016-12-30/reverse-mode-automatic-differentiation
我相信 backprop 可能正式指的是用于计算梯度的手工微积分算法,至少这是它最初的推导方式,也是 类 中关于该主题的教学方式。但在实践中,反向传播与上述指南中描述的自动微分方法完全可以互换使用。因此,将这两个术语分开可能是语言学和数学一样多的努力。
我还注意到这篇关于反向传播算法的好文章,以便与上述自动微分指南进行比较。
感谢 David Parks 的有效贡献和有用的链接,但是我已经找到了本书作者本人对这个问题的答案,这可能会提供更简洁的答案:
Bakpropagation refers to the whole process of training an artificial neural network using multiple backpropagation steps, each of which computes gradients and uses them to perform a Gradient Descent step. In contrast, reverse-mode auto diff is simply a technique used to compute gradients efficiently and it happens to be used by backpropagation.
反向传播和反向模式 AD 之间最重要的区别是反向传播模式 AD 从 R^n -> R 计算向量值函数的向量-雅可比积^m,而反向传播从 R^n -> R 计算标量值函数的梯度。因此,反向传播是反向模式 AD 的子集。
当我们训练神经网络时,我们总是有一个标量值损失函数,所以我们总是使用反向传播。由于backprop是reverse-mode AD的一个子集,那么我们在训练神经网络的时候也是在使用reverse-mode AD。
反向传播是否采用应用于标量损失函数的反向模式 AD 的更一般定义,或应用于标量损失函数的反向模式 AD 的更具体定义 训练神经网络 是个人喜好的问题。这个词在不同上下文中的含义略有不同,但在机器学习社区中最常用来谈论使用标量损失函数计算神经网络参数的梯度。
为了完整性:有时反向模式 AD 可以在单次反向传递中计算完整的 Jacobian,而不仅仅是向量-Jacobian 乘积。此外,向量为向量 [1.0] 的标量函数的向量雅可比积与梯度相同。
通过这个book,我熟悉以下内容:
For each training instance the backpropagation algorithm first makes a prediction (forward pass), measures the error, then goes through each layer in reverse to measure the error contribution from each connection (reverse pass), and finally slightly tweaks the connection weights to reduce the error.
但是我不确定这与 TensorFlow 的反向模式 autodiff 实现有何不同。
据我所知,反向模式 autodiff 首先正向遍历图形,然后在第二遍中计算输出相对于输入的所有偏导数。这和传播算法很相似。
反向传播与反向模式自动差异有何不同?
自动微分不同于标准微积分 类 中讲授的梯度计算方法,以及某些特性,例如它采用数据结构梯度的本机能力,而不仅仅是定义明确的数学功能。我不够专业,无法深入了解更多细节,但这是一个很好的参考,可以更深入地解释它:
https://alexey.radul.name/ideas/2013/introduction-to-automatic-differentiation/
这是我刚刚找到的另一本看起来相当不错的指南。
https://rufflewind.com/2016-12-30/reverse-mode-automatic-differentiation
我相信 backprop 可能正式指的是用于计算梯度的手工微积分算法,至少这是它最初的推导方式,也是 类 中关于该主题的教学方式。但在实践中,反向传播与上述指南中描述的自动微分方法完全可以互换使用。因此,将这两个术语分开可能是语言学和数学一样多的努力。
我还注意到这篇关于反向传播算法的好文章,以便与上述自动微分指南进行比较。
感谢 David Parks 的有效贡献和有用的链接,但是我已经找到了本书作者本人对这个问题的答案,这可能会提供更简洁的答案:
Bakpropagation refers to the whole process of training an artificial neural network using multiple backpropagation steps, each of which computes gradients and uses them to perform a Gradient Descent step. In contrast, reverse-mode auto diff is simply a technique used to compute gradients efficiently and it happens to be used by backpropagation.
反向传播和反向模式 AD 之间最重要的区别是反向传播模式 AD 从 R^n -> R 计算向量值函数的向量-雅可比积^m,而反向传播从 R^n -> R 计算标量值函数的梯度。因此,反向传播是反向模式 AD 的子集。
当我们训练神经网络时,我们总是有一个标量值损失函数,所以我们总是使用反向传播。由于backprop是reverse-mode AD的一个子集,那么我们在训练神经网络的时候也是在使用reverse-mode AD。
反向传播是否采用应用于标量损失函数的反向模式 AD 的更一般定义,或应用于标量损失函数的反向模式 AD 的更具体定义 训练神经网络 是个人喜好的问题。这个词在不同上下文中的含义略有不同,但在机器学习社区中最常用来谈论使用标量损失函数计算神经网络参数的梯度。
为了完整性:有时反向模式 AD 可以在单次反向传递中计算完整的 Jacobian,而不仅仅是向量-Jacobian 乘积。此外,向量为向量 [1.0] 的标量函数的向量雅可比积与梯度相同。