Curse of Depth: почему глубокие слои LLM почти ничего не делают

Curse of Depth: почему глубокие слои LLM почти ничего не делают

Задумывались, почему большие языковые модели тратят огромные ресурсы на обучение, но половина их слоёв по факту ничего не делает? Исследование Westlake University, Emory, Oxford и ещё трёх университетов — принято на NeurIPS 2025 — даёт этому конкретное объяснение и, что важнее, простое исправление.

Что такое Curse of Depth

Curse of Depth, или «проклятие глубины», — это феномен, при котором глубокие слои в современных трансформерах (слои после ~18-го в Llama, Mistral, DeepSeek, Qwen) вносят минимальный вклад в обучение и представление. Они оказываются устойчивы к prune-у и perturbations, что означает одно: они не выполняют осмысленных преобразований, а лишь передают информацию дальше почти без изменений.

Исследователи из Westlake University и Oxford провели серию экспериментов с layer pruning на моделях Qwen3, LLaMA2 и DeepSeek. Результат убийственный: можно удалить почти все глубокие слои без значительного падения производительности на MMLU. У Qwen3-8B половина слоёв после 18-го показывает угловое расстояние менее 0.2 от предыдущего слоя — то есть они генерируют почти идентичные представления. У LLaMA2-13B угловое расстояние на последней трети сети стремится к нулю.

Корень проблемы: Pre-Layer Normalization

Почему это происходит? Виновник — повсеместно используемая Pre-Layer Normalization (Pre-LN). В стандартном Pre-LN слои нормализуются перед основными вычислениями (attention и FFN), что стабилизирует обучение трансформеров. Но есть обратная сторона.

Математика показывает: дисперсия выхода растёт экспоненциально с глубиной слоя. ГFormal statement из статьи:

Θ(L) ≤ σ²xL ≤ Θ(exp(L))

При такой экспоненциальной дисперсии градиенты глубоких слоёв приближаются к единичной матрице. Это значит, что градиент ∂y_L/∂x₁ практически не содержит информации о том, как глубокий слой должен был бы изменить представление — он просто передаёт его как есть.

Визуализация Якобиана residual blocks в предобученной LLaMA2-7B показывает выраженную диагональную доминантность в глубоких слоях: всё больше похоже на identity mapping. Глубокий слой буквально перестаёт учиться.

Contrast с Post-LN: в моделях на базе BERT-Large глубокие слои, наоборот, вносят основной вклад, а ранние слои взаимозаменяемы. Pre-LN инвертирует эту картину — и не в пользу глубоких слоёв.

LayerNorm Scaling: одно изменение вместо архитектурной перестройки

Исправление, предложенное авторами, поражает простотой. Вместо того чтобы менять архитектуру или добавлять обучаемые параметры, они масштабируют выход Layer Normalization обратно пропорционально корню из номера слоя:

h(ℓ) = LayerNorm(h(ℓ)) × 1/√ℓ

Вот и всё. Никаких новых гиперпараметров, никаких дополнительных весов.

Теоретическое обоснование: после применения LNS верхняя граница роста дисперсии снижается с экспоненциальной до полиномиальной:

Θ(exp(L)) → Θ(L^(2−ε))

Практический эффект: дисперсия выхода в глубоких слоях удерживается на уровне ~25 вместо ~175 у стандартного Pre-LN. Градиенты глубоких слоёв вместо identity mapping начинают реально менять представления.

Цифры: LNS работает на всех масштабах

Предобучение (LLaMA, фиксированный объём токенов):

Модель Post-LN DeepNorm Mix-LN Pre-LN Pre-LN + LNS
LLaMA-130M 26.95 27.17 26.07 26.73 25.76
LLaMA-250M 1409.79 22.77 21.39 21.92 20.35
LLaMA-350M 1368.33 1362.59 1363.21 19.58 18.20
LLaMA-1B 1390.75 1409.08 1414.78 17.02 15.71

DeepNorm и Mix-LN нестабильны на больших моделях: Mix-LN вообще не сходится на LLaMA-1B при расширенном обучении (100K шагов против 50K в оригинальной работе). LNS стабилен везде.

Supervised Fine-Tuning (LLaMA-1B, Commonsense170K):

Метод MMLU ARC-e Hellaswag Average
Pre-LN 26.54 45.70 30.96 43.01
Pre-LN + LNS 28.69 48.85 33.94 44.87

LNS даёт прирост +1.86% средней точности на 8 задачах. На ARC-e разрыв достигает +3.15%.

Масштабирование (OLMo, 20B токенов):

На 7B параметрах LNS снижает финальный loss с 2.69 до 2.50 — выигрыш, который накапливается на протяжении всего обучения. На Qwen2.5-0.5B перплексия падает с 20.62 до 19.57.

Почему это важно именно сейчас

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

LNS ломает этот цикл: вместо того чтобы выключать глубокие слои через pruning post-hoc, он делает их полноценно работоспособными с самого начала обучения. Все слои вносят осмысленный вклад, вычислительные ресурсы используются эффективнее, а финальная модель работает лучше на всех этапах — от предобучения до fine-tuning.

Как это соотносится с интуицией

До этого исследования общепринятый ответ был: «трансформеры слишком глубокие, ранние слои учат базовые паттерны, глубокие — абстракции, какая-то избыточность нормальна». Теперь мы знаем конкретный механизм — Pre-LN → экспоненциальный рост дисперсии → identity mapping глубоких слоёв — и можем исправить одним умножением.

Код доступен на GitHub (LayerNorm-Scaling), реализация — буквально одна строка поверх существующего LayerNorm.

FAQ

Почему Pre-LN так широко используется, если он вызывает эту проблему? Pre-LN стабилизирует обучение: экспоненциальный рост дисперсии создаёт верхнюю границу нормы градиента, что предотвращает diverging. Это важное преимущество для тренировки очень глубоких сетей. LNS сохраняет стабильность Pre-LN, но добавляет контроль дисперсии через масштабирование — компромисс, а не полная замена.

Это касается только открытых моделей (Llama, Mistral)? Исследование подтвердило Curse of Depth на Llama, Mistral, DeepSeek и Qwen. Это четыре из пяти самых популярных семейств открытых LLM. Architectural diversity авторов включает и BERT-Large (Post-LN как контрпример), что усиливает аргумент: проблема системная, а не специфика одной архитектуры.

Нужно ли переобучать уже существующие модели с LNS? Польза LNS проявляется на этапе предобучения. Для существующих моделей эффект проявляется в снижении потерь при pruning глубоких слоёв — они работают лучше, потому что изначально были обучены с LNS. Для уже обученных моделей техника не применима напрямую, но выводы исследования полезны для понимания того, какие слои действительно вносят вклад.

LNS — это то же самое, что и Post-LN? Нет. Post-LN нормализует после attention/FFN, что создаёт другие проблемы: нестабильность при большой глубине. Mix-LN добавляет гиперпараметр α=0.25, чувствителен к архитектуре и нестабилен на больших моделях. LNS остаётся в рамках Pre-LN, не добавляет параметров и не требует настройки.

Какие практические выводы для инженеров, тренирующих модели? Если вы тренируете трансформер с нуля — LNS даёт стабильное улучшение при минимальной реализации. Если вы используете существующие модели — полезно знать, что глубокие слои в Pre-LN архитектурах работают менее эффективно; это объясняет, почему aggressive layer pruning часто не даёт ожидаемого падения качества.


Источник: The Curse of Depth in Large Language Models, arXiv:2502.05795, NeurIPS 2025. Авторы: Wenfang Sun, Xinyuan Song, Pengxiang Li, Lu Yin, Yefeng Zheng, Shiwei Liu.

← Все записи