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

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

Идея метода

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

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

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

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

Слой батч-нормализации принимает на вход активации 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{aligned} & 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{aligned}

где

  • μ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.

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

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

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

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

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

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

Во время применения (inference) уже настроенной сети мы могли бы честно вычислить средние и стандартные отклонения нейронов, поскольку веса сети уже настроены и зафиксированы. Однако это предполагает дополнительный проход по обучающей выборке. На практике, чтобы его не делать, во время обучения вычисляются не только средние и стандартные отклонения по текущему мини-батчу, но и их сглаженные версии, используя экспоненциальное сглаживание. В результате к концу обучения мы просто подставляем вместо {μ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.