Недообучение (underfitting) возникает, когда модель не способна уловить закономерности в данных и демонстрирует низкую точность как на обучающем, так и на валидационном наборах. В Keras.js, как и в стандартной Keras на Python, ключевым аспектом работы с недообучением является настройка архитектуры модели и методов оптимизации.
Низкая точность на обучающих данных Модель не способна хорошо предсказывать даже те данные, на которых обучалась. Это основной сигнал того, что архитектура слишком проста или параметры обучения не подходят.
Отсутствие прогресса при увеличении эпох Если после нескольких эпох обучения функция потерь практически не уменьшается, вероятно, модель не имеет достаточной способности к обобщению.
Высокая ошибка на валидации и тренировке одновременно В отличие от переобучения, где ошибка на тренировке мала, недообучение проявляется на обоих наборах данных.
Слишком простая архитектура Недостаточное количество слоев или нейронов ограничивает модель в способности захватывать сложные зависимости. Например, использование одного скрытого слоя для сложной задачи классификации изображений может быть недостаточно.
Неподходящие функции активации Использование линейной активации там, где требуется нелинейность (ReLU, sigmoid, tanh), ограничивает представительную способность сети.
Недостаточное время обучения Мало эпох или слишком высокий learning rate могут привести к тому, что модель не успеет достичь оптимального состояния.
Слабая подготовка данных Недостаток признаков, шум в данных или плохое масштабирование входных данных может мешать модели учиться.
График функции потерь Строится график loss для обучающей и валидационной выборок. При недообучении обе кривые остаются на высоком уровне и мало изменяются.
График метрик качества Для задач классификации полезно отслеживать accuracy. Недообучение проявляется в низкой точности на обучении.
Анализ обучаемости на меньших подвыборках Если модель не способна хорошо обучаться даже на небольших данных, это явный признак недостаточной мощности.
Увеличение сложности модели Добавление
дополнительных скрытых слоев или нейронов повышает способность модели
захватывать сложные зависимости. В Keras.js это реализуется через
Dense или Conv2D слои с большим количеством
единиц.
const model = new KerasJS.Model({
filepaths: {
model: 'model.json',
weights: 'model_weights.buf'
}
});Смена функции активации Нелинейные активации, такие как ReLU для скрытых слоев и softmax для выходного слоя в задачах классификации, повышают выразительность модели.
Увеличение количества эпох и уменьшение learning rate Более длительное обучение при умеренном шаге оптимизации позволяет сети лучше подстраиваться под данные без резких скачков весов.
Использование дополнительных признаков и улучшение качества данных Масштабирование, нормализация и аугментация данных помогают модели эффективнее извлекать закономерности.
Регуляризация при сохранении сложности модели Если увеличение слоев вызывает переобучение, полезно применять методы регуляризации (dropout, L2-регуляризация). В Keras.js поддерживается добавление таких слоев:
const dropoutLayer = new KerasJS.layers.Dropout({ rate: 0.5 });Изменение архитектуры под задачу Для изображений предпочтительны сверточные сети (CNN), для последовательностей — рекуррентные (RNN, LSTM). Применение неподходящей архитектуры часто является причиной недообучения.
Недообучение — это сигнал о том, что модель не способна полностью использовать данные. Адекватное решение требует систематического анализа архитектуры, параметров обучения и качества данных. Правильное сочетание этих факторов позволяет эффективно устранить недообучение и обеспечить стабильное улучшение производительности модели.