Brain.js — это JavaScript-библиотека для создания и обучения нейронных сетей. Основной принцип работы любой нейронной сети заключается в последовательной передаче данных через слои сети, где каждый слой выполняет вычисления и преобразования, приближая входной сигнал к желаемому результату.
Нейронная сеть в Brain.js создается с помощью класса
NeuralNetwork или его расширений, таких как
NeuralNetworkGPU. Каждый объект сети хранит следующие
ключевые элементы:
Пример инициализации сети с указанием скрытых слоев:
const brain = require('brain.js');
const net = new brain.NeuralNetwork({
hiddenLayers: [10, 20] // два скрытых слоя: первый 10 нейронов, второй 20
});
Прямое распространение — это этап, когда входные данные проходят через всю сеть и вычисляется выходной сигнал.
Передача данных на входной слой Входной массив
или объект с признаками передается через метод
net.run(input). Каждый нейрон входного слоя получает
соответствующее значение входного признака.
Вычисление активации скрытых слоев Каждый нейрон скрытого слоя вычисляет взвешенную сумму входов и применяет функцию активации. В Brain.js по умолчанию используется сигмоида:
[ y = ]
где ( x = _{i} w_i x_i + b ), ( w_i ) — вес связи, ( x_i ) — входной сигнал, ( b ) — смещение (bias).
Передача активации на следующий слой Результат работы каждого нейрона скрытого слоя передается на нейроны следующего слоя. Это повторяется для всех скрытых слоев.
Формирование выходного сигнала На выходном слое также вычисляется взвешенная сумма и функция активации. Для многоклассовых задач часто используется softmax, которая преобразует значения в вероятности.
Пример прямого распространения:
const output = net.run({ red: 0.5, green: 0.2, blue: 0.9 });
console.log(output);
Каждый нейрон хранит собственный набор весов для связей с нейронами предыдущего слоя и смещение. Вес определяет, насколько сильно входное значение влияет на активацию. Смещение позволяет сдвинуть функцию активации, обеспечивая более гибкое обучение.
В Brain.js доступ к внутренним весам возможен через свойство
net.toJSON(), что полезно для анализа или сохранения
модели:
const json = net.toJSON();
console.log(json.layers);
sigmoid, relu,
leaky-relu), что влияет на скорость обучения и способность
сети моделировать сложные зависимости.const net = new brain.NeuralNetwork({
hiddenLayers: [4, 3],
activation: 'relu'
});
net.train([
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
]);
const result = net.run([1, 0]);
console.log(result); // результат после прохождения через все слои
В этом примере данные [1, 0] проходят через первый
скрытый слой из 4 нейронов, затем через второй скрытый слой из 3
нейронов, и на выходе формируется результат сети.
Передача данных через сеть в Brain.js представляет собой цепочку последовательных вычислений: вход → взвешенные суммы → функция активации → следующий слой → выход. Каждый слой постепенно преобразует исходный сигнал, формируя сложное нелинейное отображение входных данных в нужный результат, что и делает нейронные сети мощным инструментом для решения задач классификации, регрессии и прогнозирования.