Synaptic — это библиотека для построения нейронных
сетей на JavaScript, предоставляющая гибкий интерфейс для создания,
обучения и тестирования сетей. В основе работы библиотека использует
объектно-ориентированную модель нейронной сети, включающую слои, нейроны
и связи между ними. Основные классы включают Neuron,
Layer, Network и Trainer.
Каждый нейрон представлен объектом Neuron. Нейрон
содержит следующие ключевые элементы:
incoming), которые
определяют влияние каждого входа на активацию нейрона.activation), который
вычисляется через функцию активации.squash),
поддерживающие сигмоиду, тангенс или ReLU.propagate), использующее градиентный спуск для
корректировки весов.Пример создания нейрона:
const { Neuron } = require('synaptic');
let neuron = new Neuron();
Слой (Layer) представляет собой группу нейронов и
инкапсулирует обработку сигналов между ними. Основные методы слоя:
project(targetLayer): создает связи к другому
слою.activate(inputs): вычисляет активацию всех нейронов
слоя по входным данным.propagate(learningRate, targetValues): корректирует
веса всех нейронов слоя на основе ошибки.const { Layer } = require('synaptic');
let inputLayer = new Layer(3); // 3 нейрона
let hiddenLayer = new Layer(4); // 4 нейрона
inputLayer.project(hiddenLayer);
Объединяет слои в единую сеть. Позволяет запускать обучение и прогнозирование:
const { Network } = require('synaptic');
let myNetwork = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
let output = myNetwork.activate([0.1, 0.5, 0.9]);
Скалярное произведение (dot product) лежит в основе вычисления активации нейронов. Для нейрона с входами (x_1, x_2, …, x_n) и весами (w_1, w_2, …, w_n) активация до применения функции активации вычисляется как:
[ z = x_1 w_1 + x_2 w_2 + + x_n w_n]
В коде Synaptic это реализуется через метод activate
слоя или нейрона. Пример ручного вычисления:
let inputs = [1, 0.5, -0.5];
let weights = [0.4, -0.6, 0.8];
let z = inputs.reduce((sum, val, idx) => sum + val * weights[idx], 0);
Ключевое свойство скалярного произведения — линейность, которая обеспечивает корректное распространение сигналов в сети.
Слои нейронной сети обрабатывают векторные данные через матричное умножение. Для слоя с (m) входами и (n) нейронами веса формируют матрицу размером (n m), а входной вектор размером (m ). Выходной вектор слоя вычисляется как:
[ = W ]
где (W) — матрица весов, () — входной вектор. В Synaptic этот процесс
скрыт внутри метода activate слоя, но его можно
симулировать вручную:
function matrixMultiply(weights, inputs) {
return weights.map(row =>
row.reduce((sum, w, idx) => sum + w * inputs[idx], 0)
);
}
let weights = [
[0.2, -0.4, 0.5],
[-0.3, 0.8, -0.1],
[0.6, -0.2, 0.1]
];
let inputs = [1, 0.5, -0.5];
let output = matrixMultiply(weights, inputs);
Матричное умножение слоя на входной вектор — это набор скалярных произведений для каждого нейрона слоя. Если слой имеет (n) нейронов, каждый нейрон вычисляет своё скалярное произведение, формируя итоговый выходной вектор. Это обеспечивает параллельную обработку сигналов и ускоряет вычисления.
Использование Synaptic позволяет абстрагировать эти математические операции, но понимание их внутренней работы критически важно для отладки и оптимизации нейронных сетей на JavaScript.