反向传播训练算法是如何工作的?

11

我一直试图学习神经网络中的反向传播(back-propagation)是如何工作的,但是还没有从非技术角度找到好的解释。

反向传播是如何工作的?它如何从提供的训练数据集中学习?我将不得不编写代码来实现它,但在那之前,我需要更加深入地了解它。


如果有人感兴趣,我写了一篇关于反向传播算法如何工作的描述在这里(我不想重新发布)。 - Phylliida
4个回答

23
Back-propagation的逻辑与前馈非常相似,不同之处在于数据流的方向。在前馈步骤中,您有输入和从中观察到的输出。您可以将值向前传播以训练前面的神经元。
在反向传播步骤中,您无法知道每个神经元中发生的错误,但可以知道输出层中的错误。计算输出节点的错误很简单 - 您可以取神经元的输出与训练集中该实例的实际输出之间的差异。隐藏层中的神经元必须从中修复其错误。因此,您必须将错误值传回给它们。从这些值中,隐藏神经元可以使用来自前一层的加权误差和更新其权重和其他参数。
可以在这里找到前馈和反向传播步骤的逐步演示。

编辑

如果您是神经网络的初学者,可以从 感知器 开始学习,然后进一步学习NN,它实际上是一个多层感知器


13

反向传播算法的高级描述

反向传播算法试图在神经网络的误差曲面上进行梯度下降,使用动态规划技术调整权重以使计算可行。

我将尝试用高级术语解释所有刚提到的概念。

误差曲面

如果你有一个具有 N 个输出神经元的神经网络,那么你的输出实际上是一个 N 维向量,这个向量存在于一个 N 维空间中(或者说存在于一个 N 维曲面上)。与此同时,你正在训练的“正确”输出也处于同样的空间中。你的实际输出与“正确”输出之间的差异也如此。

通过适当的条件(特别是一些绝对值的考虑),这种差异就成为了误差向量,它存在于误差曲面上。

梯度下降

基于这个概念,你可以将神经网络的训练过程视为调整神经元权重的过程,使得误差函数变小,最理想的情况是误差为零。从概念上讲,你需要使用微积分来实现这一点。如果你只有一个输出和一个权重,那么这个过程就很简单——求出几个导数,它们会告诉你应该向哪个“方向”移动,并进行相应的调整。

但是,你并不只拥有一个神经元,而是 N 个神经元,以及更多的输入权重。

原理是相同的,只不过你需要使用矢量代数表达式来替代在头脑中想象斜率的线上的微积分。术语梯度是多维空间中斜率的类比,而下降意味着你想要向下移动误差曲面,直到误差变小。

动态规划

然而还有另一个问题——如果你有多层神经元,你无法轻松地看出某个非输出层与实际输出之间权重的变化。

动态规划是一种记账方法,用于帮助跟踪发生的情况。在最高层次上,如果你尝试天真地进行所有这些向量微积分,那么你最终会一遍又一遍地计算一些导数。现代反向传播算法避免了其中的一些问题,因此你首先更新输出层,然后是倒数第二层,以此类推。更新从输出向后传播,因此得名。

因此,如果你很幸运地接触过梯度下降或向量微积分,那么希望这可以让你理解。

反向传播的完整推导可以简化为大约一页紧凑的符号数学,但没有高层次的描述,很难理解该算法。(在我看来十分令人难以理解)。如果你对向量微积分没有很好的掌握,那么很抱歉,上面的内容可能并不有帮助。但是为了使反向传播实际工作,不必理解完整的推导过程。


当我尝试理解这个材料时,我发现了以下论文(作者为Rojas),即使它是他的一本书的一个章节的大PDF,也非常有帮助。

http://page.mi.fu-berlin.de/rojas/neural/chapter/K7.pdf


3
我将尽力解释,而不深入探讨代码或数学问题。
基本上,您从神经网络计算出分类,然后与已知值进行比较。这会在输出节点处产生错误。
现在,从输出节点,我们有来自其他节点的N个传入链接。我们将错误传播到输出节点之前的最后一层。然后向下传播到下一层(当存在多个上行链接时,您对错误求和)。然后递归地传播到第一个。
为了调整权重进行培训,对于每个节点,您基本上执行以下操作:
for each link in node.uplinks
  error = link.destination.error
  main = learningRate * error * node.output  // The amount of change is based on error, output, and the learning rate

  link.weight += main * alpha * momentum // adjust the weight based on the current desired change, alpha, and the "momentum" of the change.  

  link.momentum = main // Momentum is based on the last change. 

学习率和alpha是可以设置的参数,用于调整它快速锁定解决方案的速度,以及最终(希望能够)准确地解决问题的能力。


我假设权重可以随机选择,显然其值在-1到1之间? - unleashed

1
如果你观察计算图,就可以很容易理解成本函数或损失函数相对于权重的梯度是如何应用链式法则计算(这基本上就是反向传播),以及通过梯度下降调整神经网络中每个权重的机制,在此过程中使用的梯度正是由反向传播计算出来的。也就是按比例调整每个权重,根据每个权重对最终成本的影响力而定。这里不可能详细解释所有内容,但是这是我书中展示的https://alexcpn.github.io/html/NN/ml/4_backpropogation/ 章节,试图以简单的方式解释这个过程。同时,欢迎访问https://alexcpn.github.io/html/NN/了解更多信息。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接