В библиотеке Synaptic для JavaScript нейронная сеть строится из отдельных объектов нейронов и синапсов, которые соединяют эти нейроны. Каждый нейрон представляет собой независимый вычислительный блок с функцией активации, весами и порогом срабатывания. Синапс хранит весовое значение соединения, которое влияет на силу передачи сигнала от одного нейрона к другому.
В Synaptic нейроны и синапсы можно создавать и связывать вручную, что позволяет строить нетиповые архитектуры без использования стандартных слоев. Такой подход дает гибкость при исследовании механизмов работы нейронных сетей и при разработке нестандартных моделей.
Нейроны создаются через конструктор Neuron:
const { Neuron } = require('synaptic');
let inputNeuron = new Neuron();
let hiddenNeuron = new Neuron();
let outputNeuron = new Neuron();
Каждый нейрон имеет следующие ключевые свойства:
activate().Функцию активации можно менять через метод set:
inputNeuron.set({ squash: Neuron.squash.LOGISTIC });
Доступные варианты функции активации: LOGISTIC, TANH, IDENTITY, HENON и другие.
Связь между нейронами создается через метод project или
напрямую через объект connections. На практике чаще
используется project:
inputNeuron.project(hiddenNeuron, 0.5); // соединение с весом 0.5
hiddenNeuron.project(outputNeuron, 1.0); // соединение с весом 1.0
Параметры:
Метод project возвращает объект синапса, что позволяет
далее изменять его свойства вручную:
let synapse = inputNeuron.project(hiddenNeuron);
synapse.weight = 0.75;
После соединения нейронов передача данных происходит через метод
activate:
inputNeuron.activate(1); // подается сигнал 1
hiddenNeuron.activate(); // рассчитывает активацию на основе входов
outputNeuron.activate(); // получает финальный результат
Формула активации нейрона в Synaptic:
[ y = squash(_i (input_i weight_i) + bias)]
Где:
Для настройки сети без обучения можно изменять веса напрямую. Это полезно при моделировании определенных паттернов:
inputNeuron.connections.projected[hiddenNeuron.ID].weight = 0.9;
В Synaptic каждое соединение хранится в виде объекта:
Synaptic позволяет создавать рециркуляционные сети, где нейроны соединяются друг с другом в цикле:
hiddenNeuron.project(hiddenNeuron, 0.4); // самоподключение
hiddenNeuron.project(inputNeuron, 0.2); // обратная связь к входу
При использовании таких схем важно контролировать порядок активации,
чтобы избежать непредсказуемого поведения сети. Рекомендуется вызывать
activate() последовательно, начиная с нейронов без входных
связей.
Смещение позволяет нейрону активироваться при слабых или отрицательных входных сигналах:
hiddenNeuron.bias = -0.3;
outputNeuron.bias = 0.5;
Изменение bias напрямую влияет на итоговую активацию и
позволяет тонко подстраивать поведение сети при ручной настройке.
Neuron).squash) и смещения
(bias).project с указанием
начального веса.activate.Такой подход позволяет строить нетиповые архитектуры, экспериментировать с весами и функциями активации, а также использовать Synaptic для исследования внутренних процессов нейронных сетей без стандартных ограничений слоев и обучающих алгоритмов.