ConvNetJS — это чисто JavaScript-библиотека для построения нейронных сетей, включая как сверточные, так и полносвязные архитектуры. Она предоставляет гибкий интерфейс для настройки сети и проведения обучения прямо в браузере или в Node.js среде. В задаче регрессии целью сети является предсказание непрерывной величины, что накладывает определённые требования на архитектуру и функцию потерь.
Для регрессии наиболее часто используются полносвязные (fully connected) слои, так как сверточные слои чаще применяются для обработки изображений и извлечения пространственных признаков.
fc): каждый нейрон
соединён со всеми нейронами предыдущего слоя, что позволяет сети
комбинировать все признаки для предсказания непрерывного значения.linear)
обеспечивает возможность предсказывать любое значение на числовой
оси.Пример конфигурации слоя для выхода:
var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:num_features});
layer_defs.push({type:'fc', num_neurons:50, activation:'relu'});
layer_defs.push({type:'fc', num_neurons:1, activation:'linear'});
Здесь num_features — размер входного вектора признаков,
50 нейронов в скрытом слое обеспечивают способность сети моделировать
сложные зависимости, а один нейрон на выходе формирует прогнозируемое
число.
Для задач регрессии ключевым элементом является функция потерь. В ConvNetJS используется:
regression loss layer — минимизирует
среднеквадратичную ошибку (MSE):[ = _{i=1}^{N}(y_i - _i)^2]
Пример добавления слоя потерь:
layer_defs.push({type:'regression', num_neurons:1});
Важная особенность: слой потерь всегда располагается последним, и его
размер (num_neurons) должен совпадать с размерностью
выходных данных.
ConvNetJS предоставляет встроенные оптимизаторы для обучения сети:
learning_rate) и моменты (momentum).Пример конфигурации SGD:
var trainer = new convnetjs.SGDTrainer(net, {
learning_rate: 0.01,
momentum: 0.9,
batch_size: 10,
l2_decay: 0.001
});
learning_rate регулирует размер шага при обновлении
весов.momentum помогает ускорить сходимость, уменьшая
колебания.l2_decay предотвращает переобучение через регуляризацию
весов.Сеть регрессии в ConvNetJS работает с векторами
признаков, которые представлены объектом
convnetjs.Vol. Каждый вход должен быть одномерным
вектором:
var x = new convnetjs.Vol([feature1, feature2, feature3, ...]);
Если используется батч, то тренировочные примеры подаются по одному, а оптимизатор управляет градиентным накоплением.
После построения архитектуры и конфигурации тренера выполняется цикл обучения:
for(var i=0;i<train_data.length;i++){
var x = new convnetjs.Vol(train_data[i].features);
trainer.train(x, train_data[i].label);
}
train_data[i].features — массив признаков для
примера.train_data[i].label — скалярное значение, которое сеть
должна предсказать.Для контроля качества можно периодически вычислять MSE на
валидационном наборе, используя метод
net.forward(x).w[0].
[0,1] или стандартизация до нулевого среднего и
единичного стандартного отклонения, чтобы улучшить сходимость.После обучения сеть используется для предсказаний:
var x_test = new convnetjs.Vol(test_features);
var y_pred = net.forward(x_test).w[0];
y_pred — это прогнозируемое непрерывное значение. Если
требуется пакетное предсказание, достаточно обернуть цикл для всех
примеров.
Эта архитектура позволяет строить эффективные регрессионные модели в ConvNetJS, сохраняя простоту реализации и управляемость сети. Ключевые аспекты — правильное формирование входных данных, выбор линейного выхода, настройка функции потерь и оптимизатора.