🤔 Для чего используют бач нормализацию?



Это метод, используемый для ускорения и стабилизации обучения нейронных сетей. Она была предложена в 2015 году Сержем Иоффе и Кристианом Шилле для решения проблемы внутреннего ковариационного сдвига.



🚩Зачем нужна



🟠Стабилизация обучения

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

🟠Ускорение сходимости

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

🟠Регуляризация

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

🟠Снижение зависимости от инициализации параметров

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



🚩Как работает



🟠Вычисление среднего и дисперсии

Для каждого мини-батча вычисляются среднее значение и дисперсия входов.

\mu_B = \frac{1}{m} \sum_{i=1}^{m} x_i



\sigma_B^2 = \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2




🟠Нормализация

Входы нормализуются, вычитая среднее значение и деля на стандартное отклонение.

\hat{x}_i = \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}}


где \(\epsilon\) – малое значение для избежания деления на ноль.



🟠Скалирование и смещение

Нормализованные значения масштабируются и сдвигаются с использованием обучаемых параметров \(\gamma\) и \(\beta\).

y_i = \gamma \hat{x}_i + \beta




🚩Пример использования



import tensorflow as tf

from tensorflow.keras.models import Sequential

from tensorflow.keras.layers import Dense, BatchNormalization, Activation



# Создание модели

model = Sequential([

Dense(64, input_shape=(32,)),

BatchNormalization(),

Activation('relu'),

Dense(64),

BatchNormalization(),

Activation('relu'),

Dense(10, activation='softmax')

])



# Компиляция модели

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])



# Вывод структуры модели

model.summary()




Ставь 👍 и забирай 📚 Базу знаний