Функции активации являются ключевым компонентом нейронных сетей, определяя, каким образом суммарный вход нейрона преобразуется в выходной сигнал. В библиотеке Synaptic на JavaScript функции активации реализованы для обеспечения гибкости построения как простых, так и глубоких сетей.
Линейная функция активации определяется простым соотношением:
[ f(x) = x]
где (x) — суммарный вход нейрона, вычисляемый как:
[ x = _{i=1}^{n} w_i x_i + b]
Линейная функция используется для задач регрессии, где требуется, чтобы выход нейрона сохранял пропорциональность входу. Она не добавляет нелинейности, поэтому нейрон с линейной активацией ограничивает способность сети моделировать сложные зависимости.
Сигмоида обеспечивает нелинейное сжатие входного значения в диапазоне (0)–(1). Формула функции:
[ f(x) = ]
Свойства:
В Synaptic сигмоидальная функция часто применяется в скрытых слоях и выходных нейронах, когда требуется вероятностное представление результатов.
Функция tanh является аналогом сигмоиды, но с выходом в диапазоне (-1) до (1):
[ f(x) = (x) = ]
Особенности:
ReLU — одна из наиболее распространённых функций для глубоких нейронных сетей. Определение:
[ f(x) = (0, x)]
Характеристики:
В Synaptic ReLU может быть реализована через кастомные функции активации, что позволяет гибко адаптировать сеть под специфические задачи.
Leaky ReLU устраняет проблему “умирающих” нейронов ReLU, вводя небольшой наклон для отрицательных значений:
[ f(x) = ]
Функции активации влияют на производные нейронов, что критически важно для метода обратного распространения ошибки. Пусть выход нейрона (y = f(x)), тогда градиент по весу (w_i) вычисляется как:
[ = = x_i]
где (= f’(x)). Здесь (f’(x)) определяется выбранной функцией активации. Следовательно, выбор функции активации напрямую влияет на величину градиента и скорость обучения сети.
В Synaptic можно задавать функции активации на уровне
нейрона через конструктор Neuron или на
уровне слоя при использовании Layer. Для кастомной функции
необходимо определить два метода:
activation(x) — вычисление функции активацииderivative(y) — вычисление производной по выходу
нейронаПример сигмоидной функции:
var SigmoidNeuron = new synaptic.Neuron({
squash: function(x) {
return 1 / (1 + Math.exp(-x));
},
derivative: function(y) {
return y * (1 - y);
}
});
Такой подход позволяет расширять стандартные возможности библиотеки и экспериментировать с новыми типами активаций, включая гибридные и нелинейные комбинации.
Правильный выбор функции активации определяет эффективность и стабильность обучения нейронной сети в Synaptic и является фундаментальным аспектом проектирования архитектуры.