← Назад к вопросам

Какие виды нормализации существуют?

2.0 Middle🔥 251 комментариев
#Глубокое обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виды нормализации в машинном обучении

Нормализация — это критический шаг предобработки данных и один из ключевых компонентов при обучении глубоких нейросетей. Существует множество подходов, каждый с собственным назначением и эффектом. Разберёмся подробно.

1. Нормализация признаков (Feature Normalization)

Min-Max Scaling (Нормализация на диапазон [0,1])

Формула: x_norm = (x - x_min) / (x_max - x_min)

Преимущества: интуитивна, результаты в фиксированном диапазоне Недостатки: чувствительна к выбросам

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X_scaled = scaler.fit_transform(X)

Standardization (Z-score нормализация)

Формула: x_std = (x - mean) / std

Преимущества: учитывает распределение, лучше для алгоритмов, чувствительных к масштабу Недостатки: значения могут быть вне [0,1]

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

Robust Scaling

Формула: x_robust = (x - median) / IQR (InterQuartile Range)

Преимущества: устойчива к выбросам Недостатки: может быть менее информативна без выбросов

2. Нормализация в нейронных сетях (Neural Network Normalization)

Batch Normalization

Нормализует активации слоя по мини-батчам:

Формула: y = gamma * (x - batch_mean) / sqrt(batch_var + epsilon) + beta

Преимущества:

  • Ускоряет обучение
  • Позволяет использовать большие learning rates
  • Действует как регуляризатор

Недостатки: зависит от размера батча, требует статистики батча

from torch import nn
x = nn.BatchNorm2d(64)(x)

Layer Normalization

Нормализует активации по признакам в каждом примере:

Формула: y = gamma * (x - layer_mean) / sqrt(layer_var + epsilon) + beta

Преимущества:

  • Не зависит от размера батча
  • Хорошо работает с RNN и Transformer'ами
  • Стабильнее для малых батчей

Недостатки: может быть менее эффективна в CNN

x = nn.LayerNorm(hidden_size)(x)

Instance Normalization

Нормализует каждый канал каждого примера отдельно.

Формула: y = gamma * (x - instance_mean) / sqrt(instance_var + epsilon) + beta

Преимущества: эффективна для style transfer, работает без батча Недостатки: теряет информацию о глобальной статистике

Group Normalization

Средний вариант между Layer и Instance normalization. Делит каналы на группы и нормализует по группам.

Преимущества: хорошо работает с малыми батчами Недостатки: требует выбора количества групп

x = nn.GroupNorm(num_groups=32, num_channels=64)(x)

Weight Normalization

Нормализует веса нейросети, а не активации.

Формула: w = g * v / ||v||

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

3. Нормализация для обработки текста

Text Normalization

  • Приведение к нижнему регистру
  • Удаление пунктуации
  • Удаление стоп-слов
  • Лемматизация/стемминг
import re
text = text.lower()
text = re.sub(r'[^a-zA-Z0-9]', '', text)

4. Normalization в компьютерном зрении

ImageNet Normalization

Преобразование пиксельных значений с использованием mean и std ImageNet:

from torchvision.transforms import Normalize
transform = Normalize(mean=[0.485, 0.456, 0.406], 
                     std=[0.229, 0.224, 0.225])

Whitening (PCA Whitening)

Удаляет корреляции между признаками через PCA. Преимущества: улучшает сходимость Недостатки: требует вычисления коварианционной матрицы

5. Нормализация данных в анализе

Logarithmic Normalization

Формула: x_log = log(x + 1)

Применяется для скошенных распределений, данные с большим диапазоном значений.

Quantile Normalization

Исправляет распределения на основе квантилей. Часто используется в биоинформатике.

Сравнительная таблица

МетодИспользуется дляПреимуществаНедостатки
Min-MaxОбщие признакиДиапазон [0,1]Выбросы
Z-scoreОбщие признакиНормальное распределениеМожет выйти за пределы
BatchNormCNN обучениеБыстрое обучениеЗависит от батча
LayerNormTransformer'ыНезависима от батчаМенее эффективна в CNN
GroupNormМалые батчиХороший компромиссТребует параметров

Практические рекомендации

  1. Всегда нормализуйте числовые признаки перед обучением
  2. Выбирайте тип нормализации в зависимости от алгоритма
  3. Для глубоких сетей используйте BatchNorm или LayerNorm
  4. Для Transformer'ов почти всегда используйте LayerNorm
  5. Не забывайте нормализовать данные одинаково для train и test
  6. Для выбросов рассмотрите Robust Scaling

Правильная нормализация может значительно ускорить обучение модели и улучшить её производительность.