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

时间:2012-01-26 18:35:57

标签: artificial-intelligence computer-science neural-network backpropagation

我一直在努力学习反向传播如何与神经网络协同工作,但还是从技术方面较少的地方找到了一个很好的解释。

反向传播如何工作?它是如何从提供的训练数据集中学习的?我将不得不对此进行编码,但在此之前我需要对它有更深入的了解。

4 个答案:

答案 0 :(得分:16)

反向传播的工作逻辑非常类似于前馈。不同之处在于数据流的方向。在前馈步骤中,您可以从中观察输入和输出。您可以将值传播到训练前面的神经元。

在反向传播步骤中,您无法知道每个神经元中发生的错误,而是输出层中的错误。计算输出节点的错误非常简单 - 您可以在训练集中获取神经元的输出与该实例的实际输出之间的差异。隐藏层中的神经元必须从中更新错误。因此,您必须将错误值传递给它们。根据这些值,隐藏的神经元可以使用前面层的误差加权和来更新其误差和其他参数。

可以找到前馈和后向传播步骤的逐步演示here


修改

如果您是神经网络的初学者,您可以开始学习 Perceptron ,然后前进到NN,实际上是multilayer perceptron

答案 1 :(得分:10)

反向传播算法的高级描述

反向传播试图在神经网络的错误表面上进行梯度下降,使用动态编程技术调整权重以保持计算易于处理。

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

错误表面

如果你有一个神经网络,例如输出层中有N个神经元,那意味着你的输出实际上是一个N维向量,并且该向量存在于一个N维空间(或在一个N维表面上) 。)你正在训练的“正确”输出也是如此。您的“正确”答案与实际输出之间的差异也是如此。

这种差异,适当的条件反射(特别是对绝对值的一些考虑)是生活在错误表面上的错误向量

梯度下降

通过这个概念,您可以将训练神经网络视为调整神经元权重的过程,以便误差函数很小,理想情况下为零。从概念上讲,你用微积分来做这件事。如果你只有一个输出和一个重量,这很简单 - 采取一些导数,它会告诉你移动哪个“方向”,并在那个方向进行调整。

但是你没有一个神经元,你有N个神经元,而且输入重量要多得多。

原理是相同的,除了在寻找可以在你脑海中画出的斜坡的线上使用微积分,方程式变成你不能轻易想象的矢量代数表达式。术语渐变是线上斜率的多维模拟,下降表示您想要向下移动 >该错误表面直到错误很小。

动态编程

但是还有另一个问题 - 如果你有多个图层,你就不能轻易看到某些非输出图层中的权重与实际输出的变化。

动态编程是一种簿记方法,可帮助跟踪正在发生的事情。在最高级别,如果你天真地尝试做所有这些向量计算,你最终会一遍又一遍地计算一些导数。现代反向传播算法避免了其中的一些,并且首先更新输出层,然后更新第二层到最后一层,等等。更新从输出向后传播,因此名称。< / p>

所以,如果你很幸运之前曾经接触过梯度下降或矢量微积分,那么希望点击它。

反向传播的完全推导可以浓缩成大约一页紧密符号数学,但如果没有高级描述,很难理解算法。 (在我看来,这是彻头彻尾的恐吓。)如果你对矢量微积分没有很好的处理,那么,对不起,上面的内容可能没什么帮助。但是为了使反向传播实际工作,没有必要理解完整的推导。


当我试图理解这些材料时,我发现以下论文(由Rojas撰写)非常有用,即使它是他书中一章的重要PDF。

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

答案 2 :(得分:2)

我会尝试解释,而不必过多地研究代码或数学。

基本上,您从神经网络计算分类,并与已知值进行比较。这会在输出节点上出现错误。

现在,从输出节点,我们有来自其他节点的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. 

learningRate和alpha是您可以设置的参数,用于调整解决方案的速度与最终准确解决问题的方式(希望如此)。

答案 3 :(得分:1)

如果您看一下计算图,它很容易理解,它给出了如何通过Chain Rule(基本上是反向传播)来计算Cost函数或Loss函数wrto权重的梯度,然后给出调整每个使用梯度下降法在神经网络中权重,其中梯度是由BackPropogation计算的梯度。那就是根据每个权重影响最终成本的程度,按比例调整每个权重。这里要解释的内容太多了-但这里是我制作https://alexcpn.github.io/html/NN/ml/4_backpropogation/时与我的书中的https://alexcpn.github.io/html/NN/章的链接 试图以一种简单的方式对此进行解释。

enter image description here