нейронная сеть обратного распространения, ошибка в обучении - PullRequest
6 голосов
/ 20 сентября 2011

после прочтения некоторых статей о нейронной сети (обратное распространение) я пытаюсь написать простую нейронную сеть самостоятельно.

Я решил, что нейронная сеть XOR, моя проблема в том, когда я пытаюсь обучить сетьЕсли я использую только один пример для обучения сети, скажем, 1,1,0 (как input1, input2, targetOutput).после 500 поездов + - ответ сети 0.05.но если я пытаюсь использовать более одного примера (скажем, 2 разных или все 4 возможности), сеть нацеливается на вывод 0,5 :( Я искал в Google свои ошибки, но безрезультатно: постараюсь дать как можно больше подробностейчтобы понять, что не так:

- пять проверенных сетей с 2,2,1 и 2,4,1 (входной слой, скрытый слой, выходной слой).

- выход для каждой нейронной сети, определенной:

double input = 0.0;
        for (int n = 0; n < layers[i].Count; n++)
            input += layers[i][n].Output * weights[n];

, в то время как 'i' - текущий слой, а вес - все веса от предыдущего слоя.

- ошибка последнего слоя (выходного слоя) определяется следующим образом:

value*(1-value)*(targetvalue-value);

, в то время как 'value' - это нейронный выход, а 'targetvalue' - это целевой выход для текущей нейронной сети.

- ошибка для других нейронных элементов определяется следующим образом:

foreach neural in the nextlayer 
           sum+=neural.value*currentneural.weights[neural];

- все веса в сети адаптируются по этой формуле (вес от нейронного -> нейронный 2)

weight+=LearnRate*neural.myvalue*neural2.error;

, в то время как LearnRate - это скорость обучения nework (определенная в моей сети 0,25). -смещение для каждой нервной системы определяется как:

bias+=LearnRate*neural.myerror*neural.Bias;

смещение - это постоянное значение = 1.

, что почти все, что я могу детализировать, как я уже сказал, цель на выходе - 0,5 с различными примерами обучения: (

большое спасибоза вашу помощь ^ _ ^.

1 Ответ

1 голос
/ 22 сентября 2011

Трудно сказать, где находится ошибка, не видя полный код.Одна вещь, которую вы должны тщательно проверить, состоит в том, что ваш расчет локального градиента ошибок для каждой единицы соответствует функции активации, которую вы используете на этом слое.Посмотрите здесь для общей формулы: http://www.learnartificialneuralnetworks.com/backpropagation.html.

Например, вычисление, которое вы делаете для выходного слоя, предполагает, что вы используете функцию активации логистической сигмоиды, но вы не упоминаете, чтов приведенном выше коде похоже, что вместо этого вы используете линейную функцию активации.

В принципе, для изучения XOR должно быть достаточно сети 2-2-1, хотя обучение когда-нибудь попадет в локальный минимум безвозможность сходиться к правильному состоянию.Поэтому важно не делать вывод о производительности вашего алгоритма из одной тренировки.Обратите внимание, что простой backprog обязательно будет медленным, есть более быстрые и надежные решения, такие как, например, Rprop.

Существуют книги на эту тему, которые предоставляют подробные пошаговые вычисления для простой сети (например, 'AI: Руководство по интеллектуальным системам (автор Negnevitsky), это может помочь вам отладить ваш алгоритм.В качестве альтернативы можно использовать существующую среду (например, Encog, FANN, Matlab), настроить точно такую ​​же топологию и начальные веса и сравнить расчет с вашей собственной реализацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...