Создание собственной архитектуры через Architect

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

Структура сети через Architect

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

const { Layer, Network } = require('synaptic');

let inputLayer = new Layer(3);
let hiddenLayer = new Layer(5);
let outputLayer = new Layer(2);

inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);

let myNetwork = new Network({
    input: inputLayer,
    hidden: [hiddenLayer],
    output: outputLayer
});

В этом примере создаётся сеть с одним входным слоем из 3 нейронов, скрытым слоем из 5 нейронов и выходным слоем из 2 нейронов. Метод project устанавливает полное соединение между слоями, что обеспечивает передачу сигналов от одного слоя к другому.

Использование Architect для нестандартных конфигураций

Architect предоставляет возможность создавать гибкие сети через функции-конструкторы:

  • Perceptron(input, hidden, output) — классический многослойный перцептрон.
  • LSTM(input, hidden, output) — сеть с памятью длительного краткосрочного хранения.
  • Hopfield(size) — ассоциативная память.
  • Liquid(input, hidden, output) — сложные динамические сети для моделирования временных зависимостей.

Для собственной архитектуры можно комбинировать слои разных типов. Например, создание сети с LSTM-слоем и последующим перцептроном:

const { Layer, Network, Architect } = require('synaptic');

let inputLayer = new Layer(4);
let lstmLayer = new Architect.LSTM(4, 6, 3); // LSTM слой с 4 входами, 6 скрытыми нейронами и 3 выходами
let outputLayer = new Layer(2);

inputLayer.project(lstmLayer);
lstmLayer.project(outputLayer);

let customNetwork = new Network({
    input: inputLayer,
    hidden: [lstmLayer],
    output: outputLayer
});

Настройка параметров нейронов

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

hiddenLayer.list.forEach(neuron => neuron.squash = 'tanh');

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

Композиция сложных сетей

Architect позволяет строить сети из нескольких параллельных слоев, объединяя их через объединяющий слой (merge). Это особенно полезно при работе с мультимодальными входными данными или при создании сетей с ветвящейся архитектурой:

let inputA = new Layer(3);
let inputB = new Layer(2);
let hiddenA = new Layer(4);
let hiddenB = new Layer(3);
let merged = new Layer(5);
let output = new Layer(2);

inputA.project(hiddenA);
inputB.project(hiddenB);
hiddenA.project(merged);
hiddenB.project(merged);
merged.project(output);

let multiInputNetwork = new Network({
    input: [inputA, inputB],
    hidden: [hiddenA, hiddenB, merged],
    output: output
});

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

Тонкая настройка обучения

После создания архитектуры можно задавать параметры обучения через методы train или использовать внешние алгоритмы оптимизации. Synaptic поддерживает:

  • learningRate — скорость обучения;
  • momentum — моментум для сглаживания градиента;
  • iterations — количество итераций обучения;
  • error — порог ошибки, при котором обучение завершится.

Пример настройки обучения для созданной сети:

customNetwork.trainer.train(trainingSet, {
    rate: 0.05,
    iterations: 20000,
    error: 0.005,
    shuffle: true,
    log: 1000
});

Использование этих параметров позволяет точно контролировать процесс обучения и адаптировать сеть под сложные задачи с разными типами данных.

Взаимодействие слоёв и нейронов

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

hiddenLayer.project(hiddenLayer); // рекуррентное соединение

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


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