Давайте начнем с понимания необходимости нормализации и того, что это такое.

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

Если вы посмотрите на значения функции «Площадь», они могут варьироваться от сотен до тысяч, например, 800 кв. Футов, 1500 кв. Футов, 1200 кв. Футов. А значения признака - «Нет. of rooms »попадет в диапазон 2, 4, 1, 5.

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

Как эти разные диапазоны значений функций влияют на модель?

Веса / параметры (w1, w2), связанные с этими функциями (x1 - «количество комнат», x2- «Площадь»), также масштабируются во время обучения в соответствии со значениями соответствующих функций.

Если вы построите контурный график «функции затрат» относительно «w1 и w2» (для пояснения, мы строим только w1 и w2 и игнорируем другие веса), он будет выглядеть так:

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

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

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

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

Как нормализовать данные?

Среднее значение вычитания: μ = (1 / m) Σ x1 (i)) -среднее значений признаков, i от 0 до m (количество образцов)

Дисперсия: σ = (1 / м) Σ x1 (i) ²

Переназначить x1 = (x1- μ) / σ

Точно так же все функции можно масштабировать со средним значением и дисперсией.

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

Подобно тому, как мы нормализуем входные характеристики, мы можем нормализовать единицы активации в слоях нейронной сети. Рассмотрим следующую нейронную сеть:

Зачем нужна пакетная нормализация?

Сеть имеет 2 скрытых слоя a1 и a2. Уровень активации a2 зависит от значений a1.

По мере обучения сети значения w1, b1, z1, связанные со слоем a1, также обновляются (с обратным распространением):

Следовательно, возможно, что значения a1 испытают ковариативный сдвиг - как показано на диаграмме ниже (измените область распределения, что не очень хорошо для предсказания невидимых примеров), делая изучение a2 другим (не очень подходящим).

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

Этапы пакетной нормализации

Фактически мы нормализуем z. поскольку a = g (z).

Нормализация пакета во время тестирования

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

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