ConvNetJS — это чисто JavaScript библиотека для построения и обучения нейронных сетей, включая сверточные и полносвязные архитектуры. Она позволяет создавать модели как для классификации, так и для регрессии, то есть для предсказания непрерывных значений. Основное отличие задач регрессии от классификации заключается в том, что выходной слой сети в первом случае содержит один или несколько нейронов с линейной активацией, а функция потерь измеряет ошибку между предсказанным и реальным числовым значением.
Для регрессионных задач в ConvNetJS используются fully connected (dense) слои с линейной активацией на выходе. Конфигурация сети может выглядеть следующим образом:
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:20, activation:'relu'});
layer_defs.push({type:'fc', num_neurons:10, activation:'relu'});
layer_defs.push({type:'regression', num_neurons:1}); // Выходной слой для регрессии
Ключевой момент: последний слой имеет тип
regression, а количество нейронов соответствует
числу предсказываемых непрерывных величин.
Данные должны быть представлены в виде массивов числовых векторов
(Vol объекты в ConvNetJS). Каждый объект включает признаки
(x) и целевое значение (y):
var x = new convnetjs.Vol([feature1, feature2, feature3]);
var y = [target_value];
trainer.train(x, y);
Для задач с несколькими целевыми величинами y может быть
массивом длины, равной числу выходных нейронов.
Для регрессии обычно используется mean squared error (MSE) или mean absolute error (MAE). В ConvNetJS это задается типом тренера:
var trainer = new convnetjs.SGDTrainer(net, {
learning_rate: 0.01,
momentum: 0.9,
batch_size: 10,
l2_decay: 0.001,
method: 'sgd',
loss: 'mse'
});
Параметры тренера:
learning_rate — скорость обучения, регулирует величину
шагов градиентного спуска.momentum — ускоряет сходимость и уменьшает
колебания.batch_size — размер пакета данных для обновления
весов.l2_decay — коэффициент регуляризации для предотвращения
переобучения.loss — тип функции потерь (mse для
регрессии).Обучение проходит итеративно через все объекты данных:
for(var i=0;i
Примечания по обучению:
После обучения сети предсказание осуществляется с помощью метода
forward:
var x = new convnetjs.Vol(test_features[i]);
var predicted = net.forward(x).w[0]; // Получение числового предсказания
Для многомерной регрессии w будет массивом значений:
var predicted_array = net.forward(x).w;
ConvNetJS предоставляет инструменты для отслеживания прогресса обучения через графики потерь. Можно сохранять потери каждой итерации в массив и строить график MSE по эпохам, что позволяет контролировать сходимость и корректировать гиперпараметры.
adagrad, adam) может повысить эффективность
обучения на сложных функциях.var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:3});
layer_defs.push({type:'fc', num_neurons:64, activation:'relu'});
layer_defs.push({type:'fc', num_neurons:32, activation:'relu'});
layer_defs.push({type:'regression', num_neurons:1});
var net = new convnetjs.Net();
net.makeLayers(layer_defs);
var trainer = new convnetjs.SGDTrainer(net, {learning_rate:0.01, momentum:0.9, batch_size:10, l2_decay:0.001, loss:'mse'});
// Обучение
for(var i=0;i
В этом примере сеть способна предсказывать непрерывное значение на основе трёх входных признаков, используя два скрытых слоя с ReLU активацией и линейный выход.