我只需要一个简单的问题和一些关于神经网络和训练实例的反向传播的澄清。
如果有人能把他们的例子建立在类似的基础上,那就太好了,因为我缺乏简单易懂的例子。
假设有三种颜色需要训练,分别是红色、蓝色和绿色,我们在下面用标准化表示红色,因为它们是标称值。
red = 0.4
blue = 0.7
green = 1.0
有3个输入层,2个隐藏层和1个输出层。
我假设提供了-1和1之间的随机权重,并将其与每个输入层节点相乘,将其馈送到层中,并给出与实例一起存储的0.562的网络输出值。这个输出值会和所有三个实例一起存储吗?如何进行训练,以便计算错误,然后反向传播?这就是我真正困惑的地方。
因为我需要编码这个算法,所以最好先得到更好的理解。
最佳答案
虽然我不完全理解你的例子,反向传播的问题是相当普遍的。在最简单的情况下,使用严格分层的前馈和一个输出节点:
首先,您需要将信息向前传播。看起来您可能已经有了这个功能,但是请确保跟踪挤压函数之后每个节点的值,让我们调用这个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]等层的重量进行了模拟计算。
(注:这假设了乙状结肠挤压功能)
希望这有帮助更多信息可以在很多地方找到。我是从汤姆M米切尔的机器学习中学到的它有一个很好的伪代码段。
关于algorithm - 神经网络-反向传播,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9050642/