神经网络 - 反向传播

时间:2012-01-29 03:20:22

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

我只需要一个关于训练实例的神经网络和反向传播的快速问题和一些澄清。

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

假设有三种颜色需要训练,其中红色,蓝色和绿色代表红色,如下所示使用标准化,因为它们是标称值。

red = 0.4
blue = 0.7
green = 1.0

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

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

由于我需要对此算法进行编码,因此首先要更好地理解它会很棒。

1 个答案:

答案 0 :(得分:10)

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

首先,您需要向前传播信息。看起来你可能已经有了这个,但是要确保你跟踪压缩函数后每个节点的值是什么,让我们调用这个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”,错误来自下一层),而learningRate是一些小数字(例如0.01)来限制链接的大小我们的更新。类似的计算是对权重[inputToHidden]等,层。

((注意:这假设是S形挤压功能))

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