Вход
Регистрация

BP и "проблема XOR"

Добрый день, у меня следующий вопрос. Я занимаюсь нейросетями некоторое время, пробую решать задачи классификации. Почитал теорию, пощупал backpropagation, написал программу. И тут у меня возник резонный вопрос. Backpropagation, насколько я знаю, рассчитан на обыкновенные нейросети, т.е. на выходе нейрона имеем значение сжимающей функции от взвешенной сумы входов, и все. В то же время существует такая вещь, как “проблема XOR”. Вы, очевидно, с ней знакомы. Так вот, получается, что вышеописаной сетью (и, соответсвенно, алгоритмом BP) нельзя решить проблему XOR (по крайней мере, я такого способа «без извращений» не знаю). В принципе, это закономерно и подтверждается теорией и практикой. С практической точки зрения – я пробовал использовать свой код, и не только свой, результата нет. С теоретической: в литературе встречал решение проблемы XOR при помощи нейросети, в которой в нейронах были «пороги». Т.е., если выходной сигнал превышает некоторое пороговое значение, то он просто сбрасывается в 0. Если подойти к нейросети с т.з. булевских функций,то: следует вспомнить, чть есть как минимум две полных системы булевских функций. Это (AND,OR,NOT) и (XOR, NOT), которые есть эквивалентными, т.е. могут выражаться друг через друга. Так вот, если рассматривать нейросеть с т.з. булевых функций, то в сети не хватает такой операции как NOT. AND и OR есть, а NOT – нету. Аналогом NOT для сети с действительным аргументом, по моему мнению, есть функция (1/x). То есть, нейросеть не реализует полную систему булевских функций, соответственно, от нее нельзя ожидать решения проблемы XOR. Введение «порога» как раз и есть попыткой восполнить этот пробел. Но введение порога также вводит ряд вопросов, например, каким должно быть начальное значение порога, и каким образом оно может изменяться в процессе обучения сети. Интересно было бы знать, какие существуют подходы к решению этой проблемы – возможно, модификации BP, или какие-то другие обучающие алгоритмы? Заранее спасибо :)