gpt4 book ai didi

neural-network - 弹性反向传播神经网络 - 关于梯度的问题

转载 作者:行者123 更新时间:2023-12-01 02:56:15 25 4
gpt4 key购买 nike

首先我想说我对神经网络真的很陌生,我不太了解它;)

我已经实现了反向传播神经网络的第一个 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]吗?变量作为用于检查唱歌的梯度(偏导数)?

最佳答案

我认为“所有模式”只是意味着“在每次迭代中”......看看 RPROP paper

对于偏导数:您已经实现了正常的反向传播算法。这是一种有效计算梯度的方法……在那里您可以计算单个神经元的 δ 值,它们实际上是负 ∂E/∂w 值,即作为权重函数的全局误差的偏导数。

因此,不是将权重与这些值相乘,而是取两个常数(η+ 或 η-)之一,具体取决于符号是否已更改

关于neural-network - 弹性反向传播神经网络 - 关于梯度的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2865057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com