Библиотека Brain.js предоставляет удобный интерфейс для создания и обучения нейронных сетей на JavaScript. Важной частью эффективного обучения является правильный подбор гиперпараметров, которые напрямую влияют на скорость сходимости сети и качество её предсказаний. Гиперпараметры — это настройки, которые задаются до начала процесса обучения и не изменяются автоматически во время него.
Количество скрытых слоев и нейронов в них
В Brain.js структура сети определяется массивом, где каждый элемент задаёт количество нейронов в соответствующем скрытом слое:
const net = new brain.NeuralNetwork({ hiddenLayers: [10, 15] });Малое количество нейронов может привести к недообучению, когда сеть не способна уловить сложные закономерности.
Слишком большое количество нейронов увеличивает риск переобучения и существенно замедляет обучение.
Learning Rate (скорость обучения)
Определяет величину корректировки весов на каждой итерации.
В Brain.js задаётся через параметр learningRate (по
умолчанию 0.3):
const net = new brain.NeuralNetwork({ learningRate: 0.1 });Высокий learning rate ускоряет обучение, но может вызвать нестабильность и пропуск минимума функции потерь.
Низкий learning rate делает обучение медленным, но более стабильным и точным.
Количество итераций
(iterations)
Определяет максимальное число проходов через обучающую выборку.
net.train(trainingData, { iterations: 20000 });Увеличение числа итераций повышает точность модели, но увеличивает время обучения.
При ручном подборе итераций важно наблюдать за функцией потерь
(error) и останавливать обучение, когда улучшения
становятся незначительными.
Функция активации (activation)
Brain.js поддерживает несколько функций активации:
'sigmoid', 'relu', 'leaky-relu',
'tanh'.
const net = new brain.NeuralNetwork({ activation: 'relu' });Sigmoid хорошо работает для бинарной классификации, но может страдать от эффекта исчезающих градиентов.
ReLU и Leaky ReLU эффективны для глубоких сетей и более устойчивы к проблеме градиентов.
Momentum (моментум)
Влияет на скорость и стабильность обучения, помогает преодолевать локальные минимумы функции потерь.
net.train(trainingData, { learningRate: 0.01, momentum: 0.9 });Значения 0.7–0.9 часто дают хороший баланс между ускорением и стабильностью.
Начало с базовых значений
Пошаговая модификация одного параметра
Наблюдение за переобучением
Оптимизация скрытых слоёв
Финальная настройка активации и momentum
error) на
каждой итерации позволяет своевременно остановить обучение и
скорректировать гиперпараметры.toJSON() и fromJSON(), что облегчает
тестирование разных конфигураций без повторного обучения с нуля.const trainingData = [
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
];
// Начальная сеть
let net = new brain.NeuralNetwork({ hiddenLayers: [3], learningRate: 0.3 });
let result = net.train(trainingData, { iterations: 2000 });
console.log(result.error); // фиксируем начальную ошибку
// Изменение learning rate
net = new brain.NeuralNetwork({ hiddenLayers: [3], learningRate: 0.1 });
result = net.train(trainingData, { iterations: 5000 });
console.log(result.error);
// Добавление второго скрытого слоя
net = new brain.NeuralNetwork({ hiddenLayers: [3, 2], learningRate: 0.1 });
result = net.train(trainingData, { iterations: 5000 });
console.log(result.error);
Этот пример иллюстрирует постепенное улучшение модели через последовательное изменение гиперпараметров: сначала learning rate, затем архитектуры сети.
Такой подход позволяет контролировать процесс обучения и оптимально подбирать настройки, адаптированные под конкретную задачу, без необходимости автоматических алгоритмов оптимизации.