Функция активации в нейронной сети определяет, как входные сигналы
преобразуются в выходные значения нейрона. Она влияет на способность
сети моделировать сложные зависимости и решать задачи классификации,
регрессии или генерации данных. В ConvNetJS функции активации
применяются на уровне слоев и задаются при создании слоя с помощью
параметра activation.
Основные функции активации, используемые в ConvNetJS:
ReLU, Sigmoid, Tanh,
Softmax, Leaky ReLU. Каждая имеет свои
особенности, преимущества и ограничения.
ReLU (Rectified Linear Unit)
Формула: [ f(x) = (0, x)]
Ключевые характеристики:
- Простая и вычислительно эффективная функция.
- Обеспечивает разреженность активаций, так как
отрицательные значения обнуляются.
- Ускоряет обучение за счёт отсутствия насыщения на положительных
значениях.
Преимущества для ConvNetJS:
- Снижает эффект затухающего градиента по сравнению с Sigmoid и
Tanh.
- Хорошо подходит для глубоких сверточных сетей, особенно при работе с
изображениями.
Недостатки:
- Возможность “умирающих нейронов” — нейроны, которые всегда дают ноль
и не обновляют веса.
- Не симметрична относительно нуля, что может замедлять обучение в
некоторых случаях.
Применение:
layer_defs.push({type:'fc', num_neurons:100, activation:'relu'});
Sigmoid
Формула: [ f(x) = ]
Ключевые характеристики:
- Выход ограничен диапазоном [0,1], что удобно для вероятностных
интерпретаций.
- Насыщается при больших по модулю входах, что ведёт к
затухающему градиенту.
Преимущества:
- Полезна для моделей с бинарной классификацией.
- Хорошо интерпретируемая в probabilistic loss.
Недостатки:
- Малая эффективность в глубоких сетях.
- Склонность к переполнению экспоненты при больших входных
значениях.
Применение:
layer_defs.push({type:'fc', num_neurons:50, activation:'sigmoid'});
Tanh (Hyperbolic Tangent)
Формула: [ f(x) = (x) = ]
Ключевые характеристики:
- Диапазон выхода [-1, 1], что делает распределение активаций
центрированным вокруг нуля.
- Меньше проблем с градиентным затуханием по сравнению с Sigmoid.
Преимущества:
- Полезна для скрытых слоёв, где важно центрирование данных.
- Часто показывает лучшие результаты в средних по глубине сетях.
Недостатки:
- Также подвержена проблеме затухающего градиента при больших
значениях.
- Вычислительно дороже ReLU.
Применение:
layer_defs.push({type:'fc', num_neurons:100, activation:'tanh'});
Softmax
Формула: [ f(x_i) = ]
Ключевые характеристики:
- Преобразует вектор выходов слоя в вероятностное распределение.
- Используется только на выходном слое для многоклассовой
классификации.
Преимущества:
- Позволяет интерпретировать выход как вероятности классов.
- Сочетается с кросс-энтропийной функцией потерь.
Недостатки:
- Не применима в скрытых слоях.
- Чувствительна к числовой стабильности при больших значениях
входов.
Применение:
layer_defs.push({type:'softmax', num_classes:10});
Leaky ReLU
Формула: [ f(x) = ]
Ключевые характеристики:
- Модификация ReLU, предотвращающая “умирание нейронов”.
α обычно задается небольшим числом, например 0.01.
Преимущества:
- Сохраняет все свойства ReLU, но улучшает обучение при больших
отрицательных входах.
- Часто используется в генеративных сетях и глубоких
архитектурах.
Применение:
layer_defs.push({type:'fc', num_neurons:128, activation:'leakyrelu'});
Выбор функции активации
по типу задачи
- Классификация бинарная: Sigmoid на выходе; ReLU или
Tanh в скрытых слоях.
- Классификация многоклассовая: Softmax на выходе;
ReLU или Leaky ReLU в скрытых слоях.
- Регрессия: Обычно линейная функция на выходе; ReLU
или Tanh в скрытых слоях.
- Глубокие сверточные сети: ReLU или Leaky ReLU в
скрытых слоях для ускорения обучения и предотвращения затухания
градиента.
Принципиальные моменты:
- Внутренние слои выигрывают от функций с ненасыщающимся градиентом
(ReLU, Leaky ReLU).
- Выходные слои должны соответствовать задаче (Softmax для
вероятностей, линейная для регрессии).
- Центрирование активаций (Tanh) может ускорять сходимость для
некоторых архитектур.
Если требуется, можно добавить таблицу сравнения функций
активации с их диапазоном, преимуществами, недостатками и
примерной областью применения в ConvNetJS, что удобно для быстрого
выбора.