В библиотеке Synaptic проекции (connections) между слоями нейронной сети играют ключевую роль в построении архитектуры. Проекция определяет, как каждый нейрон одного слоя соединяется с нейронами следующего слоя. В Synaptic предусмотрено несколько типов проекций: full, one-to-one и all-to-all. Они различаются правилами подключения нейронов и предназначением в архитектуре сети.
Проекция full создаёт полностью связанный слой, где каждый нейрон исходного слоя соединён со всеми нейронами целевого слоя. Это наиболее часто используемый тип проекции, особенно в классических полносвязных (dense) слоях.
Характеристики:
Пример создания:
const synaptic = require('synaptic');
const Layer = synaptic.Layer;
// Исходный и целевой слои
let inputLayer = new Layer(3);
let hiddenLayer = new Layer(4);
// Полная проекция
inputLayer.project(hiddenLayer, Layer.connectionType.ALL_TO_ALL);
В этом примере три нейрона входного слоя соединяются с четырьмя нейронами скрытого слоя. Каждое соединение имеет свой вес, который можно настраивать в процессе обучения.
Проекция one-to-one создаёт соединения один к одному между нейронами слоёв одинаковой размерности. Каждый нейрон исходного слоя соединяется только с соответствующим нейроном целевого слоя.
Характеристики:
Пример создания:
let layerA = new Layer(5);
let layerB = new Layer(5);
layerA.project(layerB, Layer.connectionType.ONE_TO_ONE);
В результате каждый нейрон layerA будет напрямую связан
с одним нейроном layerB. Веса соединений можно
инициализировать произвольно, но структура связи фиксирована.
Проекция all-to-all в Synaptic аналогична full, но имеет некоторые нюансы при работе с разными типами слоёв. Она создаёт соединения между всеми нейронами исходного и целевого слоя, включая возможные рекуррентные связи, если они разрешены.
Характеристики:
Пример создания:
let input = new Layer(3);
let output = new Layer(3);
input.project(output, Layer.connectionType.ALL_TO_ALL);
Отличие от full: в некоторых контекстах full используется для линейных слоёв, а all-to-all — для рекуррентных или сложных сетей, где может потребоваться динамическая обработка соединений.
Каждая проекция в Synaptic автоматически создаёт объекты соединений
(Connections) с весами. Возможна их ручная настройка:
inputLayer.project(hiddenLayer, Layer.connectionType.ALL_TO_ALL, {
weight: 0.5 // Инициализация всех соединений одинаковым весом
});
Проекции можно использовать совместно с различными функциями активации в слоях. Например:
hiddenLayer.set({
squash: synaptic.Neuron.squash.TANH
});
Все типы проекций сохраняют совместимость с методами обучения сети,
такими как Trainer.train, что позволяет гибко комбинировать
архитектуры.
| Тип проекции | Связи | Особенности | Применение |
|---|---|---|---|
| full | каждый нейрон с каждым | классическая полносвязная схема | скрытые слои MLP |
| one-to-one | нейрон с соответствующим | прямое соответствие входов и выходов | передачи значений без смешивания |
| all-to-all | каждый нейрон со всеми | учитывает возможные рекуррентные связи | сложные и рекуррентные сети |
Использование правильного типа проекции позволяет оптимизировать структуру сети, ускорить обучение и улучшить качество предсказаний.