神经网络 - 反向传播

unl*_*hed 2 algorithm computer-science artificial-intelligence backpropagation neural-network

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

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

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

red = 0.4
blue = 0.7
green = 1.0
Run Code Online (Sandbox Code Playgroud)

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

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

由于我需要对此算法进行编码,因此首先要获得更好的理解会很棒.

And*_*rew 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]等层进行类似的计算.

((注意:这假定sigmoid压扁功能))

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