Автоэнкодер — это тип нейронной сети, предназначенный для сжатия и восстановления данных. Основная цель автоэнкодера — научиться кодировать входные данные в компактное представление (латентное пространство) и затем восстанавливать их с минимальной потерей информации. Библиотека Synaptic предоставляет гибкие инструменты для создания подобных сетей в JavaScript.
Автоэнкодер состоит из двух основных частей:
Энкодер (Encoder) Преобразует входной вектор (X) в компактное представление (Z). Пример: входной слой с 10 нейронами → скрытый слой с 4 нейронами (латентное пространство).
Декодер (Decoder) Восстанавливает исходные данные из представления (Z). Пример: скрытый слой с 4 нейронами → выходной слой с 10 нейронами, совпадающий по размеру с входом.
Ключевая идея: автоэнкодер обучается минимизировать ошибку восстановления, обычно с помощью функции потерь, например, среднеквадратичной ошибки (MSE).
Synaptic позволяет создавать нейронные сети произвольной
архитектуры через классы Layer и
Network. Для автоэнкодера обычно используется
многослойный перцептрон (MLP) с симметричной
структурой.
const synaptic = require('synaptic');
const { Layer, Network, Trainer } = synaptic;
// Создание слоев
const inputLayer = new Layer(10);
const hiddenLayer = new Layer(4);
const outputLayer = new Layer(10);
// Соединение слоев
inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);
// Создание сети
const autoencoder = new Network({
input: inputLayer,
hidden: [hiddenLayer],
output: outputLayer
});
Примечание: архитектура должна быть симметричной, чтобы декодер мог корректно восстановить входные данные.
Для обучения автоэнкодера Synaptic предоставляет класс
Trainer, который поддерживает метод обратного
распространения ошибки. Важно использовать одинаковый
размер входа и выхода, так как сеть обучается воспроизводить
входные данные.
const trainer = new Trainer(autoencoder);
const trainingSet = [
{ input: [0,1,0,1,1,0,1,0,0,1], output: [0,1,0,1,1,0,1,0,0,1] },
{ input: [1,0,1,0,0,1,0,1,1,0], output: [1,0,1,0,0,1,0,1,1,0] },
// добавляются дополнительные примеры
];
trainer.train(trainingSet, {
rate: 0.1, // скорость обучения
iterations: 20000, // количество итераций
error: 0.005, // порог ошибки
shuffle: true, // перемешивание данных
log: 1000 // логирование каждые 1000 итераций
});
Ключевые моменты:
После обучения автоэнкодера можно использовать скрытый слой для
сжатия данных. В Synaptic скрытые слои доступны через
их метод activate.
// Сжатие данных
const inputVector = [1,0,1,0,1,0,1,0,1,0];
const latentVector = hiddenLayer.activate(inputVector);
// Восстановление данных
const reconstructed = outputLayer.activate(latentVector);
console.log('Сжатое представление:', latentVector);
console.log('Восстановленные данные:', reconstructed);
Особенности применения:
Использование Synaptic делает создание и обучение автоэнкодеров в JavaScript прямолинейным и гибким, позволяя экспериментировать с различными архитектурами, функциями активации и гиперпараметрами без необходимости интеграции сложных фреймворков.