Функция активации в нейронных сетях определяет, как суммарный вход нейрона преобразуется в выходной сигнал. В библиотеке Brain.js это ключевой инструмент, влияющий на способность сети к обучению, обобщению и точности предсказаний. В JavaScript-фреймворке для нейросетей функции активации используются для каждого слоя сети, особенно скрытых и выходных нейронов.
Brain.js поддерживает несколько типов функций активации, каждая из которых обладает своими особенностями:
sigmoid Формула: ( f(x) = ) Преобразует вход в диапазон от 0 до 1. Часто используется для бинарной классификации, когда выходной сигнал интерпретируется как вероятность события. Недостаток — эффект затухающего градиента при больших отрицательных или положительных значениях x.
relu (Rectified Linear Unit) Формула: ( f(x) = (0, x) ) Преобразует отрицательные значения в ноль, оставляя положительные без изменений. Позволяет ускорить обучение глубоких сетей и снижает проблему исчезающих градиентов. Однако ReLU может приводить к “мертвым нейронам”, если большая часть весов отрицательна и нейроны перестают активироваться.
leaky-relu Модификация ReLU: ( f(x) = x ), если x > 0, и ( f(x) = 0.01 x ), если x ≤ 0 Позволяет небольшое прохождение отрицательных сигналов, уменьшая риск полного “выключения” нейронов.
tanh (гиперболический тангенс) Преобразует значения в диапазон от -1 до 1. Более симметрична по сравнению с сигмоидой, что улучшает сходимость при обучении. Часто используется для скрытых слоев в задачах регрессии и классификации.
В Brain.js функция активации задается при создании экземпляра нейронной сети через объект конфигурации:
const brain = require('brain.js');
const net = new brain.NeuralNetwork({
hiddenLayers: [10, 10],
activation: 'relu'
});
Параметры конфигурации:
hiddenLayers — массив чисел, задающий количество
нейронов в каждом скрытом слое.activation — строка с названием функции активации.
Возможные значения: 'sigmoid', 'relu',
'leaky-relu', 'tanh'.Выбор функции активации напрямую влияет на скорость обучения, стабильность градиентного спуска и точность модели.
Сигмоида и tanh
ReLU и leaky-ReLU
Пример с бинарной классификацией:
const net = new brain.NeuralNetwork({
hiddenLayers: [5],
activation: 'sigmoid'
});
net.train([
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
]);
const output = net.run([1, 0]);
console.log(output); // Значение в диапазоне 0-1
Пример с регрессией:
const net = new brain.NeuralNetwork({
hiddenLayers: [10, 10],
activation: 'tanh'
});
net.train([
{ input: [0], output: [0] },
{ input: [0.5], output: [0.25] },
{ input: [1], output: [1] }
]);
const result = net.run([0.8]);
console.log(result); // Значение примерно 0.64
Функции активации в Brain.js обеспечивают гибкость и возможность адаптировать сеть под конкретные задачи, от простых классификаций до сложных регрессионных моделей с несколькими скрытыми слоями.