ReLU и его варианты: LeakyReLU, PReLU, ELU, ThresholdedReLU

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

[ f(x) = (0, x)]

Ключевые свойства ReLU:

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

Однако стандартная ReLU имеет недостатки, главный из которых — «мертвые нейроны». Если весовой коэффициент слишком сильно смещает вход нейрона в отрицательную область, градиент там равен нулю, и нейрон перестаёт обучаться.


LeakyReLU

LeakyReLU решает проблему «мертвых нейронов» путём введения небольшого наклона для отрицательных значений:

[ f(x) = ]

где () — маленькое положительное число (обычно 0.01).

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

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

В Keras.js LeakyReLU подключается через объект с параметром alpha, который можно настраивать для конкретной задачи.


PReLU (Parametric ReLU)

PReLU расширяет идею LeakyReLU, делая наклон для отрицательной области обучаемым параметром:

[ f(x) = ]

где () теперь является весовым коэффициентом, который оптимизируется вместе с остальными параметрами сети.

Преимущества PReLU:

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

В Keras.js параметр alpha задается как часть конфигурации слоя, либо может быть инициализирован случайным образом и оптимизироваться в процессе обучения.


ELU (Exponential Linear Unit)

ELU представляет собой более плавную функцию активации, сглаживающую переход через ноль и уменьшающую смещение средней активации:

[ f(x) = ]

где () обычно равно 1.

Свойства ELU:

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

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


ThresholdedReLU

ThresholdedReLU вводит пороговое значение (), при котором активация считается нулевой:

[ f(x) = ]

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

  • Позволяет игнорировать слабые активации, улучшая разреженность слоя.
  • Порог () настраивается под задачу и данные.
  • Используется реже, чем стандартная ReLU, но полезен для специализированных архитектур.

В Keras.js theta задается в конфигурации слоя и может быть адаптирован для каждого слоя индивидуально.


Сравнительные аспекты

Функция Область отрицательных значений Параметры для обучения Особенности
ReLU Обнуляются Нет Простота, риск «мертвых нейронов»
LeakyReLU Наклон маленький α Нет Сохраняет градиенты, предотвращает «мертвые нейроны»
PReLU Наклон обучаемый α Да Автоматическая адаптация наклона
ELU Экспоненциальная функция α (обычно фиксирован) Плавный переход через ноль, ускоряет сходимость
ThresholdedReLU Значения ≤ θ обнуляются θ (порог) Контроль разреженности, игнорирование слабых сигналов

Использование в Keras.js

Все функции активации подключаются через конфигурацию слоя, например, при создании слоя Dense:

const layer = new KerasJS.layers.Dense({
  units: 128,
  activation: 'relu' // или 'leakyrelu', 'prelu', 'elu', 'thresholdedrelu'
});

Для LeakyReLU, PReLU и ThresholdedReLU необходимо дополнительно указать параметры alpha или theta:

const layer = new KerasJS.layers.LeakyReLU({ alpha: 0.1 });
const preluLayer = new KerasJS.layers.PReLU({ alpha_initializer: 'zeros' });
const thresholdLayer = new KerasJS.layers.ThresholdedReLU({ theta: 1.0 });

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