Вес соединения, ID и служебные поля

Библиотека Synaptic предоставляет гибкий и низкоуровневый доступ к построению нейронных сетей в JavaScript. Ключевыми элементами архитектуры сети являются нейроны и соединения, которые формируют топологию сети. Важнейшими характеристиками этих объектов являются веса соединений, уникальные идентификаторы (ID) и ряд служебных полей, обеспечивающих корректное функционирование сети.


Вес соединения

Вес соединения (weight) определяет силу влияния сигнала, передаваемого от одного нейрона к другому. В Synaptic соединения между нейронами создаются автоматически при добавлении связей через метод project или вручную при создании объектов Connection.

Ключевые особенности веса:

  • Представлен числом с плавающей запятой, обычно в диапазоне [-1, 1].
  • На этапе обучения веса изменяются с помощью алгоритмов, таких как обратное распространение ошибки (Trainer.train) или эволюционные методы.
  • Вес нулевого значения означает отсутствие влияния сигнала, а отрицательное значение реализует инверсию входного сигнала.

Пример доступа и изменения веса:

const synaptic = require('synaptic');
const { Layer, Network } = synaptic;

const inputLayer = new Layer(2);
const outputLayer = new Layer(1);

inputLayer.project(outputLayer);

// Получение веса первого соединения
const connection = inputLayer.connections.projected[0];
console.log(connection.weight);

// Изменение веса
connection.weight = 0.5;

Особое внимание уделяется тому, что веса являются динамическими величинами, которые напрямую влияют на выход сети. При сохранении и восстановлении сети через toJSON/fromJSON веса сохраняются и восстанавливаются точно.


Уникальный идентификатор (ID)

Каждый нейрон и каждое соединение имеют уникальный идентификатор ID. В Synaptic идентификаторы используются для:

  • Отслеживания связей между нейронами.
  • Быстрого доступа к объектам сети в сложных топологиях.
  • Управления служебными операциями, такими как клонирование сети или сериализация.

ID присваиваются автоматически при создании объекта и представляют собой числовые значения или строки, гарантируя уникальность в пределах сети.

Пример:

const neuron = new Layer.Neuron();
console.log(neuron.ID); // Например, 'neuron_1'

const connection = new Layer.Connection(neuron, anotherNeuron);
console.log(connection.ID); // Например, 'connection_1'

Использование ID важно при работе с кастомными алгоритмами обучения или при необходимости точного контроля структуры сети.


Служебные поля нейронов и соединений

Synaptic содержит ряд внутренних полей, не предназначенных для прямого изменения, но критичных для работы сети. К ним относятся:

  • activation – текущее значение активации нейрона. Изменяется после вызова метода activate.
  • bias – смещение нейрона, добавляемое к сумме входных сигналов перед активацией.
  • squash – функция активации, используемая нейроном (Layer.squash.TANH, LOGISTIC, IDENTITY и др.).
  • projected / connections – массивы исходящих и входящих соединений нейрона.
  • connected – информация о связях нейрона с другими слоями.
  • error – величина ошибки, используемая в обучении методом обратного распространения.

Служебные поля соединений включают:

  • from / to – ссылки на исходный и целевой нейрон.
  • gain – множитель влияния сигнала (обычно 1, но может изменяться в кастомных реализациях).
  • weight – текущий вес соединения.
  • enabled – булево значение, указывающее, активно ли соединение в вычислениях.

Пример работы со служебными полями:

const connection = inputLayer.connections.projected[0];

console.log(connection.from.ID); // ID нейрона источника
console.log(connection.to.ID);   // ID нейрона назначения
console.log(connection.weight);  // Вес соединения
console.log(connection.gain);    // Коэффициент усиления

Эти поля позволяют реализовывать продвинутые техники обучения и адаптации сети, включая динамическое включение/отключение связей или настройку функций активации для отдельных нейронов.


Практические рекомендации

  • Сохранять ID нейронов и соединений при сериализации сети для корректного восстановления сложных топологий.
  • Использовать веса как основной инструмент обучения, избегая прямого вмешательства в activation и error без необходимости.
  • Осторожно работать с служебными полями, так как неправильное изменение может нарушить согласованность сети.
  • При построении кастомных сетей обращать внимание на gain и enabled для реализации нейронов с переменной связностью.

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