L1 регуляризация является одной из ключевых техник, применяемых для предотвращения переобучения нейронных сетей. Она добавляет штраф к функции потерь, пропорциональный сумме абсолютных значений весов модели. Это приводит к тому, что многие веса становятся строго равными нулю, что создаёт эффект разреженности модели.
В ConvNetJS L1 регуляризация реализуется через
параметр l1_decay при создании слоёв или при настройке
тренировки нейросети. Основной принцип работы заключается в модификации
градиента для каждого веса:
[ = + (w)]
где ( ) — коэффициент L1 регуляризации, а ( (w) ) возвращает знак веса ( w ) (1 для положительных, -1 для отрицательных, 0 для нуля). Это отличает L1 от L2 регуляризации, которая штрафует квадраты весов и склонна уменьшать их величину, не обнуляя их полностью.
В ConvNetJS сеть создаётся через объект
ConvNetJS.Net. L1 регуляризация может быть задана для
каждого слоя с помощью следующих свойств:
l1_decay — основной коэффициент L1
регуляризации для слоя.l2_decay — аналогичный коэффициент для
L2 регуляризации, может использоваться совместно.Пример конфигурации полносвязного слоя с L1 регуляризацией:
var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:10});
layer_defs.push({type:'fc', num_neurons:20, activation:'relu', l1_decay:0.001});
layer_defs.push({type:'softmax', num_classes:5});
var net = new convnetjs.Net();
net.makeLayers(layer_defs);
Здесь l1_decay: 0.001 задаёт небольшую L1 регуляризацию,
которая постепенно приведёт к обнулению малых весов в процессе
тренировки.
L1 регуляризация оказывает следующие эффекты на модель:
Разреженность весов. Многие веса становятся равными нулю, что уменьшает сложность модели и снижает вероятность переобучения. Этот эффект полезен при работе с высокоразмерными входными данными, где не все признаки значимы.
Устойчивость к шуму. Поскольку лишние веса обнуляются, сеть становится менее чувствительной к случайным шумам в данных.
Интерпретируемость модели. Веса, оставшиеся ненулевыми, показывают наиболее значимые признаки, что упрощает анализ важности признаков.
ConvNetJS поддерживает разные оптимизаторы, включая
SGD, AdaGrad и
RMSProp. L1 регуляризация применяется автоматически при
обновлении весов, если задан l1_decay для слоя.
Например:
var trainer = new convnetjs.SGDTrainer(net, {
learning_rate:0.01,
momentum:0.9,
l1_decay:0.001,
batch_size:10
});
Здесь l1_decay задаёт глобальный коэффициент L1 для всех
слоёв, если они не имеют собственного локального значения. При каждом
шаге оптимизации веса корректируются с учётом L1 штрафа:
[ w w - ( + (w) )]
где () — скорость обучения, () — L1 коэффициент.
l1_decay берут в диапазоне от 0.0001 до 0.01. Слишком
большие значения могут обнулять все веса и мешать обучению.ConvNetJS предоставляет прямой доступ к весам через объект слоя:
var fc_layer = net.layers[1]; // полносвязный слой
var weights = fc_layer.w; // объект convnetjs.Vol
console.log(weights.w); // массив весов
Анализ этого массива позволяет наблюдать динамику разреживания весов. Веса, близкие к нулю, демонстрируют эффект L1 регуляризации.
l1_decay, что позволяет тонко настраивать
регуляризацию по слоям.Эффективное использование L1 регуляризации в ConvNetJS требует
балансировки между коэффициентами l1_decay, размером сети и
сложностью задачи. Она играет ключевую роль в построении разреженных,
устойчивых и интерпретируемых нейронных сетей, особенно при работе с
высокоразмерными или шумными данными.