Библиотека Synaptic предоставляет гибкий инструментарий для создания и обучения нейронных сетей в JavaScript. Одной из ключевых возможностей является работа с сетями, имеющими несколько входных и выходных нейронов. Такие сети позволяют моделировать сложные зависимости, где каждый вход может влиять на несколько выходов одновременно.
Сеть с несколькими входами и выходами состоит из трёх основных компонентов:
Входной слой (Input Layer) Содержит нейроны, которые принимают данные извне. Количество нейронов в этом слое соответствует числу входных переменных задачи.
Скрытые слои (Hidden Layers) Могут быть одним или несколькими. Скрытые слои обеспечивают возможность моделирования нелинейных зависимостей между входами и выходами. Каждый нейрон скрытого слоя соединён со всеми нейронами предыдущего слоя.
Выходной слой (Output Layer) Количество нейронов равно числу целевых переменных, которые сеть должна предсказывать. Каждый нейрон может интерпретироваться как отдельная функция отклика на входные данные.
const synaptic = require('synaptic');
const { Layer, Network } = synaptic;
// Создание слоев
const inputLayer = new Layer(3); // три входных нейрона
const hiddenLayer = new Layer(5); // пять нейронов в скрытом слое
const outputLayer = new Layer(2); // два выходных нейрона
// Связь слоев
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
// Создание сети
const myNetwork = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
Каждый нейрон входного слоя получает свои значения и передаёт их дальше через связи к скрытым нейронам. Synaptic автоматически управляет передачей сигналов и суммированием взвешенных входов.
Функции активации для скрытых и выходных нейронов могут быть выбраны индивидуально, хотя стандартная функция — sigmoid.
hiddenLayer.set({ squash: synaptic.Neuron.squash.TANH });
outputLayer.set({ squash: synaptic.Neuron.squash.LOGISTIC });
Выбор функции активации влияет на диапазон значений нейронов и на эффективность обучения. Для задач с несколькими выходами рекомендуется использовать функции, которые возвращают значения в диапазоне [0, 1] или [-1, 1], в зависимости от природы данных.
Для многовходовых многовыходных сетей необходимо формировать данные в виде массивов:
Пример:
const trainingSet = [
{ input: [0, 0, 1], output: [1, 0] },
{ input: [1, 0, 0], output: [0, 1] },
{ input: [1, 1, 1], output: [1, 1] },
];
Для обучения можно использовать backpropagation. В Synaptic процесс настраивается через Trainer. Важно учитывать, что количество выходных нейронов определяет размер целевого вектора, и каждый нейрон обучается отдельно на соответствующем элементе массива.
const trainer = new synaptic.Trainer(myNetwork);
trainer.train(trainingSet, {
rate: 0.1,
iterations: 20000,
error: 0.005,
shuffle: true,
log: 1000,
cost: synaptic.Trainer.cost.MSE
});
Ключевые моменты обучения многовыходной сети:
После обучения сеть способна принимать массив входов и возвращать массив выходов:
const output = myNetwork.activate([1, 0, 1]);
console.log(output); // [0.98, 0.02] — два значения для двух выходных нейронов
Можно реализовать проверку точности сети, сравнивая предсказанные и ожидаемые выходы с использованием MSE или другой метрики.
Сети с несколькими входами и выходами в Synaptic позволяют решать задачи прогнозирования сложных многомерных зависимостей, обеспечивая гибкость в архитектуре, настройке функций активации и обучении с различными стратегиями оптимизации. Такой подход эффективно применяется для классификации, регрессии и моделирования динамических систем с множественными параметрами.