Выход нейронной сети: масштабирование диапазона вывода

Выходной слой моей нейронной сети (3 слоя) использует сигмоид в качестве активации, которая выводит только в диапазоне [0-1]. Однако, если я хочу обучить его для выходных данных, выходящих за пределы [0-1], скажем, в тысячах, что мне делать?

Например, если я хочу тренироваться

ввод ----> вывод

0 0 ------> 0

0 1 ------> 1000

1000 1 ----> 1

1 1 -------> 0

Моя программа работает для AND, OR, XOR и т. д. Поскольку ввод-вывод все в двоичном формате.

Были некоторые предложения по использованию,

Активация:


y = lambda*(abs(x)1/(1+exp(-1(x))))

Производная активации:


лямбда*(абс(у)у(1-у))

Это не сходится для упомянутого шаблона обучения (если я не сделал ничего плохого). Есть какие-нибудь предложения, пожалуйста?


person Ashikur Rahman    schedule 28.01.2012    source источник


Ответы (2)


Для задач классификации принято использовать сигмовидную/логистическую функцию активации в выходном слое, чтобы получить правильные значения вероятности в диапазоне [0,1]; в сочетании с кодированием 1 из N для многоклассовой классификации каждый вывод узла будет представлять вероятность того, что экземпляр принадлежит каждому значению класса.

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

Вы также должны быть осторожны с масштабированием входных объектов (например, путем нормализации всех объектов в диапазоне [-1,1]).

person Amro    schedule 28.01.2012
comment
Привет спасибо ! Но чтобы реализовать ваше предложение для случая регрессии, как мне нужно изменить свой код, например, я использую обратное распространение, где я использовал производную сигмоида для распространения ошибки. (speech.sri.com/people/anand/771/html/node37.html) , я использовал этот алгоритм , теперь, если я не буду использовать сигмоид в выводе, что будет в этом случае? И если я хочу обучить только упомянутый шаблон, какой тип топологии будет лучше? Регрессия или классификация? Я имею в виду, что бы вы сделали? - person Ashikur Rahman; 29.01.2012
comment
вместо сигмовидной функции активации в выходном слое используйте функцию идентификации f(x) = x. Кроме того, это целевой атрибут, который вы пытаетесь предсказать с помощью нейронной сети, которая определяет тип проблемы, с которой вы столкнулись: категориальные/номинальные значения (классификация, например: классификация писем как спам/не спам) против числовых значений (регрессия, например : предсказание цен на акции). - person Amro; 29.01.2012

Очевидными решениями являются масштабирование выходных данных до нужных вам значений или нормализация обучающих данных до диапазона [0,1]. Я также не могу придумать какой-либо априорной причины, по которой масштабирование должно быть линейным (хотя оно, очевидно, хочет быть монотонно возрастающим), поэтому вы можете возиться с логарифмическими функциями здесь.

Над какой проблемой вы работаете, что у вас такие большие диапазоны?

person Novak    schedule 28.01.2012
comment
1. Нужно ли масштабировать выход каждого нейрона? Или только выходные нейроны? 2. Если я нормализую ввод, должен ли я также нормализовать вывод? и как нормализовать вывод? вместе с вводом? 3. Как мне возиться с функцией журнала? 4. Мои данные засекречены, мне нужно обучить упомянутый шаблон, что бы вы предложили? - person Ashikur Rahman; 29.01.2012
comment
Ваши входные данные такие, какие они есть; Я бы оставил их в покое. То, что вы пытаетесь сделать, это сопоставить диапазон выходных данных, предоставляемых вашими выходными нейронами, со значениями, которые диктуют ваши обучающие данные. Вы можете сделать это, либо изменив передаточные функции выходных нейронов напрямую, либо увеличив их при необходимости, либо уменьшив выходные данные, продиктованные обучающими данными. В каком-то смысле все они эквивалентны. Нейроны остаются в покое. - person Novak; 29.01.2012