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