Типы проекций: full, one-to-one, all-to-all

В библиотеке Synaptic проекции (connections) между слоями нейронной сети играют ключевую роль в построении архитектуры. Проекция определяет, как каждый нейрон одного слоя соединяется с нейронами следующего слоя. В Synaptic предусмотрено несколько типов проекций: full, one-to-one и all-to-all. Они различаются правилами подключения нейронов и предназначением в архитектуре сети.


Проекция full

Проекция full создаёт полностью связанный слой, где каждый нейрон исходного слоя соединён со всеми нейронами целевого слоя. Это наиболее часто используемый тип проекции, особенно в классических полносвязных (dense) слоях.

Характеристики:

  • Каждое соединение имеет собственный вес.
  • Позволяет максимально использовать все входные данные для каждого нейрона следующего слоя.
  • Часто используется при построении скрытых слоёв многослойных перцептронов (MLP).

Пример создания:

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

Проекция 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

Проекция 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 каждый нейрон со всеми учитывает возможные рекуррентные связи сложные и рекуррентные сети

Использование правильного типа проекции позволяет оптимизировать структуру сети, ускорить обучение и улучшить качество предсказаний.