【问题标题】:Neural Networks - Back Propagation神经网络 - 反向传播
【发布时间】:2012-02-21 11:11:22
【问题描述】:

我需要一个简短的问题和一些关于训练实例的神经网络和反向传播的说明。

如果有人可以将他们的示例建立在与此类似的基础上,那就太好了,因为我缺乏简单易懂的示例。

假设训练需要三种颜色,即红色、蓝色和绿色,我们使用标准化将红色表示如下,因为它们是标称值。

red = 0.4
blue = 0.7
green = 1.0

有 3 个输入层,2 个隐藏层和 1 个输出层。

我假设提供了 -1 和 1 之间的随机权重,并与通过该层馈送它的每个输入层节点相乘,并给出存储在实例旁边的网络输出值 0.562。这个输出值会与所有三个实例一起存储吗?训练如何进行以便计算误差然后反向传播?这才是真正让我困惑的地方。

因为我需要编写这个算法,所以最好先更好地理解。

【问题讨论】:

  • 请重构您的问题。我不明白“所有三个实例”是什么意思 0.562 是什么?我也不明白最后一个问题。
  • 请澄清您的问题。当你说你有“需要训练的三种颜色”时,我收集到你想训练一个神经网络,它接受一个 RGB 值并确定它是三种颜色中的哪一种?当红色是最小值时,不确定您的示例如何表示红色。

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


【解决方案1】:

虽然我不完全理解您的示例,但反向传播的问题相当普遍。在具有严格分层前馈和一个输出节点的最简单情况下:

首先,您需要向前传播信息。看起来您可能已经有了这个,但是请确保您跟踪压缩函数之后每个节点的值是什么,让我们调用这个 o,并为每个节点保留一个。

前向传播完成后,对于反向传播,您需要计算误差。这就是预期和给定之间的差异。另外将这个乘以导数,以便为以后的更新提供一个方向(导数的推导很复杂,但使用很简单)。

Error[output] = (Expected - Actual) * o(1 - o)

然后将每个节点的错误通过网络向后传播。这给出了每个节点对错误的“责任”的估计。所以每个节点的误差是下一层所有节点的误差,由每个链路上的权重加权。同样,我们乘以导数,所以我们有方向。

Error[hidden] = Sum (Error[output]*weight[hiddenToOutput]) * o(1 - o)

根据需要对每一层链接(输入到隐藏、隐藏到隐藏、隐藏到输出)重复此操作。

最后,通过更新链接上的权重来进行训练。为此,我们结合了我们必须获得的所有信息来获得最终更新。

Weight[hiddenToOutput] = weight[hiddenToOutput] + learningRate * error[output] * input

其中 input 是进入链接的值(即,'o' 来自上一层,error 来自下一层),learningRate 是一些小的数字(例如 0.01),以限制我们的更新。对 weight[inputToHidden] 等层进行了类似的计算。

((注意:这里假设了 sigmoid 压缩函数))

希望这会有所帮助。更多信息可以在很多地方找到。我从 Tom M. Mitchell 的机器学习中学习。它有一个很好的伪代码部分。

【讨论】:

  • 很好的解释!我可以将其概括为 1+ 隐藏层或/和 1+ 输出吗?谢谢!
  • 是的,它适用于任意数量的隐藏层和任意层中的任意数量的节点。不过,质量可能会因您的网络形状而异。
  • 这有一个问题...输出误差计算假设神经元有一个挤压函数。它是您需要使用的激活函数的导数。因此,如果输出是线性输出 (f(x) = x),它的导数是 1,所以它的误差只是预期的 - 实际
  • 经过数小时的搜索,这可能是我发现的对反向传播算法最简洁、最简洁的解释。谢谢
猜你喜欢
  • 2015-03-03
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 2016-09-19
  • 2014-03-15
  • 2018-05-17
相关资源
最近更新 更多