Ответ
Плюсы:
- Сильные признаки: В линейных слоях большой абсолютный вес может указывать на высокую важность соответствующего признака для предсказания.
- Резкие границы решений: Может позволить модели формировать более четкие границы между классами.
Минусы (преобладают):
- Переобучение: Большие веса часто являются признаком того, что модель слишком сильно подстроилась под шум в обучающих данных, запомнив их, а не общие закономерности.
- Неустойчивость: Модель становится чувствительной к небольшим изменениям входных данных, что снижает ее обобщающую способность.
- Проблемы с оптимизацией: Очень большие градиенты могут вызвать нестабильность процесса обучения (взрыв градиентов), что затрудняет сходимость.
- Плохая интерпретируемость: В глубоких сетях большие веса распределены по многим связям, что делает анализ вклада отдельных признаков практически невозможным.
Решение — регуляризация: Для контроля величины весов явно добавляют штраф к функции потерь.
- L1-регуляризация (Lasso): Штрафует сумму абсолютных значений весов. Способствует разреженности, обнуляя менее важные веса.
- L2-регуляризация (Ridge): Штрафует сумму квадратов весов. Распределяет влияние более равномерно, сжимая все веса.
Пример добавления L2-регуляризации в полносвязный слой с PyTorch:
import torch
import torch.nn as nn
class Net(nn.Module):
def __init__(self):
super().__init__()
self.fc = nn.Linear(100, 10)
# L2 регуляризация задается в оптимизаторе параметром `weight_decay`
def forward(self, x):
return self.fc(x)
model = Net()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001, weight_decay=1e-5) # Параметр weight_decay — это коэффициент λ для L2
criterion = nn.CrossEntropyLoss()
# В цикле обучения функция потерь будет иметь вид: Loss = CrossEntropy + weight_decay * sum(weights^2)