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

SATA— COVID-19 никогда не закончится?
RAM— Нет, дорогая! Потребуется время, чтобы все нормализовалось.

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

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

Нормализация может быть разной. В этом посте мы рассмотрим 4 основных типа нормализации:
1. Нормализация Z-показателя
2. Масштабирование минимума и максимума
3. Масштабирование журнала
4. Отсечение признаков

Нормализация Z-оценки:

В этой нормализации мы вычитаем значения признаков из их среднего значения и делим на стандартное отклонение. В связи с этим новое среднее становится 0, а стандартное отклонение становится 1. Это то же самое, что и стандартное нормальное распределение.

У нас уже есть нормализация Z-оценки, реализованная в scikit-learnAPI предварительной обработки под названием StandardScaler, и она работает очень хорошо.

Как видно сверху, большая часть данных сосредоточена вокруг начала координат.

Мин. Макс. Масштабирование:

Этот метод нормализации включает масштабирование набора данных до диапазона [0, 1] путем вычитания столбцов признаков с минимальным значением конкретного столбца и делением его на разницу минимального значения. em> и максимальные значения одного и того же столбца. Этот метод нормализации полезен, когда распределение признаков несколько однородно по своей природе.

Min Max Scaling также реализован в scikit-learn API предварительной обработки под названием MinMaxScaler.

Масштабирование журнала:

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

Хотя scikit-learn не предоставляет никакой функции для масштабирования журнала, мы можем очень легко реализовать функцию для масштабирования журнала.

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

Отсечение характеристик:

Отсечение признаков — это несколько наивная техника нормализации, в которой мы можем свободно выбирать диапазон для размещения значений наших признаков. Например, мы можем установить диапазон равным [-5, 5] и обрезать набор данных в этом диапазоне так, чтобы все значения, которые больше 5 будут обрезаны до 5, а все значения меньше -5 будут обрезаны до -5. Обратите внимание, что значения, которые уже находятся в этом диапазоне, не будут затронуты.

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

Таковы были некоторые типы методов нормализации. В scikit-learn также реализованы некоторые другие методы, такие как RobustScaler, MaxAbsScaler, normalize и т. д. См. ссылки для более подробной информации.

Фууу! Вы можете сделать перерыв, чтобы переварить все до сих пор, если хотите.

Теперь, разобравшись с нормализацией со статистической точки зрения, мы можем перейти к аспекту нормализации как слоев в нейронной сети.

Самый первый вопрос, который можно задать —

Зачем нам нужно включать слой нормализации в нейронную сеть?

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

Теперь второй вопрос может быть -

Куда мы поместим эти слои?

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

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

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

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

Здесь μ — среднее значение, а σ — стандартное отклонение. Это среднее значение и стандартное отклонение изменяются во всех слоях нормализации. Среднее значение и стандартное отклонение рассчитываются как —

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

Помните термин Si, мы будем использовать его в остальной части статьи.

Tensorflow реализует приведенную выше формулу нормализации немного по-другому с двумя дополнительными гиперпараметрами, а именно масштаб и коэффициент смещения с их обычными значениями.

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

Пакетная нормализация:

В этом методе нормализации конкретный канал (C) принимается во внимание одновременно и с набором всех образцов в партии (N). Мы можем визуализировать различные стратегии нормализации на рис. 1.

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

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

Нормализация слоя:

Эта нормализация не зависит от партии и нормализует ось каналов (C) для одной выборки за раз (N=1). Это хорошо видно на рис.1. LayerNormalization хорошо подходит для рекуррентных нейронных сетей, поскольку они не зависят от размерности пакета.

Нормализация группы:

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

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

Нормализация экземпляра:

Этот метод нормализации вводит дополнительное ограничение по сравнению с GroupNormalization и LayerNormalization. Он предлагает рассматривать только образцы, имеющие определенный размер пакета и размер канала, что делает его примерно таким же, как на рис.1. Эта нормализация также не зависит от партии и не влияет на размер партии. Они также показывают многообещающие результаты с последовательными моделями, и за последние несколько десятилетий InstanceNormalization превосходит BatchNormalization в генеративно-состязательных сетях.

Наблюдая за приведенным выше кодом для нормализации экземпляра, мы видим, что мы использовали в нем масштаб (scale=True) и коэффициент смещения (center=True).

Разобравшись с этими четырьмя нормировками, давайте сравним их результаты —

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

Ваше здоровье!!! Вы добрались до конца этой статьи. 😍

Вывод:

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

Использованная литература:

[1] https://www.tensorflow.org/addons/tutorials/layers_normalizations
[2] https://arxiv.org/pdf/1803.08494.pdf
[3] https://developers.google.com/machine-learning/data-prep/transform/normalization

Надеюсь, вам понравилось читать статью!! Пожалуйста, хлопните в ладоши, если вы это сделали. Поддерживает мотивацию :) Спасибо!