Регуляризация — один из ключевых инструментов для предотвращения переобучения моделей машинного обучения. В TensorFlow.js поддерживаются два основных типа регуляризации весов: L1 и L2, которые реализуются через специальные параметры в слоях и оптимизаторах. Каждая из этих техник накладывает определённые ограничения на величины весов, что улучшает обобщающую способность модели.
L1 регуляризация добавляет к функции потерь сумму абсолютных значений весов модели. Математически это выражается так:
[ L_{total} = L_{original} + _i |w_i|]
где:
meanSquaredError),Особенности L1 регуляризации:
В TensorFlow.js L1 регуляризацию можно задать через аргумент
kernelRegularizer при создании слоёв:
const model = tf.sequential();
model.add(tf.layers.dense({
units: 64,
inputShape: [100],
kernelRegularizer: tf.regularizers.l1({l1: 0.01})
}));
Здесь l1: 0.01 — коэффициент (), определяющий величину
штрафа.
L2 регуляризация добавляет к функции потерь сумму квадратов весов:
[ L_{total} = L_{original} + _i w_i^2]
Особенности L2 регуляризации:
Пример использования L2 регуляризации в TensorFlow.js:
const model = tf.sequential();
model.add(tf.layers.dense({
units: 64,
inputShape: [100],
kernelRegularizer: tf.regularizers.l2({l2: 0.01})
}));
Иногда применяют комбинацию L1 и L2 для объединения преимуществ обеих регуляризаций:
[ L_{total} = L_{original} + _1 _i |w_i| + _2 _i w_i^2]
В TensorFlow.js это реализуется через l1l2
регуляризатор:
const model = tf.sequential();
model.add(tf.layers.dense({
units: 64,
inputShape: [100],
kernelRegularizer: tf.regularizers.l1l2({l1: 0.01, l2: 0.01})
}));
Комбинированная регуляризация позволяет одновременно уменьшить количество незначимых весов и сгладить оставшиеся, улучшая обобщение модели.
TensorFlow.js предоставляет возможность регуляризовать не только веса
(kernelRegularizer), но и смещения (bias)
и выходные значения слоя (activity):
model.add(tf.layers.dense({
units: 64,
kernelRegularizer: tf.regularizers.l2({l2: 0.01}),
biasRegularizer: tf.regularizers.l1({l1: 0.005}),
activityRegularizer: tf.regularizers.l2({l2: 0.001})
}));
biasRegularizer ограничивает величину смещений, что
иногда полезно для моделей с небольшим количеством входов.activityRegularizer накладывает штраф на активацию
слоя, предотвращая чрезмерную экспрессию нейронов.Выбор коэффициента () критичен: слишком маленький — регуляризация
неэффективна, слишком большой — модель недообучается. Часто используют
поиск по сетке (grid search) или перекрёстную
проверку (cross-validation) для определения оптимального
значения. В TensorFlow.js коэффициент указывается в момент создания
регуляризатора (l1, l2), но можно динамически
изменять его через кастомные callback функции при обучении.
Регуляризация напрямую влияет на градиенты, которые применяет оптимизатор. Например, при использовании Adam или SGD обновление весов учитывает регуляризационный штраф:
model.compile({
optimizer: tf.train.adam(0.001),
loss: 'meanSquaredError'
});
Во время обратного распространения ошибки градиенты включают дополнительные слагаемые от регуляризации, что позволяет снижать вероятность переобучения.
Регуляризация в TensorFlow.js предоставляет гибкий и мощный механизм управления сложностью модели, позволяя создавать устойчивые и обобщающие нейронные сети прямо в браузере или на Node.js.