[Глубокое обучение] Пакетная нормализация
содержание
Как найти среднее значение и дисперсию в прогнозировании?
BN был предложен Google в 2015 г. Это метод обучения глубокой нейронной сети, который может не только ускорить скорость сходимости модели, но и в определенной степени облегчить проблему «градиентной дисперсии» в глубокой сети. обучение моделей глубокой сети проще и стабильнее. Так что теперь BN стал стандартным навыком почти всех сверточных нейронных сетей.
В буквальном смысле Batch Normalization (BN для краткости) должен нормализовать каждый пакет данных, Действительно, для определенного пакета данных в обучении {x1,x2,...,xn} обратите внимание, что эти данные могут быть входными также может быть выходом слоя в середине сети. До появления BN наша операция нормализации была вообще в слое ввода данных, и входные данные усреднялись и дисперсия нормировалась, но появление BN нарушило это правило Слой нормализован, потому что большинство методов оптимизации мы Сейчас используется минимальная партия SGD, поэтому наша операция нормализации становится пакетной нормализацией.
Зачем нужен БН?
Мы знаем, что после обучения сети параметры будут обновлены, за исключением данных входного слоя (из-за данных входного слоя мы искусственно нормализовали каждую выборку), распределения входных данных каждого слоя последующей сети Изменения происходят всегда, так как при обучении обновление параметров обучения предыдущего слоя приведет к изменению распределения входных данных последнего слоя. Возьмем в качестве примера второй слой сети: вход второго слоя сети вычисляется из параметров и входа первого слоя, а параметры первого слоя менялись на протяжении всего процесса обучения, поэтому он будет неизбежно вызывают каждое последующее изменение распределения входных данных слоя. Мы называем изменение распределения данных в среднем слое сети в процессе обучения: «Внутренний ковариатный сдвиг». Предложение Б.Н. состоит в том, чтобы решить ситуацию, когда распределение данных среднего слоя меняется в процессе обучения.
Как БН это делает?
Как показано на рисунке выше, шаг BN в основном делится на 4 этапа:
- Найдите среднее значение каждой обучающей партии данных
- Найдите дисперсию каждого обучающего пакета данных
- Этот пакет обучающих данных нормализуется с использованием полученного среднего значения и дисперсии для получения распределения 0-1. где εε — крошечное положительное число, используемое, чтобы избежать делителей на 0.
- Преобразование масштаба и смещение: умножьте xixi на γγ, чтобы скорректировать значение, и добавьте ββ, чтобы увеличить смещение, чтобы получить yiyi, где γγ — коэффициент масштабирования, а ββ — коэффициент перевода. Этот шаг является сущностью BN, Поскольку нормализованное xixi будет в основном ограничено нормальным распределением, способность сети выражать будет уменьшаться. Для решения этой задачи введем два новых параметра: γγ, ββ. γγ и ββ изучаются самой сетью во время обучения.
Что именно решает БН?
Стандартным шагом нормализации является вычитание среднего значения и деление дисперсии.Что делает эта нормализация? Давайте посмотрим на картинку ниже,
Левое изображение в a - это входные данные без какой-либо обработки, а кривая - сигмовидная функция, Если данные находятся в области с небольшим градиентом, скорость обучения будет очень медленной или даже стагнирующей в течение длительного времени. После вычитания среднего значения и деления дисперсии данные перемещаются в центральную область, как показано справа Для большинства функций активации градиент в этой области является самым большим или имеет градиенты (например, ReLU), которые можно рассматривать как Эффективное средство борьбы с исчезающими градиентами. Для одного слоя, если вы делаете то же самое для каждого слоя данных, распределение данных всегда находится в области, чувствительной к изменениям, а это означает, что вам не нужно учитывать изменения в распределении данных, поэтому обучение проходит более эффективно. .
Итак, почему существует шаг 4, разве нельзя получить желаемый эффект, просто используя операцию среднего вычитания и деления дисперсии? Давайте подумаем о проблеме, распределение, полученное путем вычитания среднего и деления дисперсии, является нормальным распределением, Можем ли мы считать, что нормальное распределение является лучшим или характеристическое распределение, которое лучше всего отражает наши обучающие выборки? Нет, например, сами данные очень асимметричны, или функция активации может не лучшим образом воздействовать на данные с дисперсией 1, например сигмовидная функция активации, градиент между -1 и 1 сильно не меняется, поэтому роль нелинейного преобразования Это не может быть хорошо отражено, другими словами, производительность сети может быть ослаблена после операции вычитания среднего и деления дисперсии! Ввиду этой ситуации шаг 4 добавляется после первых трех шагов, чтобы завершить реальную нормализацию партии.
Суть BN заключается в использовании оптимизации для изменения размера дисперсии и среднего положения, чтобы новое распределение больше соответствовало реальному распределению данных, а способность модели к нелинейному выражению гарантировалась. Крайним случаем BN является то, что эти два параметра равны среднему значению и дисперсии мини-пакета, тогда данные после нормализации пакета точно такие же, как и входные, конечно, общая ситуация другая.
Как найти среднее значение и дисперсию в прогнозировании?
Во время обучения мы решим среднее значение и дисперсию одного и того же пакета данных, а затем выполним операцию нормализации. Но как нам найти среднее значение и дисперсию для предсказания? Например, когда мы прогнозируем одну выборку, как мы можем найти среднее значение и метод! На самом деле это так: среднее значение и дисперсия, используемые на этапе прогнозирования, фактически получены из обучающей выборки. Например, когда мы обучаем модель, мы записываем среднее значение и дисперсию каждой партии.После обучения мы находим среднее значение и ожидаемую дисперсию всей обучающей выборки как среднее значение и дисперсию BN, когда делаем прогнозы:
На заключительном этапе испытаний формула для BN:
Что касается позиции использования BN, независимая переменная x функции s-типа s(x) является результатом обработки BN до того, как она обычно применяется к нелинейной функции активации в CNN. Следовательно, формула расчета прямой проводимости должна быть:
На самом деле, поскольку параметр смещения b фактически бесполезен после прохождения через слой BN, он также будет нормализован средним значением в конце.Конечно, за слоем BN есть параметр β в качестве члена смещения, поэтому можно использовать параметр b. Итак, наконец, уровень BN + уровень функции активации становится:
БН в CNN
Обратите внимание, что то, что я написал выше, относится к общему случаю, и немного отличается для сверточных нейронных сетей. Поскольку функции сверточной нейронной сети соответствуют карте отклика целой функции, карту отклика также следует использовать как единицу вместо каждого измерения при выполнении BN. Например, в определенном слое размер пакета равен m, а размер графа ответов — w×h, тогда количество данных для BN равно m×w×h.
Роль BN в глубоких нейронных сетях очень очевидна: если нейронная сеть сталкивается с медленной скоростью сходимости во время обучения, или когда происходит «градиентный взрыв» и другие необучаемые ситуации, вы можете попробовать использовать BN для ее решения. В то же время можно добавить BN для ускорения обучения модели и даже для повышения точности модели при обычном использовании.