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

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

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

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

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

10 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

пример:

√(3-1)^2+(1000-900)^2 ≈ √(1000-900)^2

Здесь (3-1) практически не влияет на результат, и, следовательно, ввод, соответствующий этим значениям, считается бесполезным по модели.

Обратите внимание на следующее:

  1. При кластеризации используются евклидовы или другие меры расстояния.
  2. Сетевые сети используют алгоритм оптимизации для минимизации функции затрат (например, MSE).

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

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

Другие вопросы по тегам