Класс Layer как контейнер нейронов

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


Создание слоя

Слой создается через конструктор:

const synaptic = require('synaptic');
const Layer = synaptic.Layer;

const layer = new Layer(5);

В примере создается слой с 5 нейронами. При создании все нейроны автоматически инициализируются с случайными весами, смещениями и функцией активации по умолчанию — сигмоидой.

Основные параметры конструктора Layer:

  • size — количество нейронов в слое.
  • options (необязательный) — объект с дополнительными настройками, такими как начальные веса, смещения или кастомная функция активации.

Добавление нейронов

Слой можно расширять после создания:

layer.add(new synaptic.Neuron());

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


Связи между слоями

Методы для соединения слоев:

  • layer.project(targetLayer) — устанавливает полное соединение между текущим слоем и targetLayer. Каждому нейрону текущего слоя соответствует связь с каждым нейроном целевого слоя.
  • layer.project(targetLayer, Connection) — позволяет использовать кастомный класс соединения.
  • layer.connect(targetLayer) — более низкоуровневый метод, возвращающий массив соединений.
const inputLayer = new Layer(3);
const hiddenLayer = new Layer(4);

inputLayer.project(hiddenLayer);

После вызова project все нейроны слоя inputLayer будут отправлять свои активации нейронам hiddenLayer.


Активация слоя

Активация слоя выполняется методом:

const output = layer.activate([1, 0, 1]);

Особенности метода activate:

  • Принимает массив чисел соответствующей длины слою.
  • Для скрытых и выходных слоев сигнал автоматически агрегируется через веса и смещения нейронов.
  • Возвращает массив активаций нейронов слоя.

Слои можно использовать многократно в последовательных вычислениях. Каждый слой поддерживает хранение текущего состояния активации, что необходимо для обратного распространения ошибки при обучении.


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

Метод propagate позволяет обновлять веса нейронов слоя на основе ошибки:

layer.propagate(0.3, [0.5, 0.1, 0.9]);
  • Первый параметр — скорость обучения.
  • Второй параметр — массив целевых значений (для выходного слоя) или ошибки, переданной от следующего слоя (для скрытого слоя).

Ключевые моменты работы propagate:

  • Веса нейронов корректируются с учетом производной функции активации.
  • Ошибка накапливается и передается предыдущему слою при наличии связи.
  • Layer абстрагирует сложные вычисления, предоставляя простой интерфейс обучения.

Встроенные функции слоя

Методы для управления и анализа слоя:

  • layer.clear() — сброс активаций всех нейронов к нулю.
  • layer.activate(inputs) — активация слоя входными сигналами.
  • layer.propagate(rate, target) — обучение слоя через обратное распространение ошибки.
  • layer.connectedTo(targetLayer) — проверка, соединен ли слой с другим слоем.
  • layer.neurons() — возвращает массив всех нейронов слоя.
  • layer.gate(targetLayer, type) — установка механизма гейта для соединений (INPUT, OUTPUT, SELF).

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


Примеры сложных соединений

С помощью Layer можно реализовать не только последовательные сети, но и сложные топологии:

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

inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
hiddenLayer.gate(inputLayer); // обратная связь

Особенности:

  • Возможна обратная связь через gate.
  • Любой слой можно соединять с любым другим, создавая рекуррентные сети.
  • Layer управляет всеми связями и активацией нейронов, упрощая работу с сетью.

Доступ к внутренним данным

Каждый слой хранит данные нейронов и соединений:

  • layer.list — список нейронов.
  • layer.connections.inputs — массив входящих соединений.
  • layer.connections.projected — массив исходящих соединений.

Это позволяет настраивать веса вручную, анализировать структуру сети и оптимизировать обучение.


Вывод

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