В настоящее время я пытаюсь создать трехслойную нейронную сеть. Когда я начал пытаться тренироваться для XOR, мне это пришло в голову:
double NewWeight(double oldWeight){
return oldWeight+(MeanSquaredError*input*learningRate);
}
Это формула для нового веса в соответствии с http://natureofcode.com/book/chapter-10-neural-networks/
Во-первых, если у меня будет нулевой ввод независимо от ошибки, вес останется прежним. Это решается с помощью смещения?
Во-вторых, нейронные сети часто имеют более двух входов (например, в XOR). В этом случае, вам нужно добавить два входа? Или, возможно, найти среднее значение веса с отдельными входами?
Если вы предлагаете использовать другую новую весовую функцию, пожалуйста, не публикуйте уравнение без объяснения символов, стоящих за ним. Спасибо!
Во-первых, уклон ничего не меняет. Обычно смещение реализуется путем дополнительного ввода с постоянной 1 и весом в качестве смещения. Увидеть https://en.wikipedia.org/wiki/Perceptron#Definitions.
Во-вторых, вы рассчитываете веса для каждого ребра в вашей сети. Итак, если у вас есть два входа, вы рассчитываете веса для каждого из них.
Я бы сказал, что если у вас есть 0 в качестве ввода, у вас нет информации. Без информации вы не можете сказать, как изменить вес. Ваша функция абсолютно верна для обратного распространения.
Других решений пока нет …