Brain.js — это библиотека на JavaScript для создания и обучения нейронных сетей. Она позволяет строить модели как для классификации, так и для регрессии. В контексте предсказания непрерывных значений основное внимание уделяется регрессии, где задача состоит в том, чтобы модель выдавала числовые значения на основе входных данных.
В Brain.js регрессионные задачи решаются с использованием Feedforward Neural Network или Recurrent Neural Network. Для предсказания непрерывных чисел чаще применяется NeuralNetwork с линейной или сигмоидной функцией активации на выходном слое.
const brain = require('brain.js');
const net = new brain.NeuralNetwork({
activation: 'sigmoid', // можно также 'relu' или 'leaky-relu'
hiddenLayers: [10, 10], // два скрытых слоя по 10 нейронов
learningRate: 0.01
});
Ключевые параметры:
activation — функция активации, влияющая на способность
сети моделировать нелинейные зависимости.hiddenLayers — массив, задающий количество нейронов в
каждом скрытом слое.learningRate — скорость обучения; слишком высокая может
привести к нестабильности, слишком низкая — к медленному обучению.Для регрессии данные должны быть нормализованы в
диапазон [0,1] или [-1,1]. Нормализация
необходима для стабильного обучения сети.
function normalize(value, min, max) {
return (value - min) / (max - min);
}
function denormalize(normValue, min, max) {
return normValue * (max - min) + min;
}
const trainingData = [
{ input: [normalize(10, 0, 100)], output: [normalize(20, 0, 100)] },
{ input: [normalize(50, 0, 100)], output: [normalize(60, 0, 100)] },
{ input: [normalize(90, 0, 100)], output: [normalize(95, 0, 100)] },
];
Важно: выходные данные также нормализуются, иначе сеть не сможет корректно предсказывать значения.
Обучение сети происходит через метод .train(). Для
регрессии важно правильно подобрать количество итераций
и порог ошибки.
net.train(trainingData, {
iterations: 20000,
errorThresh: 0.0005,
log: true,
logPeriod: 1000,
learningRate: 0.01
});
iterations — максимальное количество шагов
обучения.errorThresh — порог ошибки, при достижении которого
обучение остановится.log и logPeriod — контроль прогресса
обучения.Совет: слишком маленький errorThresh
может привести к переобучению, а слишком большой — к неточным
предсказаниям.
После обучения можно использовать метод .run() для
предсказания.
const normalizedPrediction = net.run([normalize(30, 0, 100)]);
const prediction = denormalize(normalizedPrediction[0], 0, 100);
console.log(prediction); // например, 35.7
Особенности:
relu
или leaky-relu часто дают более точные результаты, чем
сигмоид.Brain.js обеспечивает легкий старт для регрессионных задач без необходимости глубокого погружения в математические детали нейронных сетей, при этом позволяет настраивать архитектуру и параметры обучения для достижения высокой точности предсказаний.