🤔 Какие методы регуляризации знаешь?Это набор методов, которые помогают предотвратить переобучение модели, уменьшая сложность модели или ограничивая её способность к чрезмерному подгонке под обучающие данные. Вот основные методы регуляризации:
🟠L1 и L2-регуляризация (регуляризация норм L1 и L2)L1-регуляризация (Lasso) В регуляризацию добавляется сумма абсолютных значений коэффициентов весов модели.
Формула: \( L1 = \lambda \sum_{i} |w_i| \), где \( \lambda \) — гиперпараметр регуляризации. Преимущество: Стимулирует разреженность, заставляя некоторые веса становиться равными нулю, что помогает в выборе признаков. Недостаток: Могут игнорироваться малые, но значимые признаки.
L2-регуляризация (Ridge):
Добавляется сумма квадратов весов модели.
Формула: \( L2 = \lambda \sum_{i} w_i^2 \).Преимущество: Регуляризует модель, не делая веса нулевыми, помогает в борьбе с мультиколлинеарностью.
Недостаток: Не отбирает признаки, оставляя их все
from sklearn.linear_model import Ridge, Lasso
# Ridge
ridge_model = Ridge(alpha=1.0)
ridge_model.fit(X_train, y_train)
# Lasso
lasso_model = Lasso(alpha=0.1)
lasso_model.fit(X_train, y_train)
🟠DropoutИспользуется в нейронных сетях.
В процессе обучения случайно "выключает" часть нейронов, заставляя сеть учиться более устойчивым признакам.
Пример: при Dropout с вероятностью 0.5 половина нейронов в слое будет игнорироваться на каждой итерации.
Преимущество: Снижает зависимость от определённых нейронов, улучшая обобщающую способность сети.
import tensorflow as tf
from tensorflow.keras.layers import Dropout, Dense
model = tf.keras.Sequential([
Dense(128, activation='relu'),
Dropout(0.5), # Удаляем 50% нейронов
Dense(10, activation='softmax')
])
🟠Раннее прекращение обучения (Early Stopping)Останавливает обучение, когда ошибка на валидационной выборке перестаёт уменьшаться. Преимущество: предотвращает переобучение без необходимости добавления дополнительной регуляризации. Недостаток: Может остановить обучение до достижения оптимального результата.
from keras.callbacks import EarlyStopping
early_stopping = EarlyStopping(monitor='val_loss', patience=5)
model.fit(X_train, y_train, validation_data=(X_val, y_val), callbacks=[early_stopping])
🟠Нормализация и стандартизация данныхХотя это больше подготовка данных, правильное масштабирование (например, через Min-Max Scaling или Z-Score) может улучшить регуляризацию модели, сделав её более устойчивой к шуму.
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
🟠Регуляризация через ограничение весов (Weight Constraint)Вводятся ограничения на значения весов, например, они должны оставаться в пределах заданного диапазона.
from tensorflow.keras.constraints import MaxNorm
from tensorflow.keras.layers import Dense
layer = Dense(128, activation='relu', kernel_constraint=MaxNorm(3))
🟠Аугментация данныхУвеличение объёма данных с помощью преобразований, таких как поворот изображений, изменение яркости и т. д.
Преимущество: Искусственно увеличивает выборку, что уменьшает риск переобучения.
🟠Batch NormalizationСтабилизирует обучение, нормализуя выходы скрытых слоёв. Это также действует как лёгкая форма регуляризации.
from tensorflow.keras.layers import BatchNormalization
model.add(BatchNormalization())
🟠Сложные методы (Elastic Net и DropConnect)Elastic Net: Комбинация L1 и L2-регуляризации. DropConnect: Аналог Dropout, но выключаются не нейроны, а их веса.
Ставь 👍 и забирай 📚 Базу знаний