Layer в библиотеке Synaptic представляет собой основной строительный блок нейронной сети, действующий как контейнер для нейронов. Он отвечает за хранение нейронов, их связей, передачу сигналов и управление активацией. Каждый слой может содержать произвольное количество нейронов, взаимодействовать с другими слоями через соединения и выполнять функции как входного, скрытого или выходного слоя.
Слой создается через конструктор:
const synaptic = require('synaptic');
const Layer = synaptic.Layer;
const layer = new Layer(5);
В примере создается слой с 5 нейронами. При создании все нейроны автоматически инициализируются с случайными весами, смещениями и функцией активации по умолчанию — сигмоидой.
Основные параметры конструктора Layer:
Слой можно расширять после создания:
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.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.list — список нейронов.layer.connections.inputs — массив входящих
соединений.layer.connections.projected — массив исходящих
соединений.Это позволяет настраивать веса вручную, анализировать структуру сети и оптимизировать обучение.
Класс Layer является ключевым элементом Synaptic для организации нейронов в сети. Он инкапсулирует создание нейронов, управление активациями, обучение через обратное распространение и соединение с другими слоями. Layer обеспечивает удобный интерфейс для построения как простых многослойных перцептронов, так и сложных рекуррентных сетей, предоставляя полный контроль над структурой и процессом обучения.