首先我想說的是,我是真正的新的神經網絡,我不明白這個問題非常好;)彈性BP神經網絡 - 約梯度
我做的我的第一個C#實現反向傳播神經網絡。我用XOR測試過它,它看起來很有效。
現在我想改變我的實現使用彈性反向傳播(Rprop - http://en.wikipedia.org/wiki/Rprop)。
的定義說:「RPROP只考慮到了所有的模式(而不是大小)的偏導數的符號,並在每個獨立的行爲‘重量’
有人能告訴我在什麼偏導數。所有的模式是,我應該怎麼計算這個偏導數在隱藏層神經元
非常感謝
更新:?對這個Java代碼
我的實現基礎:www_.dia.fi。 upm.es/~jamartin/downloads/bpnn.java
我backPropagate方法看起來像這樣:
public double backPropagate(double[] targets)
{
double error, change;
// calculate error terms for output
double[] output_deltas = new double[outputsNumber];
for (int k = 0; k < outputsNumber; k++)
{
error = targets[k] - activationsOutputs[k];
output_deltas[k] = Dsigmoid(activationsOutputs[k]) * error;
}
// calculate error terms for hidden
double[] hidden_deltas = new double[hiddenNumber];
for (int j = 0; j < hiddenNumber; j++)
{
error = 0.0;
for (int k = 0; k < outputsNumber; k++)
{
error = error + output_deltas[k] * weightsOutputs[j, k];
}
hidden_deltas[j] = Dsigmoid(activationsHidden[j]) * error;
}
//update output weights
for (int j = 0; j < hiddenNumber; j++)
{
for (int k = 0; k < outputsNumber; k++)
{
change = output_deltas[k] * activationsHidden[j];
weightsOutputs[j, k] = weightsOutputs[j, k] + learningRate * change + momentumFactor * lastChangeWeightsForMomentumOutpus[j, k];
lastChangeWeightsForMomentumOutpus[j, k] = change;
}
}
// update input weights
for (int i = 0; i < inputsNumber; i++)
{
for (int j = 0; j < hiddenNumber; j++)
{
change = hidden_deltas[j] * activationsInputs[i];
weightsInputs[i, j] = weightsInputs[i, j] + learningRate * change + momentumFactor * lastChangeWeightsForMomentumInputs[i, j];
lastChangeWeightsForMomentumInputs[i, j] = change;
}
}
// calculate error
error = 0.0;
for (int k = 0; k < outputsNumber; k++)
{
error = error + 0.5 * (targets[k] - activationsOutputs[k]) * (targets[k] - activationsOutputs[k]);
}
return error;
}
因此,我可以使用change = hidden_deltas[j] * activationsInputs[i]
變量作爲梯度(偏導數),用於檢查所述唱?
我昨天晚上在調試我的實現上花了很多時間,我擔心我不瞭解這個算法。你知道它有什麼好的描述嗎? – 2010-05-20 08:44:10