Это метод, используемый для ускорения и стабилизации обучения нейронных сетей. Она была предложена в 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()
Ставь 👍 и забирай 📚 Базу знаний