Недообучение (англ. underfitting) — это состояние модели машинного обучения, при котором она не способна уловить закономерности в обучающих данных. Такая модель показывает высокую ошибку и на обучающей, и на тестовой выборке, то есть плохо справляется с задачей в принципе. Противоположное явление — переобучение, когда модель запоминает данные слишком хорошо, но теряет способность обобщать.
С технической точки зрения недообучение соответствует высокому смещению (high bias) и низкой дисперсии (low variance). Модель делает систематически неверные предположения о структуре данных, и эти ошибки воспроизводятся независимо от того, на каком наборе данных её проверяют.
Как это работает
При обучении модель ищет функцию, которая наилучшим образом связывает входные признаки с целевой переменной. Если модель слишком простая — например, линейная зависимость применяется к данным с явно нелинейной структурой, — она физически не может описать существующие закономерности. Это и есть недообучение.
Диагностировать недообучение можно по кривым обучения: обе кривые (для обучающей и валидационной выборки) выходят на плато с высоким уровнем ошибки и не снижаются при добавлении новых данных. Это ключевой признак того, что проблема не в объёме данных, а в самой модели.
В рамках компромисса «смещение–дисперсия» недообучение находится на одном конце спектра: увеличение сложности модели снижает смещение, но повышает дисперсию. Задача — найти точку баланса, где обе ошибки минимальны.
Зачем это нужно
Недообучение — одна из двух главных проблем в машинном обучении наряду с переобучением. Если его не распознать вовремя, команда может неделями добавлять данные и настраивать гиперпараметры, не понимая, что модель изначально неспособна решить задачу. Понимание недообучения позволяет сэкономить ресурсы и сразу выбрать правильный класс моделей.
Этот термин критически важен для специалистов по данным, ML-инженеров и аналитиков, которые оценивают качество моделей. В контексте нейросетей недообучение особенно опасно, потому что современные архитектуры легко масштабируются, и соблазн «добавить слоёв» без анализа природы ошибки может привести к переобучению вместо решения проблемы.
Примеры
- Линейная регрессия на нелинейных данных. Компания пытается предсказать спрос на товар по цене, используя линейную модель. Но спрос зависит от цены нелинейно: при снижении цены спрос сначала растёт медленно, потом резко, потом снова замедляется. Прямая линия не может описать этот паттерн — модель недообучена.
- Мелкая нейросеть для распознавания изображений. Свёрточная сеть с одним свёрточным слоем пытается классифицировать фотографии пород собак. Из-за недостаточной глубины она не может выделить сложные иерархические признаки (ушки, морда, шерсть). Точность остаётся на уровне случайного угадывания.
- Избыточная регуляризация. Разработчик добавил L2-регуляризацию с слишком большим коэффициентом, чтобы бороться с переобучением. В результате веса модели стали почти нулевыми, и она потеряла способность улавливать даже простые зависимости.
- Слишком короткое обучение. Нейросеть обучали всего 2 эпохи при низком learning rate. Оптимизатор не успел сдвинуть веса из начального состояния, и модель осталась практически «пустой».
Формула или метрика
Общая ошибка модели раскладывается на три компонента:
Error = Bias² + Variance + Irreducible Error
При недообучении доминирует компонент Bias² (смещение), а Variance (дисперсия) мала. Irreducible Error — это шум в данных, который нельзя устранить никакой моделью.
Практический признак: если ошибка на обучающей выборке высока (например, MSE > 0.2 для нормализованных данных) и ошибка на валидации примерно такая же, модель недообучена.
Типичные ошибки
- Добавлять данные вместо усложнения модели. Если модель недообучена, новые данные не помогут — ошибка останется на том же уровне. Сначала нужно увеличить сложность модели или добавить признаки.
- Путать недообучение с переобучением. Высокая ошибка на тесте может указывать на обе проблемы. Различить их помогает сравнение ошибок на обучении и валидации: при недообучении они обе высоки и близки друг к другу.
- Бороться с недообучением регуляризацией. Регуляризация снижает сложность модели, что при недообучении только ухудшит ситуацию. Её применяют против переобучения, а не наоборот.
- Игнорировать feature engineering. Иногда проблема не в модели, а в признаках. Если входные данные не содержат сигнала, никакая архитектура не поможет. Добавление релевантных признаков или их преобразование может решить проблему быстрее, чем смена модели.
Как улучшить
- Увеличить сложность модели. Для нейросетей — добавить слои или нейроны в скрытых слоях. Для линейных моделей — перейти к полиномиальной регрессии или добавить взаимодействия признаков.
- Добавить релевантные признаки. Feature engineering часто даёт больший прирост, чем смена архитектуры. Проверьте, все ли важные переменные включены в модель.
- Уменьшить регуляризацию. Снизьте коэффициент L1/L2 или уберите dropout, если он применялся агрессивно.
- Увеличить время обучения. Попробуйте больше эпох или более высокий learning rate. Убедитесь, что оптимизатор действительно сходится.
- Использовать кросс-валидацию. Она помогает отличить недообучение от переобучения и подобрать оптимальную сложность модели.