Многослойная нейронная сеть не будет прогнозировать отрицательные значения
Я реализовал многослойный персептрон для прогнозирования греха входных векторов. Векторы состоят из четырех -1,0,1, выбранных случайным образом, и смещения, установленного в 1. Сеть должна предсказать грех суммы содержимого векторов.
Например, Input = < 0,1, -1,0,1 > Выход = Sin (0 + 1 + (- 1) + 0 + 1)
Проблема, с которой я сталкиваюсь, заключается в том, что сеть никогда не будет прогнозировать отрицательное значение, а многие из значений "sin" векторов отрицательны. Он прекрасно предсказывает все положительные или нулевые выходы. Я предполагаю, что существует проблема с обновлением весов, которые обновляются после каждой эпохи. Кто-нибудь сталкивался с этой проблемой с NN раньше? Любая помощь вообще будет замечательной!
Примечание: сеть имеет 5 входов, 6 скрытых единиц в 1 скрытом слое и 1 выход. Я использую сигмовидную функцию для скрытых и выходных уровней активации и пробовал тонны обучения (в настоящее время 0,1);
Ответы
Ответ 1
Будучи долгое время с тех пор, как я посмотрел на многослойные персептроны, возьмите это с большим количеством соли.
Я переделаю ваш проблемный домен в домен [0,1] вместо [-1,1]. Если вы посмотрите на график логистической функции:
![enter image description here]()
Он генерирует значения между [0,1]. Я не ожидаю, что он принесет отрицательные результаты. Возможно, я ошибаюсь, жестко.
ИЗМЕНИТЬ
Фактически вы можете расширить логистическую функцию в проблемную область. Используйте обобщенную логистическую кривую, задающую параметры A и K для границ вашего домена.
Другим вариантом является гиперболический тангенс, который идет от [-1, + 1] и не имеет констант для настройки.
Ответ 2
Существует множество различных функций активации, многие из которых предназначены для вывода значения от 0 до 1. Если вы используете функцию, которая выводит только от 0 до 1, попробуйте отрегулировать ее так, чтобы она выходила между 1 и -1. Если вы использовали FANN, я бы сказал вам использовать FANN_SIGMOID_SYMMETRIC.