Функции активации и их производные

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


Основные типы функций активации

1. Логистическая функция (Logistic / Sigmoid) Логистическая функция имеет вид:

[ (x) = ]

  • Диапазон значений: (0, 1)
  • Особенности: обеспечивает гладкий градиент, что удобно для обучения методом обратного распространения ошибки.
  • Недостаток: при больших по модулю значениях x градиент стремится к нулю, что может замедлять обучение (эффект «затухающего градиента»).

В Synaptic задается как:

var Neuron = require('synaptic').Neuron;
Neuron.squash.LOGISTIC;

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

[ (x) = ]

  • Диапазон значений: (-1, 1)
  • Особенности: смещает выход в центр (около 0), что ускоряет сходимость сети в сравнении с сигмоидой.
  • Недостаток: при больших значениях входа также может наблюдаться затухание градиента.

В Synaptic доступен как:

Neuron.squash.TANH;

3. Линейная функция (Linear)

[ f(x) = x]

  • Диапазон значений: (-∞, ∞)
  • Особенности: часто используется в выходных слоях регрессионных моделей, где важно сохранить числовой масштаб.
  • Недостаток: не вводит нелинейности, что делает невозможным обучение сложных функций.

В библиотеке:

Neuron.squash.IDENTITY;

4. Степенная функция (HardTanh / Step approximation)

HardTanh представляет собой приближенную версию гиперболического тангенса, ограничивая выход в диапазоне [-1, 1] без экспоненциальных вычислений.

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

Производные функций активации

Производные функций активации необходимы для метода обратного распространения ошибки (Backpropagation). Synaptic реализует их автоматически через объект squash, обеспечивая корректное вычисление градиента для каждого нейрона.

1. Производная логистической функции:

[ ’(x) = (x) (1 - (x))]

2. Производная Tanh:

[ ’(x) = 1 - ^2(x)]

3. Производная линейной функции:

[ f’(x) = 1]

4. Производная HardTanh:

[ f’(x) = ]


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

В Synaptic нейрон можно создать с конкретной функцией активации, например:

var neuron = new Neuron();
neuron.squash = Neuron.squash.LOGISTIC;

Для слоя:

var Layer = require('synaptic').Layer;
var hidden = new Layer(5);
hidden.set({
  squash: Neuron.squash.TANH
});

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


Влияние выбора функции активации на обучение

  • Сигмоида: подходит для бинарной классификации, но медленно обучается при глубокой сети.
  • Tanh: предпочтительнее для скрытых слоев, ускоряет сходимость за счет центровки данных.
  • Линейная: используется только в выходном слое для задач регрессии.
  • HardTanh: экономит ресурсы при больших сетях, но требует осторожного подбора параметров обучения.

Настройка собственных функций активации

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

var customSquash = {
    squash: function(x){
        return x / (1 + Math.abs(x));
    },
    derivative: function(y){
        return 1 / Math.pow(1 + Math.abs(y), 2);
    }
};

var neuron = new Neuron();
neuron.squash = customSquash;

Это даёт гибкость для экспериментальных архитектур и специфических задач.


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