Leaky ReLU

Leaky ReLU (Leaky Rectified Linear Unit) является модификацией стандартной функции активации ReLU, направленной на решение проблемы «умирающих нейронов», характерной для обычной ReLU. Основная идея заключается в том, чтобы разрешить небольшое, но ненулевое градиентное значение при отрицательных входах.


Математическое определение

Функция Leaky ReLU определяется следующим образом:

[ f(x) = ]

где () — коэффициент наклона для отрицательных значений, обычно в диапазоне от 0.01 до 0.1.

Ключевой момент: Благодаря наличию (> 0) градиенты для отрицательных значений не обнуляются полностью, что предотвращает проблему «умирающих нейронов», когда нейрон перестаёт обновлять веса.


Реализация Leaky ReLU в ConvNetJS

В библиотеке 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) вычисляет градиенты следующим образом:

[ = ]

Это позволяет весам продолжать обновляться даже при отрицательных значениях входа.


Преимущества использования Leaky ReLU

  1. Стабильность обучения — нейроны не «умирают», что обеспечивает более устойчивое обновление весов.
  2. Ускорение сходимости — благодаря сохранению градиентов для отрицательных входов градиенты не обнуляются и обучение проходит быстрее.
  3. Простота реализации — не требует дополнительных параметров кроме коэффициента наклона.
  4. Гибкость — можно регулировать leakiness для адаптации к конкретной задаче.

Практическое использование в ConvNetJS

Leaky ReLU чаще всего применяется в следующих сценариях:

  • Глубокие сверточные нейронные сети, где большое количество слоев повышает риск «умирающих» нейронов.
  • Задачи классификации и регрессии, где отрицательные активации могут содержать полезную информацию.
  • Сетевые архитектуры с нестандартными распределениями входных данных, когда 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 напрямую влияет на поведение сети:

  • Малые значения (0.01–0.05) — минимальная модификация стандартной ReLU, нейроны почти «как ReLU».
  • Средние значения (0.05–0.1) — более выраженное влияние на отрицательные значения, улучшает обучение в глубоких сетях.
  • Большие значения (>0.1) — может нарушать линейность активации для положительных значений, использовать осторожно.

Влияние на обучение и регуляризацию

Leaky ReLU обладает мягким эффектом регуляризации, так как не полностью обнуляет отрицательные значения. Это:

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

Отличие от Parametric ReLU (PReLU)

Leaky ReLU использует фиксированное значение (), тогда как PReLU обучает этот параметр вместе с весами. В ConvNetJS PReLU реализуется отдельно, и Leaky ReLU выступает как статичная версия с постоянным наклоном.


Итоговая структура слоя с Leaky ReLU в ConvNetJS

  • Тип слоя: ReLULayer
  • Основные параметры: num_neurons, leakiness
  • Активация: (f(x) = x) для (x>0), (f(x) = x) для (x )
  • Градиент: масштабируется коэффициентом leakiness для отрицательных входов
  • Применение: глубокие сети, сверточные и полносвязные слои, задачи с риском «умирающих» нейронов

Leaky ReLU является простым и эффективным инструментом для стабилизации и ускорения обучения нейросетей в ConvNetJS.