Функции активации и их свойства

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

Типы функций активации

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

  1. Sigmoid (сигмоида) Формула: [ (x) = ] Сигмоида преобразует значения в диапазон от 0 до 1. Это делает её удобной для задач бинарной классификации. Ключевое свойство: непрерывность и дифференцируемость, что облегчает процесс обратного распространения ошибки. Недостатки: при больших абсолютных значениях входа производная стремится к нулю, что может замедлять обучение — эффект «затухающего градиента».

  2. Tanh (гиперболический тангенс) Формула: [ (x) = ] Выходной диапазон: от -1 до 1. Позволяет центровать данные вокруг нуля, что ускоряет сходимость в некоторых задачах. Часто используется для скрытых слоев, так как имеет более широкий диапазон по сравнению с сигмоидой.

  3. ReLU (Rectified Linear Unit) Формула: [ f(x) = (0, x)] Преобразует все отрицательные значения в ноль, а положительные пропускает без изменений. ReLU ускоряет обучение больших сетей благодаря линейному характеру для положительных значений. Особенность: избегает эффекта затухающего градиента для положительных входов. Ограничение: существует риск «умирающих нейронов», если на некоторых нейронах всегда отрицательные значения.

  4. Leaky ReLU Вариант ReLU с малым наклоном для отрицательных значений: [ f(x) = ] Решает проблему мертвых нейронов, позволяя отрицательным сигналам частично проходить.

  5. Softmax Преобразует массив чисел в вероятностное распределение: [ (x_i) = ] Используется на выходном слое сетей для многоклассовой классификации. Каждое значение интерпретируется как вероятность принадлежности к определённому классу.


Свойства функций активации

Непрерывность и дифференцируемость Все функции активации должны быть дифференцируемыми, чтобы алгоритм обратного распространения ошибки корректно рассчитывал градиенты. Дифференцируемость влияет на стабильность и скорость обучения.

Диапазон значений Выбор функции с определённым диапазоном выходных значений влияет на нормализацию данных внутри сети. Сигмоида ограничивает значения между 0 и 1, tanh — между -1 и 1, ReLU — не имеет верхней границы.

Насыщение Функции, у которых производная стремится к нулю при больших абсолютных значениях входа (сигмоида, tanh), могут замедлять обучение из-за затухания градиента. ReLU избегает этой проблемы для положительных значений.

Центрирование данных Функции, симметричные относительно нуля (tanh), способствуют тому, чтобы градиенты распределялись более равномерно, ускоряя обучение.

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


Настройка функции активации в Brain.js

В Brain.js функция активации задаётся при создании сети:

const brain = require('brain.js');
const net = new brain.NeuralNetwork({
  hiddenLayers: [10, 10],
  activation: 'relu' // можно выбрать 'sigmoid', 'tanh', 'relu', 'leaky-relu'
});

Для задач многоклассовой классификации используется отдельный класс NeuralNetworkGPU или метод с softmax на выходном слое.

const net = new brain.NeuralNetwork({
  outputSize: 3,
  activation: 'sigmoid'
});

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


Рекомендации по выбору функции активации

  • Sigmoid: бинарная классификация, выход 0–1.
  • Tanh: скрытые слои при нормализованных данных вокруг нуля.
  • ReLU / Leaky ReLU: глубокие сети, ускорение обучения, sparsity.
  • Softmax: выходной слой для многоклассовой классификации.

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