Регуляризация: L1, L2, Dropout

Регуляризация является критически важным механизмом для предотвращения переобучения моделей машинного обучения. В Keras.js, как и в оригинальной библиотеке Keras на Python, доступны основные методы регуляризации: L1, L2 и Dropout. Они позволяют контролировать сложность модели и улучшать её обобщающую способность.


L1-регуляризация

Принцип работы

L1-регуляризация добавляет к функции потерь сумму абсолютных значений весов модели, умноженную на коэффициент регуляризации λ (lambda). Формально, для набора весов ( w ):

[ L_{total} = L_{original} + |w_i|]

Особенности:

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

Применение в Keras.js

В Keras.js L1-регуляризация подключается через объект регуляризации при создании слоя:

const layer = new KerasJS.layers.Dense({
  units: 64,
  activation: 'relu',
  kernelRegularizer: new KerasJS.regularizers.l1({ l1: 0.01 })
});
  • l1: 0.01 — коэффициент регуляризации.
  • Применяется только к весам слоя (kernel). Для включения регуляризации смещения используется biasRegularizer.

L2-регуляризация

Принцип работы

L2-регуляризация добавляет к функции потерь сумму квадратов весов, умноженную на коэффициент λ:

[ L_{total} = L_{original} + w_i^2]

Особенности:

  • Снижает величину весов, не обнуляя их полностью.
  • Часто используется в глубоких нейронных сетях, так как обеспечивает более стабильную сходимость.
  • Хорошо сочетается с другими методами регуляризации, такими как Dropout.

Применение в Keras.js

const layer = new KerasJS.layers.Dense({
  units: 64,
  activation: 'relu',
  kernelRegularizer: new KerasJS.regularizers.l2({ l2: 0.01 })
});
  • Величина l2 контролирует силу регуляризации. Чем выше значение, тем сильнее снижаются веса.
  • L2 обычно предпочтительнее для скрытых слоев, где разреженность не является ключевой.

Dropout

Принцип работы

Dropout случайным образом «отключает» часть нейронов на каждой итерации обучения с заданной вероятностью ( p ). Это предотвращает зависимость модели от конкретных нейронов и способствует более устойчивой генерализации.

Особенности:

  • Во время обучения нейроны пропускаются с вероятностью ( 1-p ).
  • На этапе инференса Dropout не применяется, веса масштабируются для компенсации отключений.
  • Эффективно комбинируется с L1/L2 регуляризацией для снижения переобучения.

Применение в Keras.js

const dropoutLayer = new KerasJS.layers.Dropout({ rate: 0.5 });
  • rate: 0.5 означает, что половина нейронов будет отключена на каждой итерации обучения.
  • Dropout чаще всего размещают между Dense слоями, особенно в глубоких сетях.

Комбинированное использование

Регуляризация становится наиболее эффективной при комбинировании методов:

const denseLayer = new KerasJS.layers.Dense({
  units: 128,
  activation: 'relu',
  kernelRegularizer: new KerasJS.regularizers.l2({ l2: 0.001 }),
  biasRegularizer: new KerasJS.regularizers.l1({ l1: 0.001 })
});

const dropoutLayer = new KerasJS.layers.Dropout({ rate: 0.4 });
  • L1 используется для разреженности смещений, L2 — для контроля величины весов.
  • Dropout снижает вероятность переобучения на скрытых слоях.

Практические рекомендации:

  • Для небольших наборов данных увеличивать коэффициенты регуляризации и вероятность Dropout.
  • Для больших и сложных моделей использовать умеренные значения, чтобы не замедлить обучение.
  • Постоянно контролировать метрики на валидационном наборе, так как чрезмерная регуляризация может привести к недообучению.

Регуляризация в Keras.js предоставляет гибкий инструмент управления сложностью нейронной сети, позволяя настраивать её поведение для оптимального обобщения без потери точности. Использование L1, L2 и Dropout в комбинации обеспечивает надежную защиту от переобучения и повышает устойчивость моделей к шуму в данных.