Признаки недообучения на графике

Недообучение (underfitting) — состояние модели нейронной сети, при котором она не способна уловить закономерности в данных. Это проявляется низкой точностью как на тренировочном, так и на тестовом наборе данных. В контексте библиотеки Brain.js недообучение часто связано с недостаточной сложностью сети, малым количеством нейронов или слишком коротким временем обучения.

Визуальные признаки недообучения

На графике процесса обучения недообучение проявляется специфическим образом:

  • Высокая ошибка на тренировочных данных Если график функции ошибки (например, error в процессе net.train()) стабильно показывает высокие значения и не снижается по мере обучения, это сигнализирует о том, что сеть не способна подстроиться под структуру данных.

  • Плоская линия ошибки На графике может наблюдаться практически горизонтальная линия без заметного уменьшения ошибки. Это указывает на слишком простую модель или недостаточное количество эпох для обучения.

  • Схожие значения ошибки для тренировочных и тестовых данных При недообучении разница между тренировочной и проверочной ошибкой минимальна. На графике это выражается в почти совпадающих кривых ошибок для обеих выборок.

Причины недообучения

  1. Недостаточная сложность сети Мало слоев и нейронов не позволяют сети моделировать сложные зависимости. В Brain.js, например, при использовании NeuralNetwork с одним скрытым слоем из нескольких нейронов сложные функции могут аппроксимироваться плохо.

  2. Недостаточное обучение Малое количество эпох или ограничение по времени (iterations) не даёт сети освоить тренировочные данные. В графике это выражается в раннем «зависании» кривой ошибки на высоком уровне.

  3. Проблемы с данными Недостаток признаков или нерепрезентативная выборка данных приводит к тому, что сеть не может извлечь нужные закономерности. Ошибка на графике остается высокой, несмотря на обучение.

  4. Неподходящие гиперпараметры Слишком высокий learningRate может препятствовать сходимости, а слишком низкий замедляет уменьшение ошибки. На графике это проявляется как нестабильные колебания или медленное снижение ошибки.

Интерпретация графиков в Brain.js

В Brain.js функции net.train() возвращают объект с информацией о процессе обучения, включая error, iterations и time. Для анализа недообучения график ошибки строится следующим образом:

const brain = require('brain.js');
const net = new brain.NeuralNetwork();

const trainingData = [
  { input: [0, 0], output: [0] },
  { input: [0, 1], output: [1] },
  { input: [1, 0], output: [1] },
  { input: [1, 1], output: [0] }
];

const trainingResult = net.train(trainingData, {
  iterations: 2000,
  log: true,
  logPeriod: 100
});

console.log(trainingResult);

На основе логов и значения trainingResult.error можно построить график зависимости ошибки от итераций. Недообучение проявляется как медленное снижение ошибки или ее стабилизация на высоком уровне.

Методы борьбы с недообучением

  • Увеличение числа нейронов и слоев Добавление скрытых слоев (hiddenLayers) повышает способность сети моделировать сложные зависимости:
const net = new brain.NeuralNetwork({
  hiddenLayers: [5, 3] // два скрытых слоя
});
  • Увеличение числа итераций обучения Параметр iterations можно поднять до значения, при котором ошибка начинает стабильно снижаться.

  • Обогащение данных Расширение тренировочного набора или добавление новых признаков повышает качество обучения.

  • Регулировка скорости обучения Настройка learningRate позволяет избежать слишком медленного снижения ошибки или нестабильных колебаний.

Важные моменты анализа

  • Недообучение редко проявляется внезапно; чаще оно заметно в первых этапах обучения и сохраняется.
  • Основная цель графика — визуально оценить динамику снижения ошибки. Если линия ошибки плоская и высокая, это прямой сигнал недообучения.
  • Сравнение графиков тренировочной и проверочной ошибки помогает отличить недообучение от переобучения: при переобучении ошибка на тренировочных данных мала, а на тестовых — велика; при недообучении обе ошибки высоки.

Эффективный анализ графиков ошибки позволяет своевременно корректировать архитектуру сети, гиперпараметры и набор данных, предотвращая недообучение и повышая точность предсказаний.