В задаче регрессии цель сети заключается в предсказании непрерывного
значения на основе входных данных. Для оценки качества предсказаний
используется функция потерь, которая количественно
измеряет расхождение между предсказанными значениями и истинными. В
ConvNetJS функции потерь реализованы через объекты
RegressionLayer и соответствующие методы, обеспечивающие
вычисление градиентов для обратного распространения ошибки.
Наиболее распространённой функцией потерь для регрессии является среднеквадратичная ошибка. Она определяется формулой:
[ L = _{i=1}^{N} (y_i - _i)^2]
где (y_i) — истинное значение, (_i) — предсказанное сетью значение, (N) — количество объектов в батче.
Особенности использования в ConvNetJS:
RegressionLayer автоматически вычисляет MSE при вызове
метода forward.[ = 2(_i - y_i)]
Пример создания слоя регрессии в ConvNetJS:
var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:1});
layer_defs.push({type:'fc', num_neurons:20, activation:'relu'});
layer_defs.push({type:'regression', num_neurons:1});
var net = new convnetjs.Net();
net.makeLayers(layer_defs);
В данном примере выходной слой regression предсказывает
одно непрерывное значение для каждого входного объекта.
Менее чувствительным к выбросам является средняя абсолютная ошибка:
[ L = _{i=1}^{N} |y_i - _i|]
[ = (_i - y_i)]
RegressionLayer и переопределяющий метод
backward.function MAELayer() {
this.num_inputs = 1;
this.out_depth = 1;
}
MAELayer.prototype.forward = function(V, is_training) {
this.out_act = V;
return this.out_act;
}
MAELayer.prototype.backward = function(y) {
this.in_act.dw = this.in_act.w.map((v,i) => (v - y[i]) >= 0 ? 1 : -1);
}
ConvNetJS поддерживает несколько оптимизаторов: SGD, AdaGrad, RMSProp, Adam. Для регрессии важна корректная настройка learning rate, так как ошибка предсказаний напрямую влияет на величину градиента.
Пример настройки тренировки сети на регрессию:
var trainer = new convnetjs.SGDTrainer(net, {
learning_rate: 0.01,
momentum: 0.9,
batch_size: 10,
l2_decay: 0.001
});
learning_rate контролирует скорость обучения. Для MSE
обычно выбирают маленькие значения (0.001–0.01).momentum помогает сгладить колебания градиентов и
ускорить сходимость.l2_decay предотвращает переобучение.После обучения сети регрессии важно проверять её точность на тестовом наборе данных:
var loss = 0;
for(var i=0;i<test_data.length;i++){
var x = test_data[i].input;
var y = test_data[i].output;
var pred = net.forward(x);
loss += Math.pow(pred.w[0] - y[0], 2);
}
loss /= test_data.length;
console.log('MSE на тесте: ' + loss);
Этот подход позволяет оценить реальную ошибку сети и выявить необходимость регулировки гиперпараметров или архитектуры.
l2_decay) и ранней остановки при наблюдении за ошибкой на
валидации.ConvNetJS предоставляет компактный и удобный инструментарий для реализации регрессионных моделей, сочетая простоту в настройке слоев с полной поддержкой обратного распространения ошибки. Это позволяет строить как простые однослойные регрессоры, так и сложные многослойные сети для прогнозирования непрерывных величин.