在学习阶段的神经网络内,有两种机制正在发生。前馈和反向传播。以异或运算为例。

A   B   Q
0   0   0
0   1   1
1   0   1
1   1   0


对于第一遍(0,0-> 0)进行前馈,然后进行反向传播。在此步骤之后,将重新计算所有权重。
现在会发生什么?
问题1:同样,将输入的0,0与新计算的权重前馈(在反向传播期间),然后反向传播,直到误差变为零为止?如果是,那么错误永远不会消失怎么办?这使我想到下一个问题。
问题2:下一次通过(0,1-> 1)的学习何时会发生?
 问题3:假设第一遍的权重为10.3,-2.3,5.5。第二遍(0,1-> 1)以第一遍的权重开始前馈?


如果我必须通过代码描述以下哪个代码是正确的

以下选项的通用代码

averageErrorUntilLearn = 0.002;
inputs = [
[0, 0],
[0, 1],
[1, 0],
[1, 1]
];
outputs = [0, 1, 1, 0];
inputNeurons = 2;
hiddenLayers = 1;
outputNeurons = 1;

//initialize the Neural Net
neuralNetObj = NeuralNet();
neuralNetObj.createTopology(inputNeurons, hiddenLayers, outputNeurons);
weightsForTheNetwork = randomWeights();



问题3的情况-
每次通过计算的权重将向下发送到下一个通过

//learn
while (averageError > averageErrorUntilLearn):
    for i in range(0,len(input)):
        console.log("Current Pass-" + i);
        neuralNetObj.learningParams(inputs[i], outputs[i]);
        neuralNetObj.initializeWeights(weightsForTheNetwork);
        neuralNetObj.feedforward();
        neuralNetObj.backPropagate();
        weightsForTheNetwork=neuralNetObj.getNewWeights();
        averageError = neuralNetObj.getAverageError();


问题1场景-每遍都将使用自己的权重进行计算,直到达到所需的学习水平,然后将权重沿着新的遍历发送

//learn
for i in range(0,len(input)):
    while (averageError > averageErrorUntilLearn):
        console.log("Current Pass-" + i);
        neuralNetObj.learningParams(inputs[i], outputs[i]);
        neuralNetObj.initializeWeights(weightsForTheNetwork);
        neuralNetObj.feedforward();
        neuralNetObj.backPropagate();
        weightsForTheNetwork = neuralNetObj.getNewWeights();
        averageError = neuralNetObj.getAverageError();


 还是我在这里完全错了,以上情况都不是正确的?

最佳答案

1)是,反向传播步骤将继续更新权重,直到前馈步骤的错误为0。无论它是否达到0错误,都必须定义一个停止条件以告知何时停止。最简单的是设置固定数量的迭代进行训练。这是入门的好方法。实际问题将使用更复杂的方法,例如在单独的验证步骤中定期检查准确性,并在准确性停止提高时停止。但是,对于XOR问题,只需使用固定数量的迭代即可。由您决定并告知停止标准是什么。

2)您不想在一个实例上反复训练(例如0,0-> 0),然后切换到另一个实例。如果您一次要训练一个实例,请遍历第一个实例(前进和后退步骤),然后再进行下一个实例,依此类推,直到训练数据结束。然后再次从头开始,并再次遍历每个实例。通过这种方式,它对训练数据中表示的每种情况的训练进行交织。正如@Maxim所说,分批训练更为普遍。批量处理将同时进行所有前向传递,并收集网络对答案的所有猜测。然后,它将为批次的每个实例计算错误,并向后传播一次,以纠正批次中所有实例的平均错误。因此,它正在学习如何同时处理批处理中的所有案件。这比一次执行一个实例要快,但是网络应该能够以任何一种方式了解问题。这里的重点是,它是同时而不是一对一地学习训练数据中的所有案例。

3)是的,一旦执行了反向传播步骤,它将对权重应用更新,而下一个训练步骤将使用新的权重。

关于python - 在神经网络的学习阶段进行反向传播后会发生什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46608664/

10-12 19:23