В контексте нейронных сетей регрессия подразумевает предсказание непрерывного числового значения, в отличие от классификации, где результатом является метка класса. ConvNetJS предоставляет гибкие инструменты для реализации регрессионных задач, включая настройку функции потерь и работу с данными.
Регрессионная задача формулируется как минимизация ошибки между предсказанным значением ( ) и истинным значением ( y ). Для этого используется Regression Loss (функция потерь для регрессии). В ConvNetJS реализованы различные варианты функции потерь, наиболее популярные:
L2 Loss (Mean Squared Error, MSE) Основная и наиболее часто применяемая функция потерь для регрессии. Вычисляется как среднее квадратичное отклонение предсказаний от целевых значений:
[ L = _{i=1}^{N} (_i - y_i)^2]
Где ( N ) — количество наблюдений. L2 Loss чувствительна к выбросам, так как квадратичное возведение ошибок увеличивает влияние больших отклонений.
L1 Loss (Mean Absolute Error, MAE) Альтернатива L2 Loss, менее чувствительная к выбросам:
[ L = _{i=1}^{N} |_i - y_i|]
ConvNetJS поддерживает настройку типа потерь через параметры слоя регрессии.
В ConvNetJS слой для регрессии создается с помощью конструктора
regression_layer, который принимает количество выходов и
тип функции потерь. Пример:
var layer_defs = [];
layer_defs.push({type:'input', out_sx:1, out_sy:1, out_depth:1});
layer_defs.push({type:'fc', num_neurons:10, activation:'relu'});
layer_defs.push({type:'regression', num_neurons:1});
var net = new convnetjs.Net();
net.makeLayers(layer_defs);
Ключевые моменты:
type:'regression' указывает, что слой
является регрессионным и будет использовать подходящую функцию
потерь.num_neurons задает размер выходного
вектора, например, для предсказания одного значения достаточно
num_neurons:1.ConvNetJS использует объект Trainer для обучения сети.
Для регрессии также можно выбрать параметры обучения:
var trainer = new convnetjs.SGDTrainer(net, {
learning_rate:0.01,
momentum:0.9,
batch_size:20,
l2_decay:0.001
});
learning_rate — скорость обучения,
определяет шаг градиентного спуска.momentum — помогает ускорить
сходимость и уменьшить колебания.batch_size — количество примеров,
используемых за одну итерацию.l2_decay — регуляризация,
предотвращающая переобучение.Данные должны быть представлены в виде объектов типа
Vol, даже если это скалярное значение:
var x = new convnetjs.Vol([input_value]);
var stats = trainer.train(x, [target_value]);
input_value — входное значение (может быть массивом
признаков).target_value — соответствующая цель, тоже массив, если
предсказывается несколько чисел.Важно: при регрессии размерность выхода сети должна совпадать с размерностью целевого вектора.
После обучения можно получить предсказание сети:
var predicted = net.forward(x);
console.log('Predicted:', predicted.w[0]);
predicted.w содержит массив предсказанных значений. Для
анализа ошибки можно вручную вычислить разность с истинными
значениями:
var error = predicted.w[0] - target_value[0];
Для более точной оценки используется среднеквадратичная ошибка по всей выборке.
ConvNetJS позволяет комбинировать регрессионный слой с другими слоями:
fc) для построения полносвязной
сети.relu, tanh, sigmoid
для нелинейных преобразований.Эта гибкость делает возможным создание как простых линейных регрессий, так и глубоких нейросетей для сложных регрессионных задач.