На заметке:

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

Говоря еще более небрежно: мы хотим, чтобы все наши данные были нормальными.

Пакетная нормализация позволяет нам это сделать.

Предпосылка на практике проистекает из того, как мы знаем, что входной слой 1 (ваши обработанные обучающие данные со значениями x₁, x₂, …, xₙ), обучает его параметры (веса w₁, смещение b₁) лучше/быстрее при нормализации — вокруг нормального распределения X ~𝒩(μ, σ).

Пакетная нормализация (BN) спрашивает, можем ли мы нормализовать значения во всех последующих скрытых слоях, таких как активированный слой 1 (a₂), чтобы обучать w₂, b₂ лучше/быстрее?

Изучая фотографию выше, после перехода от слоя 1 (входной слой) со значениями x₁, x₂, …, xₙ к активированному слою a₁ с помощью скорректированных параметров w₁ и b₁ мы нормализуем значения z₁, z₂, …, zₘ в a₁ с нормой партии, чтобы параметры w₂ и b₂ обучались быстрее/лучше. А затем скрытый слой a₂ и так далее. И он действительно тренируется НАМНОГО быстрее.

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

Удивительно, но это не было соглашением до основополагающей статьи 2015 года, написанной парой исследователей Google, Кристианом Сегеди и Сергеем Иоффе, которые показали, что могут применять пакетную нормализацию к самой эффективной сети классификации ImageNet и соответствовали ее производительности, используя только 7% шаги обучения.

Что такое алгоритм пакетной нормализации, на самом деле, что такое концепция нормализации или пакетов?

Нормализация – это процесс приведения зашифрованных данных в широком диапазоне значений к стандартизированному или "нормальному" диапазону. Обычно это делается с помощью приведенных ниже формул. Это приводит наши данные из диапазона 0–60 и домена от -200 до 0 в «нормализованную» плоскость xy от -2 до 2.

Пакет – это подмножество данных или выборка из большого набора данных. Обычно содержит около 64, 128 или 512 уникальных входных данных в зависимости от размера набора данных. По сути, он действует как репрезентативная выборка.

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

Эта функция, линейная карта, преобразование и т. д. называются пакетным нормализующим преобразованием.

Почему это не называется пакетным нормализующим преобразованием? без понятия.

Алгоритм BN выглядит следующим образом:

Реализация BN.Для некоторых промежуточных значений (z₁, z₂, …, zₘ) произвольного скрытого слоя мы применяем алгоритм:

//значение мини-пакета

μ_𝔅 – это среднее эмпирическое значение, вычисляемое так же, как и в 4-м классе, путем сложения всех значений (z₁, z₂, …, zₘ) и деления на количество подсчитанных значений (m).

//мини-партионная дисперсия

σ²_𝔅 рассчитывается путем суммирования разницы каждой точки данных со средним значением (после возведения в квадрат, чтобы избежать отрицательных чисел), а затем деления на количество подсчитанных значений (m).

// нормализовать

x̂ᵢ нормализуется с добавлением константы ε, чтобы предотвратить деление на слишком маленькие значения или на ноль. Это более или менее дает нам стандартное среднее значение = 0 и единичную дисперсию = 1.

// масштаб и сдвиг

Если мы не распределяем наши скрытые узлы (z₁, z₂, …, zₘ), чтобы всегда иметь среднее значение 0, var 1, поэтому мы корректируем наши значения в слое активации с помощью шкалы гаммы (γ) и сдвига (смещения) бета (𝛽), где γ, 𝛽 — обучаемые параметры модели, отсюда и формула BNᵧ ᵦ. Это позволяет нам установить среднее значение yᵢ, γ таким, каким мы хотим его видеть. То же самое касается 𝛽.

Если было решено, что γ = 1 и 𝛽 = 0, yᵢ ничем не отличается от x̂ᵢ. В противном случае мы всегда можем изменить это последнее уравнение, чтобы получить предыдущее значение:

x̂ᵢ = (yᵢ — 𝛽)/γ

Когда это «масштабирование и сдвиг» полезно? Ну, например, если у нас есть сигмовидная функция активации, мы могли бы захотеть иметь большую (более широкую) дисперсию или среднее значение, отличное от нуля, чтобы воспользоваться нелинейностью сигмовидной функции. Вместо того, чтобы центрировать кластер всех наших значений в линейной области сигмоиды (показанной на графике a), используя параметры масштабирования и сдвига γ и 𝛽, мы можем расширить до диапазона значений, которые алгоритм машинного обучения может центрировать в любом месте, где он хочет, с любой дисперсией, которую он хочет (b). Это позволяет определить стандартизированное среднее значение и дисперсию наших скрытых слоев с помощью того, что алгоритм считает подходящим, что может даже быть средним = 0, а дисперсия = 1.

Идя дальше, преобразование BN — это дифференцируемое преобразование, которое вводит нормализованные активации в сеть. При обучении нам необходимо распространить обратно градиент потерь (ℓ) через это преобразование, а также вычислить градиенты относительно параметров (γ, 𝛽) преобразования BN. Таким образом, идя от окончательной формулы преобразования BN назад, мы можем вернуться к скрытому слою раньше.

В уравнении (1) мы берем производную по yᵢ, чтобы получить x̂ᵢ. Используя это уравнение, мы можем получить производную по дисперсии (σ²) в (2).

Разбивая это на две части по цепному правилу, мы получаем производную по среднему значению (μ). И комбинируя (1), (2) и (3), мы можем получить наши исходные данные для каждого xᵢ.

Уравнения (5) и (6) помогают нам получить наши предыдущие параметры (γ, 𝛽) преобразования BN. Чтобы получить четкое руководство по каждому шагу, посмотрите руководство г-на Янника Килчера на youtube.

Примечание

Существует непреднамеренный побочный эффект — BN имеет весьма незначительный эффект регуляризации.

Каждая мини-партия 𝔅 размером m(z₁, z₂, …, zₘ) масштабируется по среднему значению и дисперсии, рассчитанным только для этой мини-партии. Поскольку оно масштабируется только по среднему значению и дисперсии из одного выборочного подмножества размером m=64 или 128, а не по среднему/дисперсии всего набора данных, среднее/дисперсия пакета имеет некоторый шум. . И поскольку среднее/дисперсия зашумлена (поскольку она оценивается с небольшой выборкой данных), процесс масштабирования, переход от (z₁, z₂, …, zₘ) к (~ z₁, ~ z₂, …, ~ zₘ), немного шумно, а также.

Подобно выпадению, он добавляет шум к активациям каждого скрытого слоя. Выпадение имеет мультипликативный шум от умножения на 0 или 1, тогда как BN имеет мультипликативный шум (от умножения на стандартное dev, σ) и аддитивный шум от вычитания (также известного как отрицательное сложение) среднего значения, μ. Добавляя шум к каждому скрытому узлу, подобно выпадению, скрытый узел ниже по течению вынужден не полагаться ни на один скрытый блок, и поэтому имеет эффект регуляризации.

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

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

Вывод

Мы знаем, что нормализация входных признаков в меньший диапазон значений (например, от 0–1, от -2 до 2 или с помощью логистической сигмоиды) может ускорить обучение параметров, весов w и смещения б. Интуиция, лежащая в основе пакетной нормализации, заключается в том, что мы делаем то же самое, но для каждого скрытого слоя нашей нейронной сети, а не только для исходной входной матрицы.

Источники

[1] Почему данные должны быть нормализованы перед обучением нейронной сети

[2] Пакетная нормализация и отсев в нейронных сетях с Pytorch

[3] Пакетная нормализация: ускорение обучения глубокой сети за счет уменьшения внутреннего ковариатного сдвига

[4] Пакетная нормализация: величайший прорыв в глубоком обучении

[5] 【深度学习】批归一化 (Пакетная нормализация)

[6] Пакетная нормализация: ускорение глубокого обучения сети за счет уменьшения внутреннего ковариатного сдвига (youtube)

[7] Отсев: простой способ предотвратить переобучение нейронных сетей