Я пытаюсь реализовать двухслойный перцептрон с обратным распространением, чтобы решить проблему четности.Сеть имеет 4 двоичных входа, 4 скрытых блока на первом уровне и 1 выход на втором уровне. Я использую этот для справки, но у меня проблемы с конвергенцией.
Во-первых, я отмечу, что я использую сигмовидную функцию для активации, и поэтому производной является (насколько я понимаю) сигмоид (v) * (1 - сигмоид (v)). Итак, это используется при вычислении значения дельты.
Итак, в основном я настраиваю сеть и прохожу всего несколько эпох (просматриваю все возможные шаблоны - в данном случае 16 шаблонов ввода). После первой эпохи веса немного меняются. После второго веса не меняются и остаются такими, сколько бы эпох я ни пробежал. Сейчас я использую скорость обучения 0,1 и смещение +1.
Процесс обучения сети представлен ниже в псевдокоде (который я считаю правильным согласно источникам, которые я проверил):
Шаг прямой связи:
v = SUM[weight connecting input to hidden * input value] + bias
y = Sigmoid(v)
set hidden.values to y
v = SUM[weight connecting hidden to output * hidden value] + bias
y = Sigmoid(v)
set output value to y
Обратное распространение выходного уровня:
error = desired - output.value
outputDelta = error * output.value * (1 - output.value)
Обратное распространение скрытого Уровень:
for each hidden neuron h:
error = outputDelta * weight connecting h to output
hiddenDelta[i] = error * h.value * (1 - h.value)
Обновить веса:
for each hidden neuron h connected to the output layer
h.weight connecting h to output = learningRate * outputDelta * h.value
for each input neuron x connected to the hidden layer
x.weight connecting x to h[i] = learningRate * hiddenDelta[i] * x.value
Этот процесс, конечно, проходит через эпохи, и изменения веса сохраняются. Итак, мой вопрос: есть ли какие-либо причины, по которым веса остаются постоянными после второй эпохи? При необходимости я могу опубликовать свой код, но в данный момент я надеюсь на что-то очевидное, что я не замечаю. Спасибо всем!
РЕДАКТИРОВАТЬ: Вот ссылки на мой код, предложенные sarnold:
MLP.java: http://codetidy.com/1903
Neuron.java: http://codetidy.com/1904
Pattern.java: http: // codetidy .com / 1905
input.txt: http://codetidy.com/1906