Графики loss и accuracy

ConvNetJS предоставляет удобные инструменты для визуализации процесса обучения нейронной сети через динамические графики loss и accuracy. Эти графики являются критическим инструментом для анализа качества обучения, диагностики переобучения и настройки гиперпараметров модели.


Основы понятий

Loss (функция потерь) — метрика, измеряющая расхождение предсказаний сети с реальными значениями. Для классификации чаще всего используется softmax с кросс-энтропией, для регрессии — среднеквадратичная ошибка. Значение loss стремится к минимальному по мере обучения.

Accuracy (точность) — доля правильных предсказаний относительно общего числа примеров. В многоклассовой классификации accuracy определяется как отношение правильно предсказанных классов к общему числу объектов.


Создание графиков в ConvNetJS

ConvNetJS имеет встроенный объект Graph и метод graph.serve(), который позволяет визуализировать данные через веб-браузер. Для построения графиков необходимо:

  1. Создать объект графика:
var stats = new convnetjs.Stats();
  1. Обновлять график после каждой итерации обучения:
var trainer = new convnetjs.SGDTrainer(net, {learning_rate:0.01, momentum:0.9, batch_size:20, l2_decay:0.001});

for(var i=0;i<1000;i++) {
    var x = new convnetjs.Vol([/* данные */]);
    var y = /* правильный класс */;
    trainer.train(x, y);
    stats.push({loss: trainer.cost_loss, accuracy: trainer.accuracy});
}
  1. Визуализировать данные:
stats.display();

Ключевой момент — объект Stats автоматически хранит историю значений loss и accuracy, что позволяет строить графики без необходимости ручного накопления данных.


Настройка графиков

Объект Graph поддерживает несколько серий данных и позволяет задавать для каждой цвет, имя и тип линии. Например, для отображения тренировочной и тестовой потерь можно использовать:

var graph = new convnetjs.Graph();

graph.addLine('train_loss', 'red');
graph.addLine('test_loss', 'blue');

graph.update({train_loss: trainer.cost_loss, test_loss: test_cost_loss});

Особенности обновления графика:

  • Частота обновления влияет на плавность линии: слишком редкое обновление затрудняет визуальный анализ, слишком частое — замедляет работу интерфейса.
  • Значения нужно нормализовать или масштабировать, если они сильно отличаются по диапазону.

Отслеживание переобучения

Графики loss и accuracy позволяют выявлять признаки переобучения:

  • Loss на тренировочной выборке падает, а loss на валидационной перестает уменьшаться или начинает расти.
  • Accuracy на тренировке высока, а на валидации стабильно ниже.

В таких случаях полезно применять методы регуляризации:

  • Dropout:
var layer = {type:'fc', num_neurons:100, activation:'relu', dropout:0.5};
  • L2-регуляризация через параметр l2_decay в SGDTrainer.
  • Раннюю остановку (early stopping), анализируя графики loss на валидации.

Совместное отображение loss и accuracy

Для удобства можно строить два графика на одном полотне или использовать разные оси Y. Например:

var stats = new convnetjs.Stats();

stats.push({loss: trainer.cost_loss, accuracy: trainer.accuracy});
stats.display();
  • Красная линия — loss, синяя — accuracy.
  • Совмещение графиков позволяет видеть корреляцию между уменьшением функции потерь и ростом точности.

Практические рекомендации

  1. Малые партии данных (batch_size) приводят к более шумным графикам, что важно учитывать при оценке прогресса обучения.
  2. Скользящее среднее помогает сгладить линии:
function movingAverage(arr, window_size){
    var result = [];
    for(var i=0;i<arr.length;i++){
        var start = Math.max(0, i-window_size+1);
        var sum = 0;
        for(var j=start;j<=i;j++) sum += arr[j];
        result.push(sum/(i-start+1));
    }
    return result;
}
  1. Сравнение разных гиперпараметров можно вести через отдельные графики на одном холсте для наглядного анализа влияния learning rate, momentum и batch size на loss и accuracy.

Графики loss и accuracy в ConvNetJS являются ключевым инструментом для мониторинга обучения, диагностики проблем с моделью и выбора оптимальных гиперпараметров. Их использование позволяет визуализировать динамику процесса обучения в реальном времени и принимать обоснованные решения о корректировке архитектуры сети или стратегии тренировки.