Synaptic — это библиотека для работы с искусственными нейронными сетями в JavaScript, которая предоставляет гибкие инструменты для создания, обучения и тестирования различных моделей. Она поддерживает как простые многослойные перцептроны, так и более сложные архитектуры вроде рекуррентных сетей. Важной особенностью является модульная структура, где ключевыми компонентами выступают Network, Layer, Neuron, а также Trainer, предназначенный для обучения сетей.
Класс Trainer в Synaptic служит для автоматизации процесса обучения сети. Он предоставляет набор встроенных тестов, которые можно использовать для проверки корректности работы модели на стандартных задачах. Trainer позволяет использовать разные стратегии обучения, включая stochastic gradient descent (SGD), мини-батчи и адаптивные скорости обучения.
trainingSet задаёт входные и выходные данные,
а options — параметры обучения (число эпох, скорость
обучения, функция ошибки, обратное распространение).train, полезна для больших наборов данных.Задача XOR является классическим примером обучения многослойного перцептрона. Сеть получает два бинарных входа и должна вычислить их исключающее ИЛИ.
[0,0], [0,1], [1,0], [1,1][0], [1], [1], [0]Для успешного обучения сети необходимо использовать хотя бы один
скрытый слой, так как XOR не является линейно разделимой функцией.
Trainer позволяет задавать количество эпох, скорость обучения и функцию
ошибки, например Trainer.MSE.
Тест AND представляет собой простую линейную задачу, где сеть должна реализовать логическую операцию “И”.
[0,0], [0,1], [1,0], [1,1][0], [0], [0], [1]Эта задача хорошо подходит для проверки базового обучения нейронной сети без скрытых слоёв, поскольку функция линейна.
Задача discrete sequence recall предназначена для обучения сети запоминанию последовательностей дискретных сигналов. Сеть получает последовательность на входе и должна воспроизвести её на выходе через несколько тактов времени.
Задача appending проверяет способность сети к обучению операций над последовательностями, таких как добавление нового элемента в конец последовательности.
Тест corxor представляет собой усовершенствованную задачу XOR, где на вход подаются коррелированные бинарные данные, и сеть должна вычислять сложное нелинейное сочетание этих входов.
TimingTask используется для обучения сети реагированию на события с определённой задержкой.
При работе с Trainer важно корректно выбирать следующие параметры:
const synaptic = require('synaptic');
const { Layer, Network, Trainer } = synaptic;
const inputLayer = new Layer(2);
const hiddenLayer = new Layer(3);
const outputLayer = new Layer(1);
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
const myNetwork = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
const trainer = new Trainer(myNetwork);
const trainingSet = [
{ input: [0,0], output: [0] },
{ input: [0,1], output: [1] },
{ input: [1,0], output: [1] },
{ input: [1,1], output: [0] }
];
trainer.train(trainingSet, {
rate: 0.1,
iterations: 20000,
error: 0.005,
shuffle: true,
log: 1000
});
В этом примере создаётся простая сеть для решения задачи XOR с одним скрытым слоем. Trainer позволяет отслеживать динамику обучения каждые 1000 итераций и завершить процесс, когда ошибка достигает заданного порога.
Встроенные тесты в Synaptic обеспечивают мощный инструмент для практического обучения нейронных сетей, от простых логических функций до сложных последовательностей и временных задач. Они позволяют не только проверить базовые возможности сети, но и освоить эффективные стратегии обучения в различных архитектурах.