SELU (Scaled Exponential Linear Unit) — это функция активации, разработанная для глубоких нейронных сетей с целью самоподдерживающейся нормализации. Она представляет собой модифицированную версию ELU (Exponential Linear Unit), дополненную масштабным коэффициентом для стабилизации распределения активаций на каждом слое.
Функция SELU определяется как:
[ (x) = ]
где () и () — заранее подобранные константы. Эти коэффициенты обеспечивают сохранение среднего значения и дисперсии активаций на уровне 0 и 1 соответственно, что важно для самоподдерживающейся нормализации (self-normalizing property).
Самонормализация SELU поддерживает активации близкими к нулю по среднему и единичной дисперсии. Это снижает необходимость использования batch normalization, так как функция сама регулирует распределение выходов слоев.
Отрицательная и положительная ветви
Стабильный градиент SELU уменьшает риск исчезающего и взрывающегося градиента при правильной инициализации весов и архитектуре сети.
Инициализация весов Для работы SELU рекомендуется использовать LeCun Normal Initialization. Она генерирует веса из нормального распределения с нулевым средним и дисперсией (1/n), где (n) — число входов нейрона. Такая инициализация совместима с самоподдерживающейся нормализацией.
Совместимость с глубокими сетями SELU особенно эффективна в глубоких feedforward сетях. При условии плотной последовательной архитектуры (без пропусков и dropout) она позволяет сети обучаться быстрее и с более устойчивой конвергенцией.
В Keras.js функция SELU доступна через стандартный слой активации. Пример подключения SELU к полносвязному слою:
const layer = new KerasJS.layers.Dense({
units: 128,
activation: 'selu',
inputShape: [64]
});
Особенности применения:
const dropoutLayer = new KerasJS.layers.AlphaDropout({
rate: 0.1
});
Использование SELU позволяет:
SELU представляет собой мощный инструмент для построения устойчивых и глубоких сетей, особенно когда требуется высокая стабильность и эффективность обучения без дополнительных нормализующих слоев.