Про нормализацию

Про нормализацию

DeepSchool

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

y - результат нормализации, x - входной вектор, E[x] - выборочное среднее, Var[x] - выборочная дисперсия, γ и β - обучаемые параметры, ε - малая добавка, чтобы избежать деления на ноль.

Batch Norm

Про преимущества батчнорма (BN) мы уже писали в этом посте, а в следующем оставили несколько советов по его использованию. Но помимо известных плюсов, BN также имеет и пару недостатков:

  • при уменьшении размера батча, оценки среднего и дисперсии будут смещаться относительно генеральных значений все сильнее, а это может плохо сказаться на обучении (например, при батче размером 8 и меньше);
  • плохо интерпретируются и перформят, а также требуют больше памяти в RNN. В рекуррентных сетях используются одни и те же веса для каждого шага “рекуррентного цикла”. Статистики, посчитанные на каждом шаге, могут сильно отличаться друг от друга. Поэтому приходится сохранять их отдельно для каждого шага, а это требует больше памяти.

Если представить 4-х мерный тензор входных данных в виде куба с осями C (каналы), N (элементы батча) и H, W( пространственные размеры входного тензора), то BN нормализует следующие элементы (выделено синим):


Layer Norm

В Layer Norm (LN) статистики рассчитываются не по всему батчу, а по каждому элементу отдельно. В отличии от BN, вычисления статистик происходят одинаково во время тренировки и валидации, а параметры γ и β считаются для каждого нейрона отдельно (то есть γ и β будут иметь размер [C, H, W] для CNN и вектор размером embedding_dim для RNN, когда как для BN считается C γ и C β).


Для CNN элемент батча — одна картинка, а для RNN — одно предложение. Звучит логично, что в текстах лучше нормализовать целые предложения, а не отдельно первые слова предложений, отдельно вторые и так далее. Эксперименты также показывают, что LN позволяет рекуррентным сетям сходиться быстрее и лучше в сравнении с BN. Ниже картинка из оригинальной статьи, в которой можно увидеть, как быстро падает ошибка на валидации при обучении с BN или с LN.


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

Instance Norm

В Instance Norm (IN) статистики вычисляются отдельно для каждого канала каждого входного тензора.


По умолчанию, статистики считаются одинаково во время тренировки и инференса, а афинное преобразование вовсе не применятся (γ и β пропадают из формулы). Но по желанию, можно включить обучаемые параметры (γ и β будут считаться для каждого слоя как в BN), а также начать считать экспоненциально сглаженные оценки для среднего и дисперсии во время тренировки.

Изначально при помощи Instance Norm пытались нивелировать проблему зависимости от контраста в задаче стайлтрансфера. А в StyleGAN, например, используется немного модернизированная версия IN, которая помогла генерировать более разнообразные и реалистичные лица.

Group Norm

В Group Norm (GN) расчет статистик происходит только для подмножества каналов каждого элемента.


Количество групп же для каждого слоя является гиперпараметром. По аналогии с BN, во время инференса используются экспоненциально сглаженные оценки среднего и дисперсии для каждой группы. А обучаемые параметры γ и β считаются для каждого канала отдельно, как и в BN.

Данный подход был создан, чтобы решить проблему роста смещения оценок среднего и дисперсии при уменьшении размера батча. В статье приведен график, на котором видно, как растет ошибка в задаче классификации при обучении ResNet-50 с разными размерами батча для BN и GN.


В статье авторы заменяли все BN слои на GN, установив G (кол-во групп) = 32 на всех слоях.

Report Page