Класс Network как основная единица работы

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


Создание экземпляра Network

Экземпляр Network можно создать двумя способами:

  1. Из заранее определённых слоёв

    const { Layer, Network } = require('synaptic');
    
    const inputLayer = new Layer(3);
    const hiddenLayer = new Layer(4);
    const outputLayer = new Layer(2);
    
    inputLayer.project(hiddenLayer);
    hiddenLayer.project(outputLayer);
    
    const myNetwork = new Network({
        input: inputLayer,
        hidden: [hiddenLayer],
        output: outputLayer
    });

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

  2. С использованием встроенных сетей Synaptic предоставляет готовые архитектуры, например, Perceptron или LSTM, которые уже реализованы как наследники Network.

    const { Architect } = require('synaptic');
    
    const perceptron = new Architect.Perceptron(3, 4, 2);

    Внутри Architect.Perceptron автоматически создаются слои и связи между ними, что упрощает создание стандартной прямой сети.


Структура объекта Network

Объект Network включает следующие ключевые компоненты:

  • input — входной слой сети (Layer)
  • hidden — массив скрытых слоёв (Layer[])
  • output — выходной слой (Layer)
  • layers — полный список всех слоёв сети, включая входной, скрытые и выходной
  • connections — список всех связей между нейронами

Каждый слой содержит нейроны (Neuron), которые имеют следующие важные свойства:

  • bias — смещение нейрона
  • activation — текущее значение активации
  • trace — вспомогательные данные для обучения (например, в LSTM)

Методы класса Network взаимодействуют напрямую с этими слоями и нейронами, обеспечивая гибкость и контроль над процессом обучения и предсказания.


Прямое распространение сигнала

Метод activate используется для прямого распространения входного сигнала через сеть:

const input = [0.5, 0.3, 0.9];
const output = myNetwork.activate(input);
console.log(output);
  • Аргумент input должен соответствовать размеру входного слоя.
  • Метод возвращает массив значений активации выходного слоя.
  • Внутри activate выполняется последовательное вычисление активации нейронов по формуле:

[ a_j = f(i w{ij} a_i + b_j)]

где (a_i) — активация входных нейронов, (w_{ij}) — вес связи, (b_j) — смещение, (f) — функция активации.


Обратное распространение ошибки

Для обучения сети используется метод propagate:

const target = [0, 1];
myNetwork.propagate(0.1, target);
  • Первый аргумент — learningRate, скорость обучения.
  • Второй аргумент — target, массив целевых значений для выходного слоя.
  • Метод вычисляет градиент ошибки и обновляет веса нейронов согласно алгоритму backpropagation:

[ w_{ij} = _j a_i]

(_j) — локальная ошибка нейрона, () — скорость обучения.

Важно, что Network не привязан к конкретной функции ошибки — можно реализовать собственную функцию потерь при необходимости, модифицируя propagate или создавая свои методы обучения.


Экспорт и импорт сети

Сетевые веса и структура могут быть сохранены и восстановлены через JSON:

const exported = myNetwork.toJSON();
const restoredNetwork = Network.fromJSON(exported);
  • toJSON возвращает полное описание сети, включая слои, нейроны, веса и смещения.
  • fromJSON позволяет восстановить идентичную сеть, что удобно для сохранения модели между сессиями или передачи между клиентом и сервером.

Использование Network в сложных задачах

Класс Network подходит для любых типов сетей:

  • Прямые сети (Feedforward) — базовый случай для классификации и регрессии.
  • Рекуррентные сети (RNN, LSTM) — для работы с последовательностями.
  • Произвольные графовые структуры — Network можно строить с любыми слоями и связями, включая ветвления и обратные связи.

Методы activate, propagate, а также экспорт/импорт JSON создают универсальный инструмент для прототипирования, обучения и интеграции нейронных сетей в JavaScript-проекты.


Оптимизация и контроль

Network предоставляет возможности для:

  • Обнуления активаций через метод clear, что полезно при работе с RNN.
  • Настройки веса и смещений вручную через прямой доступ к нейронам.
  • Слежения за активациями и ошибками для анализа обучения.

Такой контроль позволяет настраивать поведение сети под специфические задачи, не ограничиваясь стандартными методами.


Класс Network в Synaptic является полноценной моделью нейронной сети, объединяющей архитектуру, вычислительные алгоритмы и методы управления состоянием сети. Это делает его центральным инструментом для любых проектов с нейросетями на JavaScript.