Автоэнкодеры — это особый класс нейронных сетей, предназначенных для обучения компактных представлений данных. Их основная задача заключается в том, чтобы сеть научилась сжимать входную информацию в латентное пространство и затем восстанавливать её с минимальной потерей. В ConvNetJS это реализуется через последовательность слоёв, которые можно настраивать для конкретных задач: уменьшение размерности, фильтрация шума или извлечение признаков.
Автоэнкодер состоит из двух ключевых компонентов:
Энкодер Энкодер преобразует входной вектор (x) в скрытое представление (h), сокращая его размерность. Формально: [ h = f(Wx + b)] где (W) — матрица весов, (b) — вектор смещений, (f) — нелинейная активация (например, ReLU или Sigmoid).
Декодер Декодер восстанавливает исходный вход из скрытого представления: [ = g(W’h + b’)] Здесь (W’) и (b’) — веса и смещения декодера, а (g) обычно выбирается такой же, как и функция активации энкодера. Цель декодера — минимизировать разницу между () и (x).
ConvNetJS предоставляет гибкий инструмент для построения автоэнкодеров. Основные шаги:
Layer или Vol, при этом для автоэнкодера важны
полносвязные (fc) слои. Например:var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:784});
layer_defs.push({type:'fc', num_neurons:64, activation:'relu'});
layer_defs.push({type:'fc', num_neurons:784, activation:'sigmoid'});
Здесь первый fc слой выполняет функцию энкодера, а
второй — декодера.
var net = new convnetjs.Net();
net.makeLayers(layer_defs);
[ L = _{i=1}^{N} (x_i - _i)^2]
В ConvNetJS это реализуется через RegressionLayer.
layer_defs.push({type:'regression', num_neurons:784});
Trainer:var trainer = new convnetjs.SGDTrainer(net, {learning_rate:0.01, momentum:0.9, batch_size:10});
Далее данные передаются в сеть:
trainer.train(x_input, x_input); // вход = целевое значение
Важно, что вход и целевое значение совпадают, так как задача автоэнкодера — восстановление входа.
x_input перед подачей в сеть,
а целевое значение остаётся чистым.Автоэнкодеры в ConvNetJS широко используются для:
С помощью ConvNetJS автоэнкодеры можно строить полностью в браузере, что позволяет экспериментировать с архитектурой, функциями активации и алгоритмами оптимизации без серверной части, сохраняя интерактивность и наглядность процесса обучения.
Если требуется, могу подготовить подробный пример глубокого автоэнкодера на MNIST с визуализацией скрытых представлений, прямо на ConvNetJS. Это будет логическое продолжение статьи.