什么是反向传播?

数据挖掘 反向传播
2021-09-19 23:50:57

由于术语困扰我,我有一个概念性问题。反向传播算法是一种神经网络训练算法,还是只是一种递归算法,用于计算神经网络的雅可比行列式?那么这个雅可比将被用作主要训练算法的一部分,例如最速下降?

因此,它是一种训练算法还是一种数值方法来计算雅可比矩阵(神经网络输出相对于网络参数的偏导数)?

3个回答

不,我不认为反向传播是一种训练算法。反向传播只是一种使用链式法则求损失函数相对于输入的导数的方法。计算导数不会训练任何东西。

为了最小化损失函数,你对这个导数所做的就是训练部分。

编辑:我认为这取决于你问谁。以这个 PyTorch教程为例他们说“反向传播:在反向传播中,NN 根据猜测中的误差调整其参数。它通过从输出向后遍历来做到这一点,收集误差相对于函数参数(梯度)的导数,使用梯度下降优化参数。”

即两个步骤

loss.backward()
optim.step()

一起就是他们所谓的反向传播。这就是我所说的更具工程性的观点,我相信这是一种远离我所争论的语义转变(见评论!)实际上是反向传播,这只是loss.backward()一步。

反向传播的语义漂移意味着计算导数和优化在这种情况下是有意义的。你为什么会打电话loss.backward()然后不打电话optim.step()但是,最初(从技术上讲,最好的正确)反向传播仅指导数的计算,我认为您会在数学/理论上下文而不是编程/工程上下文中找到该术语。

反向传播算法是优化(学习)神经网络权重的方式,即优化器用于此目的的方法,因此可以将其视为训练算法。

在反向传播中,您不需要明确计算可比矩阵(有关更多详细信息,请参阅此信息源),但您可以通过链式法则(来自微积分)计算损失函数相对于其权重的一阶导数。这个链式法则让我们可以通过将更复杂的函数拆分为更简单的导数来找到更复杂函数的梯度。
然后,通过应用梯度下降策略(遵循最速下降,即添加负导数 对于每个可训练的权重),在每次迭代中调整权重,直到某些值产生可以接受的损失或直到达到一定的轮数。

作为每个导数如何用于更新每个权重的简单示例,我们可以考虑应用梯度下降的线性回归:

在此处输入图像描述

正如François Chollet 所著的 Python 深度学习一书中明确指出的那样“反向传播从最终的损失值开始,从顶层向后工作到底层,计算每个参数对损失值的贡献”

我将事情解释为术语在几个来源上有点扭曲。有些人将反向传播称为训练算法,而有些人则将其称为计算偏导数(即雅可比行列式)的有效算法。

因此,我相信反向传播算法的最初含义是计算网络的雅可比行列式。然后任何训练算法都可以利用雅可比行列式。似乎大多数时候选择的训练算法是最速下降的。