Это принципиальный вопрос, касающийся теории нейронных сетей:
Почему мы должны нормализовать вход для нейронной сети?
Я понимаю, что иногда, когда, например, входные значения не числовые, необходимо выполнить определенное преобразование, но когда у нас есть числовой ввод? Почему числа должны быть в определенном интервале?
Что будет, если данные не нормализуются?
Ответы:
Это хорошо объясняется здесь .
источник
В нейронных сетях рекомендуется не только нормализовать данные, но и масштабировать их. Это предназначено для более быстрого приближения к глобальным минимумам на поверхности ошибки. Смотрите следующие картинки:
Снимки взяты из курса курса о нейронных сетях. Автор курса - Джеффри Хинтон.
источник
Некоторые входные данные для NN могут не иметь «естественно определенного» диапазона значений. Например, среднее значение может медленно, но непрерывно увеличиваться с течением времени (например, количество записей в базе данных).
В этом случае подача этого необработанного значения в вашу сеть будет работать не очень хорошо. Вы научите свою сеть значениям из нижней части диапазона, в то время как фактические входные данные будут из верхней части этого диапазона (и, возможно, выше диапазона, с которым сеть научилась работать).
Вы должны нормализовать это значение. Например, вы можете сказать сети, насколько изменилось значение с момента предыдущего ввода. Этот прирост обычно можно определить с высокой вероятностью в определенном диапазоне, что делает его хорошим входом для сети.
источник
Глядя на нейронную сеть снаружи, это просто функция, которая принимает некоторые аргументы и дает результат. Как и во всех функциях, он имеет домен (то есть набор юридических аргументов). Вы должны нормализовать значения, которые вы хотите передать в нейронную сеть, чтобы убедиться, что она находится в домене. Как и во всех функциях, если аргументы не находятся в домене, результат не гарантируется как соответствующий.
Точное поведение нейронной сети по аргументам вне домена зависит от реализации нейронной сети. Но в целом результат бесполезен, если аргументы находятся за пределами домена.
источник
Есть 2 причины, по которым мы должны нормализовать входные функции перед передачей их в нейронную сеть:
Причина 1 : Если
Feature
вDataset
большой в масштабе по сравнению с другими , то это большой масштабируется особенность становится доминирующим , и в результате этого, Предсказания нейронной сети не будет точно.Пример : в случае данных сотрудника, если мы рассмотрим возраст и зарплату, возраст будет двухзначным, а зарплата может быть 7 или 8 цифрами (1 миллион и т. Д.). В этом случае зарплата будет доминировать в прогнозе нейронной сети. Но если мы нормализуем эти функции, значения обеих функций будут лежать в диапазоне от (0 до 1).
Причина 2 : фронтальное распространение нейронных сетей связано с точечным произведением весов с входными характеристиками. Таким образом, если значения очень высоки (для данных изображения и не изображения), вычисление вывода занимает много времени вычислений, а также памяти. То же самое имеет место во время обратного распространения. Следовательно, модель сходится медленно, если входы не нормированы.
Пример : если мы выполним Классификацию изображений, размер изображения будет очень большим, так как значение каждого пикселя колеблется от 0 до 255. Нормализация в этом случае очень важна.
Ниже упоминаются случаи, когда нормализация очень важна:
источник
Я считаю, что ответ зависит от сценария.
Рассмотрим NN (нейронную сеть) как оператор F, так что F (вход) = выход . В случае, когда это отношение является линейным, так что F (A * input) = A * output , вы можете либо оставить ненормализованный ввод / вывод в их необработанных формах, либо нормализовать оба, чтобы исключить A. Очевидно, это предположение о линейности нарушается в задачах классификации или почти в любой задаче, которая выводит вероятность, где F (A * input) = 1 * output
На практике нормализация позволяет адаптировать ненастраиваемые сети, что крайне важно для экспериментаторов / программистов. Тем не менее, точное влияние нормализации будет зависеть не только от архитектуры / алгоритма сети, но также от статистического приоритета для ввода и вывода.
Более того, NN часто внедряется для решения очень сложных проблем методом черного ящика, что означает, что основная проблема может иметь очень плохую статистическую формулировку, что затрудняет оценку влияния нормализации, приводя к техническому преимуществу (становясь пригодным для использования) доминировать над его влиянием на статистику.
В статистическом смысле нормализация удаляет вариацию, которая, как считается, не является причинно-следственной в прогнозировании выходных данных, чтобы не допустить, чтобы NN изучил эту вариацию как предиктор ( NN не видит эту вариацию, следовательно, не может использовать ее ).
источник
Когда вы используете ненормализованные входные функции, функция потерь, вероятно, будет иметь очень вытянутые впадины. При оптимизации с градиентным спуском это становится проблемой, поскольку градиент будет крутым относительно некоторых параметров. Это приводит к большим колебаниям в пространстве поиска, когда вы прыгаете между крутыми склонами. Чтобы компенсировать это, вы должны стабилизировать оптимизацию с небольшими темпами обучения.
Рассмотрим особенности x1 и x2, где они варьируются от 0 до 1 и от 0 до 1 миллиона соответственно. Оказывается, соотношения для соответствующих параметров (скажем, w1 и w2) также будут большими.
Нормализация имеет тенденцию делать функцию потерь более симметричной / сферической. Их легче оптимизировать, потому что градиенты имеют тенденцию указывать на глобальный минимум, и вы можете сделать большие шаги.
источник
Причина, по которой нормализация необходима, заключается в том, что если вы посмотрите на то, как адаптивный шаг происходит в одном месте в области функции, и вы просто переносите задачу в эквивалент того же шага, переведенного каким-то большим значением в некотором направлении в домен, то вы получите разные результаты. Это сводится к вопросу адаптации линейной части к точке данных. На сколько должна двигаться фигура, не поворачиваясь, и на сколько она должна поворачиваться в ответ на одну тренировку? Нет смысла менять процедуру адаптации в разных частях домена! Поэтому нормализация необходима для уменьшения разницы в результатах обучения. Я не написал это, но вы можете просто взглянуть на математику для простой линейной функции и на то, как она обучается одной тренировочной точкой в двух разных местах. Эта проблема, возможно, была исправлена в некоторых местах, но я не знаком с ними. В ALN проблема была исправлена, и я могу отправить вам сообщение, если вы напишите wwarmstrong AT shaw.ca
источник
Скрытые слои используются в соответствии со сложностью наших данных. Если у нас есть входные данные, которые являются линейно разделимыми, то нам не нужно использовать скрытый слой, например, вентиль ИЛИ, но если у нас есть нелинейно-разделяемые данные, то нам нужно использовать скрытый слой, например, логический вентиль ExOR. Количество узлов, взятых на любом слое, зависит от степени перекрестной проверки нашего вывода.
источник