SELU и его свойства

SELU (Scaled Exponential Linear Unit) — это функция активации, разработанная для глубоких нейронных сетей с целью самоподдерживающейся нормализации. Она представляет собой модифицированную версию ELU (Exponential Linear Unit), дополненную масштабным коэффициентом для стабилизации распределения активаций на каждом слое.

Математическая формула

Функция SELU определяется как:

[ (x) = ]

где () и () — заранее подобранные константы. Эти коэффициенты обеспечивают сохранение среднего значения и дисперсии активаций на уровне 0 и 1 соответственно, что важно для самоподдерживающейся нормализации (self-normalizing property).

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

  1. Самонормализация SELU поддерживает активации близкими к нулю по среднему и единичной дисперсии. Это снижает необходимость использования batch normalization, так как функция сама регулирует распределение выходов слоев.

  2. Отрицательная и положительная ветви

    • Для (x > 0) функция линейна: (x), что сохраняет градиент и уменьшает эффект затухания.
    • Для (x ) экспоненциальная часть ((e^x - 1)) позволяет отрицательным активациям существовать, что предотвращает “мертвые нейроны”, характерные для ReLU.
  3. Стабильный градиент SELU уменьшает риск исчезающего и взрывающегося градиента при правильной инициализации весов и архитектуре сети.

  4. Инициализация весов Для работы SELU рекомендуется использовать LeCun Normal Initialization. Она генерирует веса из нормального распределения с нулевым средним и дисперсией (1/n), где (n) — число входов нейрона. Такая инициализация совместима с самоподдерживающейся нормализацией.

  5. Совместимость с глубокими сетями SELU особенно эффективна в глубоких feedforward сетях. При условии плотной последовательной архитектуры (без пропусков и dropout) она позволяет сети обучаться быстрее и с более устойчивой конвергенцией.

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

В Keras.js функция SELU доступна через стандартный слой активации. Пример подключения SELU к полносвязному слою:

const layer = new KerasJS.layers.Dense({
  units: 128,
  activation: 'selu',
  inputShape: [64]
});

Особенности применения:

  • Активировать SELU следует только на слоях, где поддерживается самоподдерживающаяся нормализация (Dense слои с нормальной инициализацией весов).
  • Dropout при использовании SELU должен быть заменен на AlphaDropout, который сохраняет статистику распределения активаций. AlphaDropout случайным образом обнуляет нейроны, корректируя отрицательные значения так, чтобы среднее и дисперсия оставались стабильными.
const dropoutLayer = new KerasJS.layers.AlphaDropout({
  rate: 0.1
});

Практические рекомендации

  • Сеть должна быть последовательной и плотно связанной, чтобы SELU корректно поддерживал самонормализацию.
  • Инициализация весов обязательна через LeCun Normal, иначе свойства SELU будут нарушены.
  • AlphaDropout следует использовать вместо стандартного Dropout для сохранения распределения активаций.
  • SELU идеально подходит для глубоких сетей, где стандартные ReLU и ELU вызывают проблемы с градиентами.

Влияние на обучение

Использование SELU позволяет:

  • Ускорить сходимость сети за счет стабилизации распределений слоев.
  • Снизить вероятность возникновения “мертвых нейронов”.
  • Уменьшить зависимость от batch normalization, упрощая архитектуру и снижая вычислительные затраты.

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