Normalization
Нормализация масштабирует признаки или активации к общему диапазону, чтобы значения с отдельным диапазоном не доминировали. Разбираем min-max, z-оценку, L2 и нормализующие слои.
Нормализация — это приведение числовых значений к общей шкале, чтобы признаки не доминировали в модели только из-за используемых единиц измерения. При предобработке данных обычно каждый входной признак преобразуют к фиксированному диапазону, например [0, 1], или к нулевому среднему и единичной дисперсии перед обучением. Внутри нейронной сети слои нормализации, например пакетная нормализация, применяют тот же принцип к промежуточным активациям. Без нормализации признак, измеряемый тысячами, например доход, перевешивает признак, измеряемый единицами, например размер домохозяйства, при каждом вычислении расстояния и шаге градиентного спуска.
Распространённые методы нормализации#
- Масштабирование по минимуму и максимуму: Преобразует каждый признак к диапазону [0, 1] по формуле (x − min) / (max − min). Одно экстремальное значение сжимает все остальные в узкий диапазон, поэтому этот метод подходит для признаков с известными фиксированными границами, например значений 8-битных пикселей, делённых на 255.
- Стандартизация по Z-оценке: Вычитает из значения признака среднее и делит его на стандартное отклонение, получая среднее 0 и стандартное отклонение 1. Обычно это вариант по умолчанию для признаков без фиксированных границ.
- Робастное масштабирование: Вычитает медиану и делит результат на межквартильный размах, поэтому несколько выбросов почти не влияют на масштабирование остальных значений.
- Логарифмическое масштабирование: Применяет логарифм, часто log(1 + x), чтобы сжать признаки с тяжёлыми хвостами распределения, например цены, численность населения или количество просмотров, перед другими способами масштабирования.
- Нормализация до единичного вектора (L2): Делит вектор каждого примера на его длину, чтобы норма каждого вектора равнялась 1. При применении к эмбеддингам косинусное сходство превращается в обычное скалярное произведение. Normalizer из scikit-learn выполняет эту операцию для каждого примера, что может удивить пользователей, ожидающих масштабирования каждого признака, как в
MinMaxScaler.
Выбор подходящего метода зависит от того, что масштабируется и как распределены его значения:
Зачем нужна нормализация#
Методы, основанные на расстоянии, например метод k ближайших соседей (k-NN), кластеризация k-средних и метод опорных векторов с RBF-ядром, сравнивают исходные евклидовы расстояния, поэтому признак с наибольшим диапазоном определяет, какие точки считаются близкими. Модели на основе градиентного спуска быстрее обучаются на нормализованных входных данных: признаки с сильно различающимися масштабами вытягивают поверхность потерь в узкие долины, где градиентному спуску приходится делать небольшие шаги. Древовидные ансамбли, например случайные леса, за раз разделяют данные по порогу одного признака и получают те же разбиения при любом монотонном преобразовании масштаба. Пример масштабирования датасета Wine перед k-NN показывает, насколько это важно:
from sklearn.datasets import load_wine
from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import MinMaxScaler, StandardScaler
# 13 chemical features on very different scales, from hue (about 0.5-1.7) to proline (about 280-1,680)
X, y = load_wine(return_X_y=True)
# k-NN compares raw distances, so unscaled proline dominates every distance
for name, scaler in [("none", "passthrough"), ("min-max", MinMaxScaler()), ("z-score", StandardScaler())]:
# The pipeline fits the scaler on each training fold only, so no test statistics leak in
model = make_pipeline(scaler, KNeighborsClassifier())
accuracy = cross_val_score(model, X, y, cv=5).mean()
print(f"scaling {name:8s} 5-fold accuracy: {accuracy:.3f}")Без масштабирования k-NN достигает точности 0,691 accuracy, поскольку признак пролин с диапазоном около 1400 единиц перевешивает остальные 12 признаков при каждом вычислении расстояния. Масштабирование по минимуму и максимуму повышает точность до 0,950, а стандартизация по Z-оценке — до 0,949. Важно обучать масштабировщик внутри конвейера: если вычислить минимум, максимум, среднее или стандартное отклонение на всём датасете до разделения, информация из тестовой выборки попадёт в обучение. Это разновидность утечки данных.
Нормализация в компьютерном зрении#
Изображения нормализуются по каналам. Деление 8-битных значений пикселей на 255 переводит их в диапазон [0, 1], после чего многие классификационные бэкбоны вычитают среднее по каналам и делят на стандартное отклонение: ResNet-50 из torchvision, предобученная на ImageNet, ожидает средние значения (0.485, 0.456, 0.406) и стандартные отклонения (0.229, 0.224, 0.225). Подача в предобученную модель входных данных, нормализованных иначе, чем её обучающие данные, смещает все активации и снижает точность. Предобработка Ultralytics YOLO делит значения пикселей на 255 и не сдвигает их ни по среднему, ни по стандартному отклонению — как при обучении, так и при предсказании, поэтому YOLO26 всегда получает входные значения в диапазоне [0, 1].
Для медицинских изображений нужны правила, зависящие от модальности. КТ хранит интенсивность в единицах Хаунсфилда — физической шкале, в которой значение воздуха равно −1000, а воды — 0, поэтому для разных исследований подходят одни и те же статистические показатели. Широко используемый фреймворк сегментации nnU-Net ограничивает интенсивность КТ значениями 0,5-го и 99,5-го процентилей значений переднего плана по всем обучающим случаям, а затем применяет к ним стандартизацию по Z-оценке с использованием среднего и стандартного отклонения всего датасета. Интенсивность МРТ не имеет фиксированной физической шкалы и различается между сканерами, поэтому nnU-Net нормализует каждое МРТ-изображение отдельно.
Нормализация и связанные термины#
- Стандартизация: Распространённое название масштабирования по Z-оценке. В одних источниках и масштабирование по минимуму и максимуму, и по Z-оценке называют «нормализацией», в других «нормализацией» называют только масштабирование по минимуму и максимуму.
- Аугментация данных: Изменяет содержимое или геометрию изображения, например отражает, обрезает или сдвигает цвета, чтобы разнообразить данные; нормализация же лишь изменяет масштаб значений.
- Слои нормализации: Пакетная нормализация стандартизирует каждый канал по статистикам текущего мини-батча. Послойная нормализация стандартизирует признаки каждого примера независимо от размера батча и используется во всех трансформерах. После нормализации эти слои применяют обучаемые масштабирование и сдвиг.
- RMSNorm: Упрощённый вариант послойной нормализации, который пропускает вычитание среднего и делит значения только на среднеквадратичное значение. Это слой нормализации в Llama от Meta и многих других больших языковых моделях.










