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

Все крупные языковые модели — Llama, Mistral, DeepSeek, Qwen — содержат десятки слоёв трансформера. Логика подсказывает: каждый следующий слой добавляет выразительности и вносит вклад в итоговый результат. Но исследование The Curse of Depth in Large Language Models (принято в NeurIPS 2025) показывает обратное: почти половина глубоких слоёв в современных LLM менее эффективна, чем ожидалось, а некоторые приближаются к тождественным отображениям — просто передают информацию дальше, не преобразуя её.

Откуда взялась эта проблема

Исследователи начали с простого эксперимента: что будет, если последовательно «отключать» слои в LLM и смотреть, как падает качество? Если бы все слои работали одинаково, удаление любого из них вызывало бы предсказуемое снижение перплексии. В реальности эффект оказался неравномерным.

Оказалось, что глубокие слои (ближе к выходу модели) вносят гораздо меньший вклад, чем слои в середине модели. При этом эффект стабильно проявлялся в самых популярных семействах LLM: Llama (от 130M до 7B параметров), Mistral, DeepSeek и Qwen. Это не особенность одной архитектуры — это паттерн, характерный для всех моделей, обученных с Pre-Layer Normalization.

Количественно: в Llama-7B (32 слоя) примерно 40–50% слоёв в последней трети модели вносят минимальный вклад. Удаление каждого из них повышает перплексию менее чем на 1% — по сути это тождественные отображения. У Mistral и Qwen аналогичная картина: примерно каждый второй слой в нижней половине можно удалить без катастрофической деградации.

Методология оценки: авторы применяли layer pruning — последовательно удаляли один слой за другим и измеряли перплексию. Если слой важен, его удаление вызовет резкий рост перплексии. Если слой близок к тождественному отображению, удаление пройдёт почти незаметно. Именно так были получены оценки «половина слоёв не работает».

Результат контринтуитивен: layer pruning в глубоких LLM работает иначе, чем в ResNet для компьютерного зрения. В ResNet важность слоёв убывает плавно и предсказуемо. В Pre-LN LLM слои в первой половине модели примерно одинаково важны, а потом происходит резкое падение — глубокие слои почти «выключены» из обучения.

Pre-Layer Normalization как причина

Корень проблемы — в архитектурном выборе, принятом почти повсеместно. Pre-Layer Normalization (Pre-LN) — это схема нормализации, при которой LayerNorm применяется до attention и feed-forward блоков, а не после. Схема Pre-LN стабилизирует обучение и используется по умолчанию практически во всех современных LLM: GPT, Llama, Mistral, Claude — все построены на Pre-LN.

Но при глубоком стеке слоёв (десятки трансформер-блоков друг за другом) Pre-LN вызывает экспоненциальный рост дисперсии выходов каждого слоя. Формально выход каждого слоя можно приблизить как $x_{\ell+1} \approx x_0 + \ell \cdot \text{FFN}(\text{LN}(x_0))$, где $x_0$ — вход модели, а $\ell$ — номер слоя. Чем глубже слой, тем сильнее влияние $x_0$ на его выход, потому что дисперсия растёт как $O(\ell)$.

Это означает, что градиенты от глубоких слоёв к более ранним затухают экспоненциально. Производная выхода по параметрам глубокого блока стремится к единичной матрице — блок работает почти как skip connection, внося минимальный вклад в обучение. Модель «забывает», что глубокие слои нужно настраивать. Именно поэтому удаление глубокого слоя вызывает меньшую деградацию, чем удаление среднего.

Теоретический анализ авторов формально доказывает это. Они показывают, что при определённых условиях (которые выполняются для стандартных инициализаций) градиенты от глубоких слоёв экспоненциально затухают относительно градиентов от ранних слоёв. Это не баг в коде — это математическое свойство архитектуры, которое проявляется тем сильнее, чем глубже модель. Теорема: при Pre-LN и стандартной инициализации Xavier/Kaiming, градиенты от слоя $\ell$ затухают как $O(1/\sqrt{\ell})$ relative to градиентам от первых слоёв.

LayerNorm Scaling как решение

Исследователи предложили простое исправление — LayerNorm Scaling (LNS). Идея: масштабировать дисперсию выхода LayerNorm обратно пропорционально квадратному корню из глубины слоя. Если на слое $\ell$ стандартный LayerNorm даёт выход с дисперсией $\sigma^2$, LNS масштабирует её на $1/\sqrt{\ell}$.

Математически: после каждого LayerNorm выход умножается на фактор $\alpha / \sqrt{\ell}$, где $\alpha$ — обучаемый параметр. Это компенсирует экспоненциальный рост дисперсии, и каждый глубокий слой начинает реально вносить вклад в обучение. Изменение минимальное — одна операция масштабирования на слой, — но эффект на обучение оказался существенным.

Гиперпараметр $\alpha$ — единственное, что нужно добавить. Авторы рекомендуют начинать с $\alpha = 1$ (то есть стандартное масштабирование $1/\sqrt{\ell}$) и позволить backpropagation настраивать его в процессе обучения. Эмпирически оптимальное значение $\alpha$ получается около 0.7–0.9 для глубоких моделей, но это зависит от конфигурации.

Экспериментальные результаты

Авторы тестировали LNS на моделях от 130M до 7B параметров, используя идентичные конфигурации обучения (тот же датасет, тот же learning rate, то же расписание). Сравнивали с тремя альтернативными подходами: Post-LN (классическая схема, нестабильная в глубоком стеке), Scaled Initialization (масштабирование инициализации весов на $1/\sqrt{2L}$) и DeepNorm (масштабирование после каждого блока).

Результаты LNS стабильно превосходят все альтернативы по метрике перплексии на валидационной выборке. Для Llama-130M улучшение составило около 1.31 пункта перплексии — заметный выигрыш для языкового моделирования. Для Llama-1B, 3B и 7B картина аналогичная: LNS выигрывает у всех конкурентов, хотя абсолютные цифры авторы приводят в основном в сравнительных таблицах.

Важно: улучшение переносится на этап supervised fine-tuning. Модели, обученные с LNS, показывают более высокие результаты не только на языковом моделировании, но и на задачах после дообучения. Это доказывает, что глубокие слои после LNS реально участвуют в настройке, а не остаются «замороженными» — иначе fine-tuning не показывал бы разницы.

Ablation study показала: основной вклад даёт именно компенсация дисперсии, а не другие аспекты LNS. Конкурирующие методы (Scaled Init, DeepNorm) дают меньший эффект, потому что исправляют проблему на уровне инициализации или на уровне агрегации блоков, но не на уровне каждого отдельного слоя.

Архитектурный контекст: почему Pre-LN стала стандартом

Исторически трансформеры начинали с Post-Layer Normalization (Post-LN): LayerNorm после attention и FFN. Post-LN давала лучшее качество, но страдала от нестабильности при большом количестве слоёв — градиенты могли взрываться на ранних этапах обучения.

Pre-LN была предложена в 2019 году (Baevski и Auli) как стабильная альтернатива: LayerNorm до блока, а не после. Это позволило обучать гораздо более глубокие модели без численной нестабильности. GPT-3, Llama, Claude и большинство современных моделей используют Pre-LN именно поэтому.

Цена этой стабильности — Curse of Depth. При Pre-LN дисперсия накапливается с каждым слоем, и глубокие слои неизбежно вырождаются. До этой работы считалось, что это приемлемый компромисс. Теперь понятно, что LNS позволяет получить стабильность Pre-LN и качество глубоких слоёв одновременно.

Почему это важно для индустрии

Проблема Curse of Depth затрагивает практически все современные LLM, потому что Pre-LN стал стандартом. Если почти половина слоёв в 80-слойной модели работает на уровне skip connection, это означает, что потенциал модели используется не полностью. Часть параметров и вычислительных ресурсов при инференсе тратится впустую.

Для существующих моделей эффект тоже актуален: если глубокие слои не участвуют в обратном градиенте, это потенциально объясняет, почему fine-tuning глубоких слоёв иногда даёт непредсказуемые результаты. Модель распределяет «кредит» за ошибки между слоями неравномерно, и глубокие слои получают слишком малый сигнал для обучения.

LayerNorm Scaling предлагает минимальное вмешательство с потенциально значимым эффектом. Это не требует изменения архитектуры или переобучения с нуля — только корректировка нормализации. Для будущих моделей LNS может стать стандартной практикой, как сейчас стала повсеместной Pre-LN.

Связь с layer pruning и model compression

Результаты работы проливают новый свет на практику layer pruning. Ранее считалось, что глубокие слои важны для качества модели — их удаление вызывало заметную деградацию. Теперь понятно: это верно только для моделей с Post-LN. Для Pre-LN моделей глубокие слои уже частично «мёртвые», поэтому pruning работает иначе.

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

Часто задаваемые вопросы

Почему эта проблема не была обнаружена раньше?

Потому что на стандартных бенчмарках языкового моделирования эффект проявляется только в перплексии — метрике, которая чувствительна к качеству всех слоёв. Анализ вклада отдельных слоёв требует специальных экспериментов с постепенным отключением (layer pruning), которые авторы и провели. До этой работы считалось, что все слои примерно одинаково важны — примерно как в ResNet для компьютерного зрения, где каждый слой вносит предсказуемый вклад.

LNS замедляет инференс?

Нет. LNS — это только масштабирование нормализации, одно умножение на слой. Дополнительных вычислений практически нет. Оверхед на инференс измерим, но пренебрежимо мал — менее 0.5% от общего времени forward pass.

Работает ли LNS для любой архитектуры или только для LLM?

Основной фокус работы — LLM с Pre-LN трансформерами. Но авторы экспериментировали и с vision-language моделями (Qwen 2.5-VL) и наблюдали аналогичный эффект. Принцип применим к любому глубокому стеку Pre-LN трансформеров, не только к языковым моделям.

Post-LN работает лучше качественно?

Post-LN исторически давала лучшее качество, но страдает от нестабильности при большом количестве слоёв. Pre-LN стала стандартом именно из-за стабильности, даже ценой потери части глубины. LNS — попытка получить стабильность Pre-LN и качество Post-LN одновременно.

Это как ResNet skip connections?

Концептуально похоже: и skip connections, и близкие к тождественным слои позволяют градиентам течь в обратном направлении без затухания. Но разница в том, что в ResNet skip connection добавляется явно (результат $x_{l+1} = x_l + F(x_l)$), а при Curse of Depth тождественное отображение возникает побочным эффектом архитектуры — и оно нежелательно, потому что означает, что 30–40% слоёв просто копируют вход без преобразования.

Итог

Curse of Depth — одна из тех проблем, которые очевидны задним числом. Модели с 32–80 слоями, где значительная часть из них близка к тождественным отображениям — это не теоретическая возможность, а измеренный факт для Llama, Mistral, DeepSeek и Qwen. Корень в Pre-LN, которая стабилизирует обучение, но при этом экспоненциально затупляет градиенты в глубоких слоях. LayerNorm Scaling — минимальное и элегантное исправление, которое возвращает глубоким слоям способность к обучению без пересмотра архитектуры.

← Все записи