2

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

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

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

red = 0.4
blue = 0.7
green = 1.0

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

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

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

4

1 回答 1

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',而 error 来自下一层), learningRate 是一些小的数字(例如 0.01),以限制我们更新的大小。对 weight[inputToHidden] 等层进行了类似的计算。

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

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

于 2012-01-31T21:39:37.690 回答