Недообучение (underfitting) — состояние модели нейронной сети, при котором она не способна уловить закономерности в данных. Это проявляется низкой точностью как на тренировочном, так и на тестовом наборе данных. В контексте библиотеки Brain.js недообучение часто связано с недостаточной сложностью сети, малым количеством нейронов или слишком коротким временем обучения.
На графике процесса обучения недообучение проявляется специфическим образом:
Высокая ошибка на тренировочных данных Если
график функции ошибки (например, error в процессе
net.train()) стабильно показывает высокие значения и не
снижается по мере обучения, это сигнализирует о том, что сеть не
способна подстроиться под структуру данных.
Плоская линия ошибки На графике может наблюдаться практически горизонтальная линия без заметного уменьшения ошибки. Это указывает на слишком простую модель или недостаточное количество эпох для обучения.
Схожие значения ошибки для тренировочных и тестовых данных При недообучении разница между тренировочной и проверочной ошибкой минимальна. На графике это выражается в почти совпадающих кривых ошибок для обеих выборок.
Недостаточная сложность сети Мало слоев и
нейронов не позволяют сети моделировать сложные зависимости. В Brain.js,
например, при использовании NeuralNetwork с одним скрытым
слоем из нескольких нейронов сложные функции могут аппроксимироваться
плохо.
Недостаточное обучение Малое количество эпох или
ограничение по времени (iterations) не даёт сети освоить
тренировочные данные. В графике это выражается в раннем «зависании»
кривой ошибки на высоком уровне.
Проблемы с данными Недостаток признаков или нерепрезентативная выборка данных приводит к тому, что сеть не может извлечь нужные закономерности. Ошибка на графике остается высокой, несмотря на обучение.
Неподходящие гиперпараметры Слишком высокий
learningRate может препятствовать сходимости, а слишком
низкий замедляет уменьшение ошибки. На графике это проявляется как
нестабильные колебания или медленное снижение ошибки.
В 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 позволяет избежать слишком медленного снижения
ошибки или нестабильных колебаний.
Эффективный анализ графиков ошибки позволяет своевременно корректировать архитектуру сети, гиперпараметры и набор данных, предотвращая недообучение и повышая точность предсказаний.