Для работы с Brain.js в веб-среде достаточно подключить библиотеку через CDN. Это позволяет сразу использовать функционал без необходимости установки через npm:
<script src="https://cdn.jsdelivr.net/npm/brain.js@2.0.0/dist/brain.min.js"></script>
После подключения создается глобальный объект brain,
через который доступны все типы сетей и утилиты.
Brain.js предоставляет несколько классов нейронных сетей, наиболее часто используемые:
Выбор типа сети зависит от задачи: для простых бинарных классификаций
достаточно NeuralNetwork, для обработки текста и
последовательных данных – LSTM или GRU.
Нейронная сеть Brain.js ожидает данные в формате объектов с ключами
input и output. Для бинарной
классификации:
const trainingData = [
{ input: { red: 1, green: 0, blue: 0 }, output: { color: 1 } },
{ input: { red: 0, green: 1, blue: 0 }, output: { color: 0 } },
];
Для числовых и категориальных значений важно нормализовать данные в
диапазон [0, 1]. Это повышает точность обучения и ускоряет
сходимость.
const net = new brain.NeuralNetwork({
hiddenLayers: [3], // один скрытый слой с 3 нейронами
activation: 'sigmoid' // функция активации: 'sigmoid', 'relu', 'tanh'
});
Ключевые параметры:
hiddenLayers – массив, задающий количество скрытых
слоев и число нейронов в каждом.activation – функция активации, определяющая
нелинейность. relu обычно быстрее обучается,
sigmoid подходит для бинарных задач.learningRate – скорость обучения, значение по умолчанию
0.3. Уменьшение замедляет обучение, но повышает стабильность.Brain.js поддерживает синхронное и асинхронное обучение. Простейший синхронный пример:
net.train(trainingData, {
iterations: 20000, // максимальное число итераций
errorThresh: 0.005, // допустимая ошибка
log: true, // вывод прогресса в консоль
logPeriod: 1000 // каждые 1000 итераций
});
Особенности параметров обучения:
iterations – количество проходов по обучающей выборке.
Слишком большое значение может привести к переобучению.errorThresh – целевой уровень ошибки. Обучение
остановится, когда средняя ошибка опустится ниже этого порога.log и logPeriod – полезны для отслеживания
прогресса в браузере.Для асинхронного обучения используется метод trainAsync,
который возвращает промис и не блокирует интерфейс:
await net.trainAsync(trainingData, { iterations: 10000 });
После обучения сеть готова к прогнозированию:
const output = net.run({ red: 1, green: 0, blue: 0 });
console.log(output);
Вывод будет объектом с вероятностями, соответствующими каждой категории. Для бинарной классификации можно применить пороговое значение:
const predicted = output.color > 0.5 ? 1 : 0;
Рекуррентные сети используют другой формат:
const net = new brain.recurrent.LSTM();
net.train([
{ input: "hello", output: "hi" },
{ input: "how are you", output: "fine" }
]);
const response = net.run("hello");
Для LSTM важно, чтобы данные представляли логические или временные последовательности, иначе обучение не будет эффективным.
После обучения сеть можно сохранить для последующего использования:
const json = net.toJSON();
localStorage.setItem('myNetwork', JSON.stringify(json));
Для восстановления:
const saved = JSON.parse(localStorage.getItem('myNetwork'));
const net = new brain.NeuralNetwork();
net.fromJSON(saved);
Это позволяет обучать сеть один раз и использовать её в разных сессиях браузера без повторного обучения.
Если обработка данных в браузере требует высокой производительности,
можно использовать NeuralNetworkGPU:
const net = new brain.NeuralNetworkGPU();
net.train(trainingData, { iterations: 5000 });
WebGL позволяет ускорить матричные операции, особенно на больших выборках. Однако для малых сетей разница может быть незаметной.
Brain.js предоставляет возможность отслеживать прогресс обучения
через функцию log. Для более наглядного анализа можно
использовать графики:
const trainingErrors = [];
net.train(trainingData, {
iterations: 20000,
log: (err) => trainingErrors.push(err),
logPeriod: 100
});
// Затем строится график ошибок с помощью canvas или библиотек типа Chart.js
Это помогает определить момент переобучения и оценить динамику снижения ошибки.
trainAsync предотвращает блокировку
интерфейса и позволяет одновременно выполнять другие задачи.Brain.js предоставляет удобный способ обучения нейронных сетей прямо в браузере, сочетая простоту синтаксиса с гибкостью настройки. Его возможности охватывают как простую классификацию, так и работу с последовательными данными, позволяя создавать интерактивные и обучающиеся веб-приложения.