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

Artificial intelligence 反向传播训练算法是如何工作的?,artificial-intelligence,computer-science,neural-network,backpropagation,Artificial Intelligence,Computer Science,Neural Network,Backpropagation,我一直在努力学习反向传播如何与神经网络一起工作,但还没有从技术层面上找到一个好的解释 反向传播是如何工作的?它如何从提供的培训数据集中学习?我将不得不编写代码,但在此之前,我需要对它有更深入的理解 反向传播的工作逻辑与前馈非常相似。区别在于数据流的方向。在前馈步骤中,您可以从中观察到输入和输出。您可以向前传播这些值来训练前面的神经元 在反向传播步骤中,除了输出层中的错误外,您无法知道每个神经元中发生的错误。计算输出节点的误差很简单——您可以在训练集中获取神经元的输出与该实例的实际输出之间的差值。

我一直在努力学习反向传播如何与神经网络一起工作,但还没有从技术层面上找到一个好的解释


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

反向传播的工作逻辑与前馈非常相似。区别在于数据流的方向。在前馈步骤中,您可以从中观察到输入和输出。您可以向前传播这些值来训练前面的神经元

在反向传播步骤中,除了输出层中的错误外,您无法知道每个神经元中发生的错误。计算输出节点的误差很简单——您可以在训练集中获取神经元的输出与该实例的实际输出之间的差值。隐藏层中的神经元必须修复由此产生的错误。因此,您必须将错误值传递回它们。根据这些值,隐藏神经元可以使用前一层误差的加权和来更新其权重和其他参数

可以找到前馈和反向传播步骤的分步演示


编辑
如果你是神经网络的初学者,你可以从开始学习,然后再学习NN,它实际上是一种神经网络。

我将尝试在不深入代码或数学的情况下进行解释

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

现在,从输出节点,我们有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是您可以设置的参数,用于调整它在解决方案中磨练的速度,以及(希望)最终解决方案的准确程度

反向传播算法的高级描述 反向传播尝试在神经网络的误差面上进行梯度下降,用动态规划技术调整权重,以保持计算的可处理性

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

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

在适当的条件下(特别是考虑绝对值),这种差异就是存在于误差面上的误差向量

梯度下降 有了这个概念,你可以把训练神经网络看作是调整神经元权重的过程,这样误差函数就很小,理想情况下为零。从概念上讲,这是通过微积分实现的。如果你只有一个输出和一个权重,这将很简单——取几个导数,它会告诉你移动的“方向”,并在那个方向上进行调整

但是你没有一个神经元,你有N个神经元,还有更多的输入权重

原理是一样的,除了不使用微积分在直线上寻找你能在脑海中描绘的斜率外,这些方程变成了你不容易描绘的向量代数表达式。术语梯度是一条直线上坡度的多维模拟,而下降意味着您希望向下移动该误差面,直到误差变小

动态规划 不过,还有另一个问题——如果您有多个层,您很难看到一些非输出层中的权重相对于实际输出的变化

动态规划是一种簿记方法,有助于跟踪正在发生的事情。在最高层次上,如果你天真地尝试做所有这些向量演算,你最终会一次又一次地计算一些导数。现代的反向传播算法避免了一些这种情况,因此,您首先更新输出层,然后更新从第二层到最后一层等。更新是从输出向后传播的,因此得名

所以,如果你足够幸运,之前曾接触过梯度下降法或向量演算,那么很有希望

反向传播的完整推导可以浓缩为一页紧凑的符号数学,但如果没有高级描述,很难理解算法的意义。(在我看来,这简直是吓人。)如果你对向量演算没有很好的理解,那么,对不起,上面的内容可能没有什么帮助。但是为了让反向传播真正起作用,不需要理解完整的推导


当我试图理解这篇材料时,我发现下面的文章(由Rojas撰写)非常有用,即使它是他书中一章的PDF格式


如果你看一下计算图,就会很容易理解,该图给出了成本函数或损失函数相对于权重的梯度是如何通过链式规则(基本上就是反向传播)计算的,然后是使用梯度下降法调整神经网络中每个权重的机制,其中梯度是通过反向传播计算的梯度。这就是根据每个权重对最终成本的影响程度,按比例调整每个权重。这里要解释的太多了,但这里是我的《制作》一书中章节的链接 它试图解释t