Regularization
Регуляризация ограничивает модель во время обучения, чтобы она обобщала данные, а не запоминала шум. Рассматриваются L1, L2, затухание весов, dropout и ранняя остановка.
Регуляризация — это любое изменение процесса обучения модели, призванное снизить ошибку на новых данных, даже если ошибка на обучающих данных вырастет. Она противодействует переобучению, при котором модель достаточной сложности запоминает шум и особенности увиденных примеров. Регуляризация ограничивает эффективную сложность модели, штрафуя большие веса, добавляя шум и разнообразные данные или останавливая обучение раньше. В терминах смещения и разброса она допускает небольшое увеличение смещения в обмен на более значительное снижение разброса.
Штрафы L1 и L2#
Классический вариант добавляет штраф за веса к функции потерь: общая функция потерь = потеря на данных + λ × штраф. Регуляризация L2 штрафует за сумму квадратов весов, Σw², притягивая каждый вес к нулю пропорционально его величине; в линейных моделях этот метод называется гребневой регрессией. Регуляризация L1 штрафует за сумму абсолютных значений весов; её постоянное воздействие сводит многие веса точно к нулю. Поэтому линейная регрессия со штрафом L1, или лассо, одновременно выполняет отбор признаков. Эластичная сеть сочетает оба подхода. Сила штрафа λ, называемая alpha в scikit-learn, — это гиперпараметр: слишком малое значение не избавит от переобучения, а слишком большое приведёт к недообучению. Полином 9-й степени, аппроксимирующий 12 зашумлённых точек синусоиды, демонстрирует оба сценария:
import numpy as np
from sklearn.linear_model import Ridge
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
rng = np.random.default_rng(0)
# 12 noisy training points from a sine wave, plus clean test points
x_train = rng.uniform(0, 1, (12, 1))
y_train = np.sin(2 * np.pi * x_train[:, 0]) + rng.normal(0, 0.2, 12)
x_test = np.linspace(0, 1, 200)[:, None]
y_test = np.sin(2 * np.pi * x_test[:, 0])
# The same degree-9 polynomial, fit with a growing L2 penalty on its coefficients
for alpha in (0.0, 1e-4, 1e-2, 1.0):
model = make_pipeline(PolynomialFeatures(9), Ridge(alpha=alpha)).fit(x_train, y_train)
train_mse = np.mean((model.predict(x_train) - y_train) ** 2)
test_mse = np.mean((model.predict(x_test) - y_test) ** 2)
weight_norm = np.linalg.norm(model[-1].coef_)
print(f"alpha {alpha:g}: train MSE {train_mse:.4f}, test MSE {test_mse:.4f}, |w| {weight_norm:.1f}")Без штрафа полином проходит через шум: норма его коэффициентов достигает примерно 425 000, ошибка на обучающих данных составляет 0.0148, а на тестовых — 0.1859. Штраф 0.0001 уменьшает норму коэффициентов до 20.8 и снижает ошибку на тестовых данных в 11 раз — до 0.0170, хотя ошибка на обучающих данных возрастает до 0.0334. При alpha, равном 1, штраф доминирует и модель недообучается: ошибка на тестовых данных составляет 0.3998.
Затухание весов и dropout в нейронных сетях#
В нейронных сетях регуляризация L2 обычно реализуется как затухание весов: при каждом обновлении каждый вес дополнительно уменьшается на небольшую долю своего значения. Для обычного стохастического градиентного спуска эти методы эквивалентны. В адаптивных оптимизаторах, таких как Adam, слагаемое L2, добавленное к градиенту, делится на масштабирование Adam для каждого параметра, поэтому веса с большими градиентами почти не регуляризуются. Развязанное затухание весов напрямую уменьшает веса; полученный оптимизатор AdamW стал стандартным выбором для трансформеров.
Слой dropout с вероятностью p обнуляет выход каждого нейрона на каждом шаге обучения и масштабирует оставшиеся выходы на 1/(1 − p). Поэтому сеть не может полагаться на какой-либо один нейрон и фактически обучает множество прореженных подсетей с общими весами. На этапе инференса активны все нейроны. В первоначальных экспериментах вероятность dropout 0.5 для скрытых нейронов была близка к оптимальной для широкого спектра сетей и задач.
Обучение Ultralytics YOLO поддерживает оба параметра: weight_decay со значением 0.0005 по умолчанию применяется только к весам свёрточных и линейных слоёв, но не к смещениям и параметрам слоёв нормализации; dropout со значением 0.0 по умолчанию применяется непосредственно перед последним линейным слоем моделей классификации YOLO26.
from ultralytics import YOLO
# Загрузи предварительно обученную модель классификации YOLO26n
model = YOLO("yolo26n-cls.pt")
# Обучи модель с dropout в классификационной головке и более сильным затуханием весов
results = model.train(data="mnist160", epochs=10, dropout=0.2, weight_decay=0.001)Другие методы регуляризации#
- Аугментация данных: отражения, обрезка, масштабирование, изменение цветов и мозаичная аугментация разнообразят обучающие изображения, поэтому модель видит каждый объект в большем числе условий, чем представлено в исходном наборе данных.
- Сглаживание меток: Заменяет one-hot-метки классификации слегка смягчёнными значениями, чтобы модель перестала доводить логиты до крайних значений уверенности.
- Неявная регуляризация: Шум градиента при обучении на небольших пакетах и шум между пакетами, возникающий при пакетной нормализации, обеспечивают регуляризацию без явного слагаемого.
Ранняя остановка выполняет регуляризацию, ограничивая длительность обучения. После каждой эпохи модель оценивается на валидационных данных; обучение останавливается, если оценка не улучшается заданное число эпох, называемое терпением. При этом сохраняются лучшие веса:
Регуляризация и связанные термины#
- Нормализация: Масштабирует входные данные или активации, чтобы ускорить и стабилизировать обучение. Пакетная нормализация обеспечивает регуляризацию лишь как побочный эффект.
- Подбор гиперпараметров: Выполняет поиск подходящих значений параметров регуляризации, таких как λ, вероятность dropout и терпение, а также всех остальных гиперпараметров.
- Ансамбли моделей: Снижают разброс, усредняя предсказания нескольких независимо обученных моделей. Dropout приближённо воспроизводит такой ансамбль внутри одной сети: при обучении выбираются прореженные подсети из их экспоненциального множества, а запуск полной сети со всеми активными нейронами на этапе тестирования приближённо усредняет их предсказания.










