В библиотеке Brain.js нейронные сети основаны на идее передачи сигналов через слои с применением весов к входным данным. Взвешенная сумма — это фундаментальный элемент работы сети, определяющий, как входные данные преобразуются в сигнал для нейронов следующего слоя.
Для одного нейрона взвешенная сумма вычисляется по формуле:
[ S = _{i=1}^{n} (x_i w_i) + b]
где:
Эта сумма является аргументом для функции активации, которая определяет выход нейрона.
В Brain.js взвешенная сумма происходит автоматически при обучении и работе сети. Основные шаги можно разобрать на примере простейшей Feedforward нейронной сети:
const brain = require('brain.js');
const net = new brain.NeuralNetwork({
hiddenLayers: [3] // один скрытый слой с 3 нейронами
});
const trainingData = [
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] },
];
net.train(trainingData);
На этапе прямого распространения (forward propagation) для каждого нейрона происходит вычисление взвешенной суммы:
sigmoid).В Brain.js поддерживаются несколько функций активации:
sigmoid, relu, leaky-relu,
tanh. Функция активации преобразует взвешенную сумму в
выходной сигнал нейрона:
Sigmoid: [ f(S) = ]
ReLU (Rectified Linear Unit): [ f(S) = (0, S)]
Leaky ReLU: [ f(S) = (0.01S, S)]
Tanh: [ f(S) = (S)]
Выбор функции активации влияет на динамику обучения и способность сети к нелинейному моделированию данных.
Весовые коэффициенты нейронов в Brain.js инициализируются случайными значениями из диапазона около нуля. Во время обучения применяется алгоритм обратного распространения ошибки (backpropagation), который корректирует веса с целью минимизации ошибки сети.
Пример изменения структуры сети с явным указанием параметров:
const net = new brain.NeuralNetwork({
inputSize: 2,
hiddenLayers: [4, 3],
outputSize: 1,
learningRate: 0.01
});
Для понимания механизма можно вычислить взвешенную сумму для одного нейрона вручную:
const input = [0.5, 0.8];
const weights = [0.4, -0.6];
const bias = 0.1;
let sum = 0;
for (let i = 0; i < input.length; i++) {
sum += input[i] * weights[i];
}
sum += bias;
function sigmoid(x) {
return 1 / (1 + Math.exp(-x));
}
const output = sigmoid(sum);
console.log(output);
Здесь происходит точное следование формуле (S = x_i w_i + b) и дальнейшее применение функции активации. Такой подход полезен для обучения, отладки и визуализации работы нейронной сети.
В многослойных сетях каждая скрытая слоя вычисляет собственную взвешенную сумму для каждого нейрона, а результат передается следующему слою. Итоговая формула для слоя выглядит как:
[ S_j^{(l)} = {i=1}^{n} (y_i^{(l-1)} w{ij}^{(l)}) + b_j^{(l)}]
где (y_i^{(l-1)}) — выходы нейронов предыдущего слоя, (w_{ij}^{(l)}) — вес, соединяющий нейрон (i) предыдущего слоя с нейроном (j) текущего слоя, (b_j^{(l)}) — смещение текущего нейрона.
Смещение позволяет сдвинуть функцию активации, повышая гибкость сети. Без bias нейрон не сможет эффективно моделировать данные, где требуется выход не равный нулю при нулевых входах. В Brain.js bias применяется автоматически для всех нейронов.
Взвешенная сумма — ключевой показатель того, как сеть интерпретирует входные данные. От правильной инициализации весов и смещений зависит скорость обучения и способность сети к обобщению. Понимание механизма взвешенной суммы облегчает настройку сети и выбор подходящей архитектуры для решения задач классификации и регрессии.