我在网上找到了一个示例,其中包含一个反向传播错误并调整权重的方法。我想知道这是如何工作的以及使用了什么权重更新算法。它可能是梯度下降吗?
/**
* all output propagate back
*
* @param expectedOutput
* first calculate the partial derivative of the error with
* respect to each of the weight leading into the output neurons
* bias is also updated here
*/
public void applyBackpropagation(double expectedOutput[]) {
// error check, normalize value ]0;1[
for (int i = 0; i < expectedOutput.length; i++) {
double d = expectedOutput[i];
if (d < 0 || d > 1) {
if (d < 0)
expectedOutput[i] = 0 + epsilon;
else
expectedOutput[i] = 1 - epsilon;
}
}
int i = 0;
for (Neuron n : outputLayer) {
ArrayList<Connection> connections = n.getAllInConnections();
for (Connection con : connections) {
double ak = n.getOutput();
double ai = con.leftNeuron.getOutput();
double desiredOutput = expectedOutput[i];
double partialDerivative = -ak * (1 - ak) * ai
* (desiredOutput - ak);
double deltaWeight = -learningRate * partialDerivative;
double newWeight = con.getWeight() + deltaWeight;
con.setDeltaWeight(deltaWeight);
con.setWeight(newWeight + momentum * con.getPrevDeltaWeight());
}
i++;
}
// update weights for the hidden layer
for (Neuron n : hiddenLayer) {
ArrayList<Connection> connections = n.getAllInConnections();
for (Connection con : connections) {
double aj = n.getOutput();
double ai = con.leftNeuron.getOutput();
double sumKoutputs = 0;
int j = 0;
for (Neuron out_neu : outputLayer) {
double wjk = out_neu.getConnection(n.id).getWeight();
double desiredOutput = (double) expectedOutput[j];
double ak = out_neu.getOutput();
j++;
sumKoutputs = sumKoutputs
+ (-(desiredOutput - ak) * ak * (1 - ak) * wjk);
}
double partialDerivative = aj * (1 - aj) * ai * sumKoutputs;
double deltaWeight = -learningRate * partialDerivative;
double newWeight = con.getWeight() + deltaWeight;
con.setDeltaWeight(deltaWeight);
con.setWeight(newWeight + momentum * con.getPrevDeltaWeight());
}
}
}
答案 0 :(得分:2)
在我看来,此解决方案使用stochastic gradient descent。它与常规梯度体面之间的主要区别在于,每个示例的梯度都是近似的,而不是为所有示例计算,然后选择最佳方向。这是实现反向传播的常用方法,甚至对渐变体面有一些优势(可以避免一些局部最小值)。我相信这篇文章也说明了这个想法,并且还有很多其他文章解释了反向传播背后的主要思想。
答案 1 :(得分:1)
这篇丑陋的文章似乎描述了完全相同的算法版本:http://www.speech.sri.com/people/anand/771/html/node37.html。我的大学论文中有相同的公式,但遗憾的是:a)它们不在网上; b)他们使用你不会理解的语言。
对于梯度下降,该算法类似于梯度下降,但不能保证达到最佳位置。在每个步骤中,通过网络边缘更改其值来进行更改,以便训练示例值的概率增加。