Метрики качества регрессии

ConvNetJS — это чисто JavaScript-библиотека для создания, обучения и тестирования нейронных сетей, включая сверточные, полносвязные и регрессионные модели. Она работает полностью на клиентской стороне в браузере и не требует серверной части, что делает её удобной для интерактивного обучения и экспериментов с небольшими наборами данных.

Структура сети

В ConvNetJS нейронная сеть строится из слоёв (layers), которые определяются при создании объекта Net. Каждый слой имеет свой тип, параметры и функцию активации. Основные типы слоёв:

  • input: входной слой, задаёт размер входного вектора.
  • fc (fully connected): полносвязный слой, каждый нейрон связан с каждым нейроном предыдущего слоя.
  • relu, sigmoid, tanh: активационные слои, применяющие нелинейную функцию к каждому нейрону.
  • softmax: слой нормализации вероятностей для задач классификации.
  • regression: слой регрессии, определяющий, что сеть решает задачу предсказания числового значения.

Каждый слой инициализируется с указанием размерности входа и выхода, а также дополнительных параметров, таких как коэффициенты регуляризации и метод инициализации весов.

Настройка регрессионной модели

Регрессионная задача в ConvNetJS решается с помощью слоя regression. Для его настройки требуется указать:

  • num_neurons: количество нейронов на выходе, соответствующее размерности целевого вектора.
  • Функция потерь, например mse (Mean Squared Error).

Пример создания регрессионной сети:

var net = new convnetjs.Net();
net.makeLayers([
  {type: 'input', out_sx: 1, out_sy: 1, out_depth: 1},
  {type: 'fc', num_neurons: 20, activation: 'relu'},
  {type: 'fc', num_neurons: 10, activation: 'relu'},
  {type: 'regression', num_neurons: 1}
]);

Инициализация и обучение

Для обучения сети создаётся объект Trainer, в котором указываются параметры оптимизации:

  • method: метод градиентного спуска (sgd, adam, adadelta).
  • learning_rate: скорость обучения.
  • l2_decay: коэффициент L2-регуляризации для предотвращения переобучения.
  • batch_size: размер мини-батча.
var trainer = new convnetjs.SGDTrainer(net, {
  method: 'adam',
  learning_rate: 0.01,
  l2_decay: 0.001,
  batch_size: 10
});

Обучение происходит итеративно, с подачей входных векторов и соответствующих целевых значений:

trainer.train(input_vector, target_value);

Метрики качества регрессии

Качество регрессионной модели оценивается численными показателями, измеряющими расхождение предсказанных и фактических значений. Основные метрики:

1. Среднеквадратичная ошибка (MSE, Mean Squared Error) Вычисляется как среднее арифметическое квадратов ошибок:

[ = _{i=1}^{n} (_i - y_i)^2]

Где (_i) — предсказанное значение, (y_i) — фактическое. MSE чувствительна к выбросам, увеличивая их вклад в общую ошибку.

2. Корень из среднеквадратичной ошибки (RMSE, Root Mean Squared Error) Корень квадратный из MSE, позволяющий интерпретировать ошибку в тех же единицах, что и предсказываемая величина:

[ = ]

3. Средняя абсолютная ошибка (MAE, Mean Absolute Error) Среднее арифметическое модулей ошибок:

[ = _{i=1}^{n} |_i - y_i|]

MAE менее чувствительна к выбросам по сравнению с MSE.

4. Коэффициент детерминации (R²) Показывает долю объяснённой дисперсии:

[ R^2 = 1 - ]

Где ({y}) — среднее значение целевой переменной. Значение R² ближе к 1 указывает на хорошее качество модели.

Вычисление метрик в ConvNetJS

ConvNetJS не предоставляет встроенных функций для всех метрик регрессии, поэтому их вычисление выполняется вручную после получения предсказаний:

var predictions = [];
var targets = [];
for (var i = 0; i < data.length; i++) {
  var x = data[i].input;
  var y = data[i].target;
  var pred = net.forward(x);
  predictions.push(pred.w[0]);
  targets.push(y);
}

// MSE
var mse = 0;
for (var i = 0; i < predictions.length; i++) {
  var diff = predictions[i] - targets[i];
  mse += diff * diff;
}
mse /= predictions.length;

// MAE
var mae = 0;
for (var i = 0; i < predictions.length; i++) {
  mae += Math.abs(predictions[i] - targets[i]);
}
mae /= predictions.length;

Тонкости обучения регрессионных сетей

  • Нормализация данных: входные и целевые значения должны быть масштабированы для стабильного обучения.
  • Выбор функции потерь: MSE хорошо подходит для задач без сильных выбросов, MAE — для устойчивости к аномалиям.
  • Регуляризация: L2-декей помогает избежать переобучения при малом объёме данных.
  • Мини-батчи: использование небольших батчей ускоряет сходимость, но увеличивает шум градиента.

Применение

RegNet на ConvNetJS используется для:

  • прогнозирования числовых значений (цены, температуры, спроса);
  • аппроксимации функций;
  • моделирования динамических систем с непрерывным выходом.

Сочетание простоты интерфейса, интерактивной работы в браузере и возможности гибкой настройки слоёв делает ConvNetJS удобным инструментом для изучения и практического применения регрессии в нейронных сетях.