Leaky ReLU (Leaky Rectified Linear Unit) является модификацией стандартной функции активации ReLU, направленной на решение проблемы «умирающих нейронов», характерной для обычной ReLU. Основная идея заключается в том, чтобы разрешить небольшое, но ненулевое градиентное значение при отрицательных входах.
Функция Leaky ReLU определяется следующим образом:
[ f(x) = ]
где () — коэффициент наклона для отрицательных значений, обычно в диапазоне от 0.01 до 0.1.
Ключевой момент: Благодаря наличию (> 0) градиенты для отрицательных значений не обнуляются полностью, что предотвращает проблему «умирающих нейронов», когда нейрон перестаёт обновлять веса.
В библиотеке ConvNetJS для определения слоя с Leaky
ReLU используется объект relu_layer с опцией
leaky. Пример инициализации слоя:
var layer = new convnetjs.ReLULayer({
num_neurons: 100,
leakiness: 0.01
});
Пояснения параметров:
num_neurons — количество нейронов в слое.leakiness — коэффициент (), управляющий наклоном для
отрицательных значений. По умолчанию равен 0 (обычная ReLU).Прямое распространение (forward pass) через Leaky ReLU выполняется по формуле:
[ y_i = ]
где (x_i) — входное значение нейрона, (y_i) — выходное.
Обратное распространение (backward pass) вычисляет градиенты следующим образом:
[ = ]
Это позволяет весам продолжать обновляться даже при отрицательных значениях входа.
leakiness для адаптации к конкретной задаче.Leaky ReLU чаще всего применяется в следующих сценариях:
Пример создания небольшой сети с Leaky ReLU:
var layer_defs = [];
layer_defs.push({type:'input', out_sx:28, out_sy:28, out_depth:1});
layer_defs.push({type:'conv', sx:5, filters:8, stride:1, pad:2, activation:'leaky', leakiness:0.01});
layer_defs.push({type:'pool', sx:2, stride:2});
layer_defs.push({type:'fc', num_neurons:100, activation:'leaky', leakiness:0.01});
layer_defs.push({type:'softmax', num_classes:10});
var net = new convnetjs.Net();
net.makeLayers(layer_defs);
В этом примере два слоя используют Leaky ReLU с коэффициентом
0.01. Сеть готова к обучению с использованием стандартного
оптимизатора ConvNetJS.
leakinessВыбор коэффициента leakiness напрямую влияет на
поведение сети:
Leaky ReLU обладает мягким эффектом регуляризации, так как не полностью обнуляет отрицательные значения. Это:
Leaky ReLU использует фиксированное значение (), тогда как PReLU обучает этот параметр вместе с весами. В ConvNetJS PReLU реализуется отдельно, и Leaky ReLU выступает как статичная версия с постоянным наклоном.
ReLULayernum_neurons,
leakinessleakiness для отрицательных входовLeaky ReLU является простым и эффективным инструментом для стабилизации и ускорения обучения нейросетей в ConvNetJS.