Почему мы должны нормализовать ввод для искусственной нейронной сети? - PullRequest
116 голосов
/ 13 января 2011

Это принципиальный вопрос, касающийся теории нейронных сетей:

Почему мы должны нормализовать вход для нейронной сети?

Я понимаю, что иногда, например, когдавходные значения не числовые, определенное преобразование должно быть выполнено, но когда у нас есть числовой ввод?Почему числа должны быть в определенном интервале?

Что будет, если данные не нормализуются?

Ответы [ 7 ]

86 голосов
/ 13 января 2011

Это хорошо объяснено здесь .

Если входные переменные объединены линейно, как в MLP, то это редко строго необходимо стандартизировать входные данные, по крайней мере, в теории. причина в том, что любое изменение масштаба входного вектора может быть эффективно отменено изменяя соответствующие веса и уклоны, оставляя вас с точным те же результаты, что и раньше. Тем не менее, существует множество практических причины, по которым стандартизация входных данных может ускорить обучение и уменьшить шансы застрять в местной оптиме. Кроме того, снижение веса и байесовский оценка может быть более удобной с помощью стандартизированных входных данных.

49 голосов
/ 28 января 2015

В нейронных сетях рекомендуется не только нормализовать данные, но и масштабировать их. Это предназначено для более быстрого приближения к глобальным минимумам на поверхности ошибки. Смотрите следующие фотографии: error surface before and after normalization

error surface before and after scaling

Фотографии взяты из курса coursera о нейронных сетях. Автор курса - Джеффри Хинтон.

18 голосов
/ 13 января 2011

Некоторые входы для NN могут не иметь «естественно определенного» диапазона значений.Например, среднее значение может медленно, но непрерывно увеличиваться с течением времени (например, количество записей в базе данных).

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

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

10 голосов
/ 13 января 2011

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

Точное поведение нейронной сети для аргументов вне домена зависит от реализации нейронной сети. Но в целом результат бесполезен, если аргументы находятся за пределами домена.

1 голос
/ 28 октября 2014

Причина, по которой нормализация необходима, состоит в том, что если вы посмотрите на то, как адаптивный шаг происходит в одном месте в области функции, и вы просто переносите задачу на эквивалент того же шага, переведенного некоторым большим значением в некоторомНаправление в домене, тогда вы получите разные результаты.Это сводится к вопросу адаптации линейной части к точке данных.Сколько должна двигаться фигура, не поворачиваясь, и сколько она должна поворачиваться в ответ на одну тренировку?Нет смысла менять процедуру адаптации в разных частях домена!Поэтому нормализация необходима для уменьшения разницы в результатах тренировки.Я не написал это, но вы можете просто посмотреть на математику для простой линейной функции и на то, как она обучается одной тренировочной точкой в ​​двух разных местах.Эта проблема, возможно, была исправлена ​​в некоторых местах, но я не знаком с ними.В ALN проблема была исправлена, и я могу выслать вам документ, если вы напишите wwarmstrong AT shaw.ca

0 голосов
/ 11 декабря 2017

Я полагаю, что ответ зависит от сценария.

Рассмотрим NN (нейронную сеть) как оператор F, так что F (вход) = выход . В случае, когда это отношение является линейным, так что F (A * input) = A * output , вы можете либо оставить ненормализованный ввод / вывод в их необработанных формах, либо нормализовать оба, чтобы исключить A Очевидно, что это предположение о линейности нарушается в задачах классификации или почти в любой задаче, которая выводит вероятность, где F (A * input) = 1 * output

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

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

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

0 голосов
/ 16 сентября 2014

Скрытые слои используются в соответствии со сложностью наших данных.Если у нас есть входные данные, которые являются линейно разделимыми, то нам не нужно использовать скрытый слой, например, вентиль ИЛИ, но если у нас есть нелинейно разделимые данные, то нам нужно использовать скрытый слой, например, логический вентиль ExOR.Количество узлов, взятых на любом слое, зависит от степени перекрестной проверки нашего вывода.

...