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 не предоставляет встроенных функций для всех метрик регрессии, поэтому их вычисление выполняется вручную после получения предсказаний:
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;
RegNet на ConvNetJS используется для:
Сочетание простоты интерфейса, интерактивной работы в браузере и возможности гибкой настройки слоёв делает ConvNetJS удобным инструментом для изучения и практического применения регрессии в нейронных сетях.