Какие плюсы и минусы у больших весов в нейронной сети?

«Какие плюсы и минусы у больших весов в нейронной сети?» — вопрос из категории Нейронные сети и Deep Learning, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Плюсы:

  • Сильные признаки: В линейных слоях большой абсолютный вес может указывать на высокую важность соответствующего признака для предсказания.
  • Резкие границы решений: Может позволить модели формировать более четкие границы между классами.

Минусы (преобладают):

  • Переобучение: Большие веса часто являются признаком того, что модель слишком сильно подстроилась под шум в обучающих данных, запомнив их, а не общие закономерности.
  • Неустойчивость: Модель становится чувствительной к небольшим изменениям входных данных, что снижает ее обобщающую способность.
  • Проблемы с оптимизацией: Очень большие градиенты могут вызвать нестабильность процесса обучения (взрыв градиентов), что затрудняет сходимость.
  • Плохая интерпретируемость: В глубоких сетях большие веса распределены по многим связям, что делает анализ вклада отдельных признаков практически невозможным.

Решение — регуляризация: Для контроля величины весов явно добавляют штраф к функции потерь.

  • 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)