Synaptic — это гибкая библиотека для создания
нейронных сетей на JavaScript. Основой её архитектуры являются нейроны
(Neuron), слои (Layer) и сети
(Network). Каждый элемент взаимодействует через
синапсы — объекты, описывающие связи между нейронами с
определённым весом. Важным элементом являются группы
соединений, которые позволяют организовать сложные структуры
сети.
Connection в Synaptic представляет собой связку между двумя слоями или нейронами. Она отвечает за передачу сигналов с учетом весов и смещений.
Соединение создаётся между источником (from) и
приёмником (to):
const connection = new synaptic.Connection(fromLayer, toLayer);
При создании соединения автоматически создаются синапсы между всеми нейронами исходного и целевого слоёв. Каждый синапс имеет свой вес, который можно инициализировать случайным образом или задать вручную.
Соединение можно активировать и контролировать вручную, что особенно полезно при построении рекуррентных сетей.
Gate — это механизм, позволяющий контролировать поток сигнала через соединение. Он действует как регулятор: сигнал от одного нейрона может быть усилен, ослаблен или полностью заблокирован в зависимости от состояния gate.
Synaptic поддерживает несколько типов gate:
Каждый gate связан с конкретным соединением и с нейроном-источником, который задаёт коэффициент модуляции сигнала.
const gate = new synaptic.Gate({
type: synaptic.Gate.INPUT,
connection: connection,
from: controllingNeuron
});
connection.gate(gate);
После привязки gate начинает автоматически модифицировать сигнал, проходящий через соединение. Механизм может использоваться для реализации сложных динамических моделей: attention, LSTM и рекуррентных сетей.
В сложных сетях несколько слоёв можно объединять через группы соединений, что позволяет организовывать многослойные взаимодействия.
const inputLayer = new synaptic.Layer(3);
const hiddenLayer = new synaptic.Layer(5);
const outputLayer = new synaptic.Layer(2);
const inputToHidden = inputLayer.project(hiddenLayer);
const hiddenToOutput = hiddenLayer.project(outputLayer);
Метод project() создаёт соединение между слоями и
автоматически формирует синапсы. При необходимости можно добавить
gate-связи для контроля передачи сигналов между
слоями:
const controllingNeuron = hiddenLayer.list[0];
hiddenToOutput.gate(synaptic.Gate.OUTPUT, controllingNeuron);
Такой подход позволяет гибко регулировать динамику сети, направляя сигнал только через необходимые нейроны или группы нейронов.
activate(input) — передаёт сигнал
через соединение с учётом весов и gate.propagate(rate) — корректирует веса
синапсов согласно алгоритму обратного распространения ошибки.clear() — обнуляет внутренние
состояния соединения, включая gate.Использование этих методов совместно с gate-связями создаёт полностью управляемую динамику сети, позволяя моделировать сложные нейронные паттерны и обучать сети с высокой точностью.