Реализация перцептрона с алгоритмом обратного распространения

Я пытаюсь реализовать двухслойный перцептрон с обратным распространением, чтобы решить проблему четности.Сеть имеет 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

5
задан pasawaya 17 August 2012 в 15:28
поделиться