Вычисление взвешенной суммы

В библиотеке Brain.js нейронные сети основаны на идее передачи сигналов через слои с применением весов к входным данным. Взвешенная сумма — это фундаментальный элемент работы сети, определяющий, как входные данные преобразуются в сигнал для нейронов следующего слоя.

Математическая формула

Для одного нейрона взвешенная сумма вычисляется по формуле:

[ S = _{i=1}^{n} (x_i w_i) + b]

где:

  • (x_i) — входные значения нейрона,
  • (w_i) — веса, соответствующие каждому входу,
    1. — смещение (bias),
    1. — результат взвешенной суммы.

Эта сумма является аргументом для функции активации, которая определяет выход нейрона.

Реализация в Brain.js

В 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) для каждого нейрона происходит вычисление взвешенной суммы:

  1. Каждый вход умножается на соответствующий вес.
  2. Результаты суммируются.
  3. К сумме добавляется смещение нейрона.
  4. Итог передается в функцию активации (по умолчанию 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
});
  • inputSize и outputSize определяют размер входного и выходного вектора.
  • hiddenLayers — массив, указывающий количество нейронов в каждом скрытом слое.
  • learningRate контролирует скорость изменения весов на каждом шаге обучения.

Прямой расчет взвешенной суммы вручную

Для понимания механизма можно вычислить взвешенную сумму для одного нейрона вручную:

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)

Смещение позволяет сдвинуть функцию активации, повышая гибкость сети. Без bias нейрон не сможет эффективно моделировать данные, где требуется выход не равный нулю при нулевых входах. В Brain.js bias применяется автоматически для всех нейронов.

Практическое значение

Взвешенная сумма — ключевой показатель того, как сеть интерпретирует входные данные. От правильной инициализации весов и смещений зависит скорость обучения и способность сети к обобщению. Понимание механизма взвешенной суммы облегчает настройку сети и выбор подходящей архитектуры для решения задач классификации и регрессии.