Algorithm 神经网络-反向传播

Algorithm 神经网络-反向传播,algorithm,artificial-intelligence,computer-science,neural-network,backpropagation,Algorithm,Artificial Intelligence,Computer Science,Neural Network,Backpropagation,只是一个简单的问题和一些澄清,我需要关于神经网络和反向传播的训练实例 如果有人能以类似的例子为基础,那就太好了,因为我缺乏简单易懂的例子 假设有三种颜色需要训练,它们是红色、蓝色和绿色,我们使用归一化表示红色,因为它们是标称值 red = 0.4 blue = 0.7 green = 1.0 有3个输入层,2个隐藏层和1个输出层 我假设提供了介于-1和1之间的随机权重,并将其与每个输入层节点相乘,使其通过该层,并给出一个网络输出值0.562,该值与实例一起存储。该输出值是否与所有三个实例一起存

只是一个简单的问题和一些澄清,我需要关于神经网络和反向传播的训练实例

如果有人能以类似的例子为基础,那就太好了,因为我缺乏简单易懂的例子

假设有三种颜色需要训练,它们是红色、蓝色和绿色,我们使用归一化表示红色,因为它们是标称值

red = 0.4
blue = 0.7
green = 1.0
有3个输入层,2个隐藏层和1个输出层

我假设提供了介于-1和1之间的随机权重,并将其与每个输入层节点相乘,使其通过该层,并给出一个网络输出值0.562,该值与实例一起存储。该输出值是否与所有三个实例一起存储?培训是如何进行的,从而计算出错误,然后进行反向传播?这才是真正让我困惑的地方


因为我需要编写这个算法,所以最好先对它有个更好的了解

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

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

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

错误[输出]=(预期-实际)*o(1-o)

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

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

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

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

Weight[hiddentooput]=Weight[hiddentooput]+学习率*错误[output]*输入

其中输入是进入链接的值(即上一层的“o”,下一层的错误),learningRate是一个小数字(例如0.01),用于限制更新的大小。对重量[InputOHidden]等层进行类似计算

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


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

请重构您的问题。我不明白你所说的“所有三个实例”是什么意思,0.562是什么?我也不明白最后一个问题。请澄清你的问题。当你说你有“需要训练的三种颜色”时,我收集的是你想要训练一个神经网络,它接受RGB值并确定这三种颜色中的哪一种?当红色是最小值时,不确定您的示例如何表示红色。很好的解释!我可以将其推广到1+隐藏层或/和1+输出吗?谢谢是的,它适用于任意数量的隐藏层和任意数量的节点。质量可能会随着网络的形状而变化。这有一个问题。。。输出误差计算假定神经元具有挤压功能。它是你需要使用的激活函数的导数。因此,如果输出是线性输出(f(x)=x),它的导数是1,因此它的误差只是预期的-实际情况这可能是我在数小时的搜索后发现的backprop算法最简洁的解释。谢谢