Многослойная нейронная сеть не будет предсказывать отрицательные значения - PullRequest
16 голосов
/ 24 февраля 2011

Я реализовал многослойный персептрон, чтобы предсказать грех входных векторов.Векторы состоят из четырех -1,0,1, выбранных случайным образом, и смещения, установленного на 1. Сеть должна предсказать грех суммы содержимого векторов.

например, Input = <0,1, -1,0,1> Output = Sin (0 + 1 + (- 1) + 0 + 1)

Проблема, с которой я столкнулся,что сеть никогда не предскажет отрицательное значение, а многие из значений грехов векторов отрицательны.Он отлично предсказывает все положительные или нулевые результаты.Я предполагаю, что есть проблема с обновлением весов, которые обновляются после каждой эпохи.Кто-нибудь сталкивался с этой проблемой с NN раньше?Любая помощь была бы великолепна !!

Примечание: сеть имеет 5 входов, 6 скрытых блоков в 1 скрытом слое и 1 выход. Я использую сигмовидную функцию для активаций скрытого и выходного слоев, и пробовал тонныуровень обучения (в настоящее время 0,1);

Ответы [ 2 ]

11 голосов
/ 24 февраля 2011

Прошло много времени с тех пор, как я посмотрел на многослойные персептроны, поэтому принимайте это с зерном соли.

Я бы изменил масштаб вашего проблемного домена в домен [0,1] вместо [-1,1]. Если вы посмотрите на график логистической функции:

enter image description here

Генерирует значения в диапазоне [0,1]. Я не ожидаю, что это даст отрицательные результаты. Я могу ошибаться, жестко.

EDIT :

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

Другим вариантом является гиперболический тангенс, который исходит из [-1, + 1] и не имеет констант для настройки.

3 голосов
/ 24 февраля 2011

Существует много различных видов функций активации, многие из которых предназначены для вывода значения от 0 до 1. Если вы используете функцию, которая выводит только от 0 до 1, попробуйте настроить ее так, чтобы она выводила между 1и -1.Если бы вы использовали FANN , я бы посоветовал вам использовать FANN_SIGMOID_SYMMETRIC функцию активации.

...