Функции активации

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


Линейная активация (Identity)

Линейная функция активации описывается формулой:

[ f(x) = x]

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

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

  • Не добавляет нелинейности.
  • Градиент постоянен, что предотвращает затухание или взрыв градиента.
  • Прямое использование в глубоких сетях ограничено, так как сеть сводится к линейной комбинации входов.

В ConvNetJS линейная активация задаётся через параметр act: 'identity'.


Сигмоидальная функция (Sigmoid)

Сигмоидальная функция описывается выражением:

[ (x) = ]

Выход функции находится в диапазоне ( (0, 1) ), что делает её удобной для моделирования вероятностей.

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

  • Легко интерпретируется как вероятность.
  • Гладкая дифференцируемая функция.

Недостатки:

  • Склонна к затуханию градиента при больших значениях ( |x| ).
  • Не центрирована относительно нуля, что может замедлять обучение.

В ConvNetJS сигмоид задаётся через act: 'sigmoid'.


Гиперболический тангенс (Tanh)

Функция tanh описывается формулой:

[ (x) = ]

Её выход лежит в диапазоне ((-1, 1)), что делает распределение активаций более симметричным относительно нуля.

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

  • Центрирование выходов около нуля ускоряет сходимость обучения.
  • Более сильная нелинейность по сравнению с сигмоидой.

Недостатки:

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

В ConvNetJS активация tanh указывается как act: 'tanh'.


ReLU (Rectified Linear Unit)

ReLU является одной из наиболее популярных функций активации:

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

Она обнуляет все отрицательные значения и пропускает положительные без изменений.

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

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

Недостатки:

  • Может возникнуть проблема “мертвых нейронов”, когда градиенты постоянно равны нулю для некоторых нейронов.
  • Не центрирована относительно нуля.

В ConvNetJS ReLU задаётся как act: 'relu'. Существуют модификации ReLU, такие как Leaky ReLU, которые используют небольшой положительный градиент для отрицательных значений (act: 'leakyrelu').


Softmax

Softmax преобразует вектор чисел в вероятностное распределение:

[ (x_i) = ]

Применение:

  • Используется исключительно в выходных слоях для многоклассовой классификации.
  • Гарантирует, что сумма всех выходов равна 1.

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

  • Чувствительна к большим значениям входа, что может приводить к численной нестабильности.
  • В ConvNetJS softmax реализуется через act: 'softmax'.

Взаимодействие функций активации с обучением

Выбор функции активации напрямую влияет на:

  1. Скорость сходимости: ReLU и его модификации часто ускоряют обучение по сравнению с сигмоидой или tanh.
  2. Затухание градиента: функции, ограниченные диапазоном (sigmoid, tanh), более подвержены этой проблеме.
  3. Числовую стабильность: softmax требует аккуратной обработки больших экспонент для предотвращения переполнений.

Использование функций активации в ConvNetJS

При создании слоя в ConvNetJS активация задаётся как параметр activation. Например:

var layer = new convnetjs.Layer({type:'fc', num_neurons:128, activation:'relu'});
  • fc — полностью связанный слой.
  • num_neurons — количество нейронов в слое.
  • activation — тип функции активации.

Для сверточных слоев:

var convLayer = new convnetjs.Layer({
    type: 'conv',
    sx: 5,
    filters: 16,
    stride: 1,
    pad: 2,
    activation: 'tanh'
});

Параметр activation одинаково применим ко всем слоям, поддерживающим нелинейность.


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

  • Для скрытых слоев глубоких сетей предпочтительнее ReLU или его модификации.
  • Sigmoid и tanh лучше использовать в малых сетях или там, где важна интерпретация выхода как вероятность.
  • Softmax применяется исключительно на выходе для многоклассовой классификации.
  • Линейная активация актуальна для регрессии или в архитектурах типа автоэнкодеров.

Функции активации в ConvNetJS тесно интегрированы с архитектурой слоев и оптимизаторами, поэтому их правильный выбор критически влияет на обучение и стабильность сети.