Для работы с Synaptic достаточно подключить библиотеку через npm или использовать CDN. В среде Node.js установка выполняется командой:
npm install synaptic
После установки библиотеку можно импортировать:
const synaptic = require('synaptic');
Для браузера доступен вариант через тег
<script>:
<script src="https://cdnjs.cloudflare.com/ajax/libs/synaptic/1.1.4/synaptic.js"></script>
После подключения становится доступен основной функционал: создание нейронов, слоёв, сетей, обучение с учителем и без.
Нейрон (Neuron) Нейрон — базовый
строительный блок сети. Его можно настраивать вручную, изменяя веса и
пороги.
let neuron = new synaptic.Neuron();
Методы нейрона:
activate(input) — активация нейрона с входным
сигналом.project(targetNeuron) — соединение с другим
нейроном.propagate(rate, target) — корректировка весов на основе
ошибки.Слой (Layer) Слой объединяет несколько
нейронов в блок, который может быть входным, скрытым или выходным.
let inputLayer = new synaptic.Layer(3);
let hiddenLayer = new synaptic.Layer(4);
let outputLayer = new synaptic.Layer(2);
Методы слоя:
activate(inputs) — активация всех нейронов слоя.project(targetLayer) — соединение слоя с другим
слоем.set({bias, squash}) — настройка смещения и функции
активации.Сеть (Network) Сеть объединяет слои и
управляет их взаимодействием.
let myNetwork = new synaptic.Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
Сеть можно активировать и обучать:
activate(inputArray) — вычисляет выход сети.propagate(rate, targetArray) — обновляет веса на основе
ошибки.Балансировка шеста — классическая задача управления с обратной связью, где цель сети — удерживать шест вертикально на движущейся платформе. Входные параметры:
Выход: сила, прикладываемая к платформе (влево или вправо).
Создание слоев:
let inputLayer = new synaptic.Layer(4); // 4 входа
let hiddenLayer = new synaptic.Layer(8); // 8 нейронов в скрытом слое
let outputLayer = new synaptic.Layer(1); // 1 выход
Соединение слоев:
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
Сеть можно обернуть в объект Network для удобного
управления:
let network = new synaptic.Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
Для задачи с подкреплением обучение происходит без учителя, путем корректировки весов на основе ошибки текущего состояния.
let output = network.activate([angle, angularVelocity, position, velocity]);
let error = desiredAngle - actualAngle;
network.propagate(learningRate, [error]);
Особенности:
Пример цикла симуляции:
function step(state) {
// state: [угол, скорость угла, позиция, скорость]
let force = network.activate(state)[0];
// применение силы к платформе
applyForce(force);
// получение нового состояния после применения силы
let newState = getState();
let error = 0 - newState[0]; // минимизация угла
network.propagate(0.05, [error]);
}
Ключевой момент — постоянная обратная связь: каждое новое состояние корректирует веса, что имитирует обучение с подкреплением.
Neuron.squash можно установить на
synaptic.Neuron.squash.TANH для выхода в диапазоне [-1,
1].bias): важно для
компенсации начальных отклонений шеста.learningRate):
рекомендуется начинать с небольшого значения (0.01–0.05) и постепенно
уменьшать.Входной слой (4 нейрона)
│
▼
Скрытый слой (8 нейронов)
│
▼
Выходной слой (1 нейрон)
Соединение полностью связное: каждый нейрон предыдущего слоя связан со всеми нейронами следующего. Вес каждой связи корректируется на каждом шаге симуляции, обеспечивая адаптацию сети к условиям балансировки шеста.