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


151

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

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

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

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


1
Я голосую, чтобы закрыть этот вопрос как не по теме, потому что он принадлежит Stats SE или AI SE.
nbro

Ответы:


101

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

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


2
Привет, в MLPs, не может ли стандартизация функций при использовании постоянной скорости обучения вызывать чрезмерную / недостаточную компенсацию в коррекциях обратного распространения для разных измерений? Мне интересно из следующего поста, является ли это исключительно для CNN, или если MLP могут разделить эту проблему: stats.stackexchange.com/questions/185853/…
Остин

Проблема: градиентный спуск опц. Процесс может занять гораздо больше времени. Зачем? Когда объекты имеют разный масштаб (x1 = 0-1 и x2 = 0..1000), поверхность функции ошибки может стать удлиненной. Значение: разные шкалы для разных оттенков (w1, w2). Но скорость обучения одинакова для всех димов -> шаги в удлиненном диме (w2) очень малы, пока не достигнут местного минимума. Проблема: Невозможно включить LR, так как он пропустит локальный мин в другом dim (w1). Смотрите демо на youtube.com/watch?reload=9&v=UIp2CMI0748
Dekel

Вот линейный пример, где без масштабирования все очень плохо: stackoverflow.com/q/59319643 . Есть идеи почему?
AlwaysLearning

62

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

поверхность ошибки до и после масштабирования

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


14
Было бы мило с вашей стороны отдать должное автору рисунка, который вы разместили. Графика была явно взята с курса Джеффри Хинтона .
Рикардо Круз

5
Я нашел это видео действительно полезным для объяснения диаграммы выше, что само по себе не было очевидным для меня.
chris838

21

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

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

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


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

11

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

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


16
Если взять обычную функцию активации (ReLu или Sigmoid), доменом всегда будет все пространство R ^ n. Так что это не может быть причиной для нормализации данных.
Joker123

1
Это также не объясняет, почему изображения нормализованы, так как они уже имеют домен 0-255
DollarAkshay

4

Есть 2 причины, по которым мы должны нормализовать входные функции перед передачей их в нейронную сеть:

Причина 1 : Если Featureв Datasetбольшой в масштабе по сравнению с другими , то это большой масштабируется особенность становится доминирующим , и в результате этого, Предсказания нейронной сети не будет точно.

Пример : в случае данных сотрудника, если мы рассмотрим возраст и зарплату, возраст будет двухзначным, а зарплата может быть 7 или 8 цифрами (1 миллион и т. Д.). В этом случае зарплата будет доминировать в прогнозе нейронной сети. Но если мы нормализуем эти функции, значения обеих функций будут лежать в диапазоне от (0 до 1).

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

Пример : если мы выполним Классификацию изображений, размер изображения будет очень большим, так как значение каждого пикселя колеблется от 0 до 255. Нормализация в этом случае очень важна.

Ниже упоминаются случаи, когда нормализация очень важна:

  1. K-средних
  2. K-ближайшие соседи
  3. Анализ основных компонентов (PCA)
  4. Градиентный спуск

2

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

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

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

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

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


2

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

Рассмотрим особенности x1 и x2, где они варьируются от 0 до 1 и от 0 до 1 миллиона соответственно. Оказывается, соотношения для соответствующих параметров (скажем, w1 и w2) также будут большими.

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


1

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


-9

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.