Deep double descent: почему увеличение модели снова снижает ошибку
Классическая статистика учит: сложная модель переобучается. Но на нейросетях кривая ошибки делает второй нырок вниз — и это меняет практику подбора размера и длительности обучения.

В 2019 году Preetum Nakkiran и коллеги из OpenAI показали неприятную для учебников вещь: у современных нейросетей ошибка на тесте с ростом модели сначала падает, потом растёт, потом снова падает. Причём вторая часть спуска уходит ниже первого минимума. Эффект назвали deep double descent, и он воспроизводится не только по размеру модели, но и по числу эпох, и по объёму данных. Для инженера это значит одно: правило «остановись, когда валидация начала расти» иногда честно вредит качеству.
Что вообще происходит с кривой ошибки
Классическая картинка bias–variance: маленькая модель недообучена, большая переобучена, оптимум где-то посередине. На нейросетях это работает только до определённой точки — так называемого interpolation threshold, порога интерполяции, за которым модель способна идеально запомнить обучающую выборку (ошибка на train = 0).
Вокруг этого порога и происходит самое интересное:
- слева от порога кривая ведёт себя как в учебнике: сначала спуск, потом рост тестовой ошибки;
- ровно на пороге тестовая ошибка часто резко подпрыгивает — модель едва-едва вмещает данные и цепляется за шум;
- справа от порога, при дальнейшем росте модели, тестовая ошибка снова снижается — иногда ниже первого минимума.
Отсюда «двойной спуск»: два локальных минимума на одной кривой, разделённые горбом.
Три оси, на которых виден эффект
Nakkiran и соавторы аккуратно развели три сценария, в которых double descent проявляется по-разному:
| Ось | Что растёт | Где горб |
|---|---|---|
| Model-wise | ширина/глубина сети | там, где ёмкость впервые позволяет запомнить train |
| Epoch-wise | число эпох обучения | момент выхода train loss на ноль |
| Sample-wise | размер обучающей выборки | парадоксально: больше данных временно ухудшает тест |
Последний случай особенно неприятен интуиции: добавили данных — стало хуже. Механика та же: рост выборки сдвигает порог интерполяции, и модель на какое-то время оказывается ровно в горбе.
Откуда берётся горб
Строгой единой теории нет, но рабочее объяснение выглядит так. На пороге интерполяции у модели ровно столько параметров, чтобы вписать обучающую выборку, — и почти нет свободы выбирать, как именно это сделать. Решение оказывается единственным и хрупким: любой шум в данных попадает в веса.
Когда параметров становится сильно больше, чем нужно, появляется множество решений с нулевой ошибкой на train. SGD и его родственники неявно выбирают среди них более «простые» — с меньшей нормой, более гладкие. Эту неявную регуляризацию оптимизатора обсуждают как основную причину второго спуска.
Переобучение — это не свойство большой модели, а свойство модели, у которой ровно впритык ёмкости на данные.
Что с этим делать на практике
Из эффекта следуют несколько рабочих выводов — не законов, а поводов проверить свой пайплайн:
- Не останавливайтесь на первом минимуме валидации вслепую. Early stopping может выключить обучение аккурат в горбе. Если ресурсы позволяют, доведите train loss до нуля и посмотрите, что происходит дальше.
- Не бойтесь «слишком большой» модели. Модель с ёмкостью, заметно превышающей размер данных, часто обобщает лучше, чем модель «в размер». Это не оправдание раздувать параметры без нужды, но опровергает страх «слишком много весов = переобучение».
- Регуляризация может сгладить горб. Достаточная weight decay, label smoothing, аугментации в ряде экспериментов Nakkiran убирают второй пик почти полностью. Если вы уже сидите в горбе, это дешевле, чем менять архитектуру.
- Смотрите на шум в разметке. Double descent выражен сильнее при зашумлённых лейблах: у модели «впритык» нет выбора, приходится запоминать ошибки разметчиков. Чистка данных иногда работает лучше, чем тюнинг гиперпараметров.
Как это увидеть на своих данных
Минимальный воспроизводимый эксперимент — ResNet-18 с варьируемой шириной на CIFAR-10 с искусственным шумом в лейблах (15–20% случайно перепутанных классов). Логика скрипта примерно такая:
widths = [1, 2, 4, 8, 16, 24, 32, 48, 64]
results = []
for w in widths:
model = ResNet18(base_width=w)
train(model, loader_train, epochs=4000, opt=SGD, wd=0.0)
r = {
"width": w,
"train_err": eval_err(model, loader_train),
"test_err": eval_err(model, loader_test),
}
results.append(r)
plot(results, x="width", y="test_err")
Если построить test_err от ширины, при достаточно длинном обучении и заметном шуме в лейблах виден классический горб около той ширины, где train_err впервые касается нуля. Убрав шум или включив weight decay, горб чаще всего исчезает — это тоже полезный сигнал.
Ограничения эффекта
Double descent — не универсальный закон, а наблюдение с довольно чёткими условиями. Он ярко виден при:
- обучении до полного вписывания train (train loss ≈ 0);
- наличии шума в данных или разметке;
- слабой явной регуляризации.
Если вы обучаетесь с сильным weight decay, ранней остановкой и чистой разметкой, вы, скорее всего, вообще не увидите горб — и это нормально. Знание об эффекте нужно не для того, чтобы его ловить, а для того, чтобы не принять его случайно за «мою модель переобучилась, надо уменьшать».
Interpolation threshold — порог интерполяции: значение ёмкости модели или числа шагов обучения, при котором сеть впервые способна свести ошибку на обучающей выборке к нулю. Именно вокруг него концентрируется горб двойного спуска.
Prompt-инженер: Идеальные запросы для Midjourney, ChatGPT и других моделей.
Спросить за 15 ₽Источники: Deep Double Descent: Where Bigger Models and More Data Hurt (Nakkiran et al., 2019), Deep Double Descent — OpenAI blog
Частые вопросы
Double descent — это то же самое, что переобучение?
Значит, early stopping больше не нужен?
На каких моделях эффект виден сильнее всего?
Как понять, что моя модель сидит в горбе, а не просто переобучилась?
Что делать, если ресурсы не позволяют обучать «за горб»?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.