Перейти к основному содержимому

Батч-нормализация

Идея метода

Классическим подходом к повышению качества прогнозов моделей является нормализация признаков, т.е. приведение признаков к одинаковой шкале. Самым популярным методом нормализации является стандартизация, приводящая каждый признак xix^i со средним μi\mu_i и стандартным отклонением σi\sigma_i к среднему ноль и единичной дисперсии:

xixiμiσix^i \longrightarrow \frac{x^i-\mu_i}{\sigma_i}

Это позволяет обеспечить равный вклад признаков в прогноз, а также ускоряет настройку градиентными методами, поскольку делает линии уровня функции потерь менее вытянутыми и более скруглёнными, как показано ниже:

Батч-нормализация (batch-normalization, [1]) позволяет ускорить настройку сети за счёт нормализации не только входных признаков, но и активаций промежуточного слоя. Слой батч-нормализации может включаться за входным или скрытым слоем с выходами z1,...zMz_1,...z_M.

Слой батч-нормализации принимает на вход активации z1,...zMz_1,...z_M предыдущего слоя и их линейно перемасштабирует таким образом, чтобы они имели средние β1,...βM\beta_1,...\beta_M и стандартные отклонения γ1,...γM\gamma_1,...\gamma_M:

z1  γ1z1μ1σ12+δ+β1z2  γ2z2μ2σ22+δ+β2zM  γMzMμMσM2+δ+βM\begin{align*} & z_1 \;&\to\quad &\gamma_1\frac{z_1-\mu_1}{\sqrt{\sigma_1^2+\delta}}+\beta_1 \\ & z_2 \;&\to\quad &\gamma_2\frac{z_2-\mu_2}{\sqrt{\sigma_2^2+\delta}}+\beta_2 \\ & \cdots & \cdots \\ & z_M \;&\to\quad &\gamma_M\frac{z_M-\mu_M}{\sqrt{\sigma_M^2+\delta}}+\beta_M \\ \end{align*}

где

  • μ1,...μM\mu_1,...\mu_M - средние значения активаций z1,...zMz_1,...z_M;

  • σ1,...σM\sigma_1,...\sigma_M - стандартные отклонения активаций z1,...zMz_1,...z_M;

  • δ>0\delta>0 - малая константа, призванная исключить деление на ноль.

Параметры {βi}i\{\beta_i\}_i и {γi}i\{\gamma_i\}_i настраиваются вместе с остальными весами нейросети. Если для минимизации потерь действительно необходима стандартизация, то они настроятся на значения 0 и 1 соответственно. Если же стандартизация не нужна, то они настроятся на значения средних {μi}i\{\mu_i\}_i и стандартных отклонений {σi}i\{\sigma_i\}_i соответственно, и по слой батч-нормализации будет действовать как тождественное преобразование. В общем же случае эти параметры будут принимать некоторые промежуточные значения.

Удаление лишних параметров

В линейном слое, применяемом к батч-нормализованным входам, необязательно использовать смещения (bias), поскольку нейроны уже смещаются на выучиваемые смещения {βi}i\{\beta_i\}_i.

Батч-нормализация будет по-разному действовать при обучении и применении нейросети.

Обучение нейросети

Если при стандартизации признаков мы могли предварительно вычислить средние и стандартные отклонения признаков, то для активаций промежуточных нейронов уже нет, поскольку при настройке сети веса меняются, что оказывает влияние и на распределение всех последующих нейронов. Поэтому на каждом шаге обновления весов {μi}i\{\mu_i\}_i и {σi}i\{\sigma_i\}_i перевычисляются как выборочные средние и станадртные отклонения нейронов по текущему мини-батчу, как показано ниже:

Точность оценки

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

Применение нейросети

Во время применения уже настроенной сети мы могли бы честно вычислить средние и стандартные отклонения нейронов, поскольку веса сети зафиксированы. Однако это предполагает дополнительный проход по обучающей выборке. На практике, чтобы его не делать, во время обучения вычисляются не только средние и стандартные отклонения по текущему мини-батчу, но и их сглаженные версии, используя экспоненциальное сглаживание. В результате, к концу обучения, мы просто подставляем вместо {μi}i\{\mu_i\}_i и {σi}i\{\sigma_i\}_i их сглаженные значения.

Обоснование метода

Если поместить батч-нормализацию перед функцией нелинейности, то при соответствующей инициализации параметров γ\gamma и β\beta она будет приводить аргумент нелинейности в регион её существенных изменений (изгиб в функциях ReLU, LeakyReLU, tangh).

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

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

Батч-нормализация и прореживание сети

Если на параметры {γi}i\{\gamma_i\}_i наложить L1L_1 регуляризацию, то часть мультипликаторов γi\gamma_i начнёт зануляться, что будет приводить к автоматическому исключению лишних нейронов и упрощению модели, снижая расходы на хранение сети и построение прогнозов.

Литература

  1. Ioffe S., Szegedy C. Batch normalization: Accelerating deep network training by reducing internal covariate shift //International conference on machine learning. – pmlr, 2015. – С. 448-456.