Brain.js — это библиотека для JavaScript, предоставляющая инструменты для создания и обучения нейронных сетей. Основное её преимущество заключается в простоте использования при работе с задачами классификации, регрессии, прогнозирования временных рядов и распознавания паттернов. Библиотека реализует несколько типов сетей, включая Feedforward Neural Network, Recurrent Neural Network (RNN) и Long Short-Term Memory (LSTM).
Каждая из сетей в Brain.js строится на основе нейронов, соединённых весами, и использует функции активации для преобразования входных сигналов. Основной принцип обучения — корректировка весов с целью минимизации ошибки предсказаний по сравнению с известными результатами.
Для создания простой полносвязной нейронной сети используется класс
NeuralNetwork.
const brain = require('brain.js');
const net = new brain.NeuralNetwork({
hiddenLayers: [3], // Один скрытый слой с 3 нейронами
activation: 'sigmoid' // Функция активации: sigmoid, relu, tanh
});
Параметры:
hiddenLayers — массив, задающий количество нейронов в
каждом скрытом слое.activation — функция активации, влияющая на способность
сети обучаться нелинейным зависимостям.Обучение сети происходит на наборах данных в виде
объектов. Каждый объект содержит input и
output.
const trainingData = [
{ input: { r: 0.03, g: 0.7, b: 0.5 }, output: { light: 1 } },
{ input: { r: 0.9, g: 0.1, b: 0.2 }, output: { dark: 1 } }
];
input — нормализованные значения признаков (числа от 0
до 1).output — целевые значения, также обычно нормализованные
или бинарные.Метод train используется для подстройки весов сети на
основе тренировочного набора данных.
net.train(trainingData, {
iterations: 20000, // Количество проходов по данным
learningRate: 0.05, // Скорость обучения
errorThresh: 0.005 // Порог ошибки для остановки обучения
});
Пояснения параметров:
iterations — чем больше, тем точнее модель, но дольше
обучение.learningRate — регулирует шаг изменения весов. Слишком
большой шаг может вызвать расходимость, слишком маленький — медленное
обучение.errorThresh — сеть прекращает обучение, как только
ошибка опускается ниже этого значения.Цепное правило дифференцирования (backpropagation) лежит в основе обучения полносвязных сетей в Brain.js.
Формально, изменение веса w между нейронами вычисляется
по формуле:
[ w = -]
где:
Цепное правило позволяет эффективно вычислять производные для многослойных сетей, начиная с выхода и двигаясь назад через все слои. Для нейрона с функцией активации () градиент вычисляется так:
[ _j = ’(net_j) k w{jk} _k]
где (j) — ошибка нейрона, (w{jk}) — вес связи с последующим нейроном, (_k) — ошибка следующего слоя.
После обучения сеть готова к предсказаниям:
const output = net.run({ r: 0.1, g: 0.8, b: 0.3 });
console.log(output); // { light: 0.9, dark: 0.1 }
net.run(input) возвращает объект с вероятностями для
каждого выходного признака.Brain.js также поддерживает RNN и LSTM, которые эффективны для последовательных данных, таких как тексты или временные ряды.
const rnn = new brain.recurrent.LSTM();
rnn.train([
{ input: "Привет", output: "Здравствуйте" },
{ input: "Как дела?", output: "Хорошо" }
]);
Brain.js позволяет тонко настраивать сеть для улучшения качества:
sigmoid,
relu, tanh) для разных типов данных.hiddenLayers и числа нейронов в каждом слое
для балансировки сложности модели и времени обучения.momentum и decay для
стабилизации процесса обучения и предотвращения переобучения.net.train(trainingData, {
iterations: 10000,
learningRate: 0.01,
momentum: 0.9
});