Функции активации в нейронных сетях определяют, как входные сигналы преобразуются в выходные значения нейрона. В задачах регрессии они играют критическую роль, так как напрямую влияют на диапазон и форму выходных данных модели. В библиотеке Brain.js, предназначенной для работы с нейронными сетями в JavaScript, выбор функции активации требует учета характеристик данных и требований к предсказаниям.
В Brain.js доступны следующие функции активации для скрытых и выходных слоев:
Sigmoid Преобразует любое действительное число в диапазон от 0 до 1. Формула:
[ (x) = ]
Применение: удобно использовать для нормализованных данных, когда предсказания должны быть ограничены в диапазоне [0,1]. Недостаток — насыщение градиентов при больших значениях входа, что может замедлять обучение.
Tanh Возвращает значения в диапазоне от -1 до 1. Формула:
[ (x) = ]
Применение: хорошо подходит, если данные предварительно стандартизированы. Tanh обладает более сильной нелинейностью, чем Sigmoid, что позволяет модели захватывать более сложные зависимости.
ReLU (Rectified Linear Unit) Возвращает входное значение, если оно положительное, иначе — 0:
[ (x) = (0, x)]
Применение: популярна для глубоких сетей, так как предотвращает затухание градиентов. Для регрессии подходит, если выходная переменная не ограничена отрицательными значениями.
Leaky ReLU Модификация ReLU, которая пропускает небольшую часть отрицательного входа:
[ (x) = ]
Позволяет избежать «мертвых» нейронов и обеспечивает стабильность обучения на широком диапазоне данных.
Регрессия требует предсказаний, которые могут принимать любые значения или значения в определенном диапазоне. Основные критерии выбора:
Диапазон выходных данных Если целевая переменная ограничена, например, в интервале [0,1] или [-1,1], логично использовать Sigmoid или Tanh. Если диапазон широкий и не ограничен, предпочтительнее ReLU или линейная активация на выходе.
Скорость обучения и стабильность градиентов Sigmoid и Tanh могут вызвать насыщение градиентов при больших значениях входа. ReLU и Leaky ReLU более устойчивы к этому эффекту и часто ускоряют обучение.
Нелинейность функции Для сложных зависимостей между признаками и целевой переменной важно использовать функции с выраженной нелинейностью (Tanh или ReLU в сочетании с несколькими слоями).
Для настройки функции активации в Brain.js используется свойство
activation при создании сети:
const brain = require('brain.js');
const net = new brain.NeuralNetwork({
activation: 'relu', // выбор функции активации
hiddenLayers: [10, 10],
learningRate: 0.01
});
Особенности:
activation может принимать значения
'sigmoid', 'tanh', 'relu',
'leaky-relu'.output с
соответствующей функцией, чтобы не ограничивать диапазон
предсказаний.Регрессия с ограниченной функцией активации требует масштабирования данных. Например:
function normalize(value, min, max) {
return (value - min) / (max - min); // для Sigmoid
}
function denormalize(value, min, max) {
return value * (max - min) + min;
}
Преобразование входных и выходных данных в согласованный диапазон позволяет избежать проблем с насыщением функций активации и повышает точность модели.
Правильный подбор функции активации и предварительная обработка данных обеспечивают стабильность обучения и точность предсказаний при использовании Brain.js для регрессионных задач.