NeuralNetwork — это основной класс библиотеки Brain.js, предназначенный для создания и обучения искусственных нейронных сетей на JavaScript. Он реализует многослойные перцептроны (MLP) с возможностью настройки структуры сети, параметров обучения и функции активации.
Создание новой сети выполняется через конструктор:
const brain = require('brain.js');
const net = new brain.NeuralNetwork(options);
Параметры options:
inputSize — количество входных нейронов. Если не
указано, размер входа определяется автоматически при первой подаче
данных.hiddenLayers — массив, задающий количество и размер
скрытых слоев. Например, [10, 20] создаст два скрытых слоя
с 10 и 20 нейронами.outputSize — количество выходных нейронов. Определяется
автоматически при подаче данных, если не указано.learningRate — скорость обучения. Значение по умолчанию
0.3.activation — функция активации, поддерживаемые
значения: 'sigmoid', 'relu',
'leaky-relu', 'tanh'.const net = new brain.NeuralNetwork({
hiddenLayers: [16, 16],
activation: 'relu',
learningRate: 0.1
});
Сеть состоит из последовательных слоев:
Каждый нейрон скрытого слоя соединён со всеми нейронами предыдущего и следующего слоя, что обеспечивает полносвязную архитектуру.
train(data, options) — основной метод обучения сети.
Параметры data:
{ input: [...], output: [...] }.input — числовой массив входных признаков.output — числовой массив выходов (для классификации
обычно используются one-hot кодировки).Параметры options:
iterations — максимальное число итераций обучения (по
умолчанию 20000).errorThresh — порог ошибки, при достижении которого
обучение прекращается (по умолчанию 0.005).log — логирование прогресса обучения. Может быть
булевым значением или функцией.logPeriod — частота логирования, количество итераций
между выводом прогресса.learningRate — скорость обучения для этой сессии
(переопределяет глобальный параметр).Пример обучения:
net.train([
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
], {
iterations: 5000,
errorThresh: 0.005,
log: true,
logPeriod: 100
});
Метод run(input) используется для получения результата сети:
const output = net.run([1, 0]); // Возвращает массив значений на выходе
В случае бинарной классификации результат — число от 0 до 1, которое можно интерпретировать как вероятность класса.
Сеть можно сериализовать и восстановить:
const json = net.toJSON(); // Сохранение структуры и весов
const restoredNet = new brain.NeuralNetwork();
restoredNet.fromJSON(json); // Восстановление
Это позволяет обучать сеть один раз и использовать её в других проектах или на сервере.
Функции активации определяют нелинейность нейронов:
'sigmoid' — классическая S-образная функция, возвращает
значения от 0 до 1. Подходит для бинарной классификации.'relu' — возвращает 0 для отрицательных значений и само
значение для положительных. Ускоряет обучение глубоких сетей.'leaky-relu' — модификация ReLU, позволяет
отрицательным значениям проходить с малым коэффициентом.'tanh' — возвращает значения от -1 до 1, улучшает
сходимость для данных с отрицательными значениями.[0, 1] или [-1, 1].Brain.js может ускорять обучение с помощью GPU через пакет brain.js GPU. Для этого достаточно изменить класс при создании:
const net = new brain.NeuralNetworkGPU({
hiddenLayers: [20, 20],
activation: 'relu'
});
Это особенно эффективно при больших объемах данных и сложных сетевых архитектурах.
const net = new brain.NeuralNetwork({
hiddenLayers: [32, 16, 8],
activation: 'tanh',
learningRate: 0.05
});
const trainingData = [
{ input: [0, 0, 0], output: [0] },
{ input: [0, 1, 1], output: [1] },
{ input: [1, 0, 1], output: [1] },
{ input: [1, 1, 0], output: [0] }
];
net.train(trainingData, {
iterations: 10000,
errorThresh: 0.001,
log: true,
logPeriod: 500
});
const result = net.run([1, 0, 0]); // [0.982] — вероятность класса
Эта конфигурация демонстрирует гибкость NeuralNetwork для работы с многомерными входными данными и сложными логическими зависимостями.