Прежде всего я хочу сказать, что я действительно новым для нейронных сетей, и я не понимаю, что это очень хорошо;)Плотных нейронная сеть обратного распространения - вопрос о градиенте
Я сделал свою первую C# реализацию из backpropagation нейронной сети. Я тестировал его с помощью XOR, и он выглядит так, как будто он работает.
Теперь я хотел бы изменить свою реализацию, чтобы использовать упругую обратную прокрутку (Rprop - http://en.wikipedia.org/wiki/Rprop).
определение говорит: «Rprop принимает во внимание только знак частной производной по всем паттернам (не магнитуды), и действует независимо друг от друга на каждый„весе“
Может кто-нибудь сказать мне, что частная производная над. все модели и как я должен вычислить эту частную производную для нейрона в скрытом слое
Спасибо большое
UPDATE:.
Моя реализация базы на этом 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]
переменную как градиент (частной производной) для проверки петь?
Вчера вечером я провел отладку своей реализации, и у меня возникают проблемы с тем, что я не понимаю этот алгоритм. Вы знаете хорошее описание этого? –