Что такое Recurrent Depth в контексте LLM и зачем это нужно?

Краткий тезис

Recurrent Depth — это архитектурный приём, при котором один и тот же слой или блок трансформера многократно применяется на этапе инференса (теста), эффективно «разворачивая» модель на произвольную глубину. В отличие от обычного увеличения числа слоёв, это не требует дополнительных параметров, но позволяет модели выполнять более глубокие рассуждения, особенно в задачах математики, кода и многошагового планирования. Исследование Geiping et al. (2025) показало, что модель с 3.5B параметров, использующая recurrent depth, достигает результатов, сравнимых с моделями в 10 раз большего размера на сложных задачах.


1. Термин: Recurrent Depth (рекуррентная глубина)

Recurrent Depth — это концепция, заимствованная из рекуррентных нейронных сетей (RNN), но применённая к трансформерам. В стандартном трансформере каждый слой имеет уникальные веса, и глубина фиксирована (например, 32 слоя). В архитектуре с recurrent depth один слой (или блок слоёв) используется повторно — его выход подаётся на вход тому же слою несколько раз. На этапе обучения веса слоя оптимизируются для работы в течение фиксированного числа итераций (например, 4), а на этапе теста число итераций может быть увеличено (например, до 8, 16 или больше), что даёт дополнительную глубину без роста числа параметров.

Зачем это нужно

  • Масштабирование рассуждений (reasoning scaling): сложные задачи (математика, генерация кода, многошаговые планы) требуют глубоких цепочек рассуждений. Recurrent depth позволяет динамически увеличивать глубину на этапе теста, не переобучая модель.
  • Экономия параметров: вместо того чтобы учить 100 слоёв, можно выучить один мощный слой и применить его 100 раз — это даёт ту же вычислительную глубину при гораздо меньшем числе параметров.
  • Совместимость с Agentic RAG: агентные системы часто требуют итеративного уточнения запросов и документов — recurrent depth может служить механизмом для таких многошаговых циклов внутри одной модели.

2. Как работает Recurrent Depth: архитектура и инференс

2.1 Базовый блок

Пусть у нас есть один слой трансформера (self-attention + feed-forward) с весами (W). Обычно выход слоя:
[ h_{t+1} = [text](/wiki/text){TransformerLayer}(h_t; W) ]
При recurrent depth мы применяем один и тот же слой (K) раз:
[ h^{(1)} = [text](/wiki/text){TransformerLayer}(x; W)
h^{(2)} = [text](/wiki/text){TransformerLayer}(h^{(1)}; W)
\ldots
h^{(K)} = [text](/wiki/text){TransformerLayer}(h^{(K-1)}; W) ]
где (x) — входные эмбеддинги токенов, а (K) — число итераций (глубина развёртки).

2.2 Обучение

На этапе обучения (K) фиксировано (например, (K=4)). Модель учится делать полезные преобразования за 4 прохода. Градиенты проходят через все 4 применения одного и того же слоя (backpropagation through time, BPTT). Это стабильно, если использовать residual connections и layer normalization.

2.3 Инференс (тест)

На этапе теста (K) может быть увеличено (например, до 8, 16, 32). Модель продолжает применять тот же слой, углубляя рассуждения. Это похоже на «test-time compute scaling» — мы тратим больше вычислений на сложные запросы, не меняя веса.

Пример из Geiping et al. (2025):

  • Модель с 3.5B параметров обучалась с (K=4).
  • На тесте (K) увеличивали до 8, 16, 32.
  • Результаты на MATH и HumanEval улучшались с ростом (K), достигая уровня моделей с 30B+ параметров.

3. Сравнение с альтернативными подходами

ПодходПараметрыГлубина на тестеВычислительная стоимостьГибкость
Стандартный трансформер (32 слоя)32× параметры слояФиксированная 3232 проходаНизкая
Recurrent Depth (1 слой, K=32)1× параметры слояДинамическая (K)K проходовВысокая (можно менять K)
Chain-of-Thought (CoT)Те же, что у LLMЗависит от длины генерацииДополнительные токеныСредняя (нужен промпт)
Self-Consistency / Majority VotingТе жеМножественные прогоныУмножается на число прогоновСредняя

Ключевое отличие: recurrent depth увеличивает глубину внутри одного forward pass (через повторное применение слоя), а не через генерацию дополнительных токенов (как CoT). Это позволяет модели «думать» глубже, не увеличивая длину последовательности.


4. Преимущества и ограничения

Преимущества

  • Масштабирование без роста параметров: можно увеличивать глубину на тесте, не переобучая модель.
  • Улучшение на сложных задачах: математика, код, логические цепочки.
  • Эффективность памяти: один слой вместо многих — меньше памяти для хранения весов.
  • Совместимость с Agentic RAG: агент может итеративно уточнять запрос, используя recurrent depth как «внутренний цикл размышлений».

Ограничения

  • Стабильность обучения: BPTT через много шагов может привести к затуханию/взрыву градиентов. Требуются residual connections, layer norm и возможно gradient clipping.
  • Ограниченная глубина обучения: если (K) на обучении мало (например, 4), модель может не научиться эффективно использовать большую глубину на тесте — возникает разрыв (train-test mismatch).
  • Вычислительная стоимость на тесте: увеличение (K) линейно увеличивает время инференса.
  • Не подходит для всех задач: для простых вопросов глубокая развёртка может быть избыточна и даже вредна (overthinking).

5. Исследование Geiping et al. (2025) — ключевые результаты

  • Модель: 3.5B параметров, обучена с recurrent depth (K=4).
  • Тесты: MATH (математические задачи), HumanEval (генерация кода), GSM8K (арифметика).
  • Результаты:
    • При K=8 модель превзошла обычный трансформер с 7B параметров.
    • При K=32 результаты были сопоставимы с моделями 30B+ (например, Llama-2 70B).
    • Наблюдался чёткий тренд: чем больше K, тем выше точность, особенно на задачах, требующих многошаговых рассуждений.
  • Вывод: recurrent depth — эффективный способ получить «глубокие» рассуждения без огромных моделей.

6. Связь с Agentic RAG

В контексте Agentic RAG recurrent depth может быть использован как компонент для:

  • Итеративного уточнения запроса: агент повторно применяет один и тот же слой к эмбеддингам запроса, «углубляя» его понимание перед отправкой в retriever.
  • Многошагового планирования: агент может разворачивать recurrent depth для генерации последовательности действий (tool calls) без увеличения числа параметров.
  • Self-Reflection: модель может использовать recurrent depth для внутренней проверки собственных ответов (как в Self-RAG, но без внешних модулей).

Пример архитектуры Agentic RAG с recurrent depth:

  1. Запрос → эмбеддинг.
  2. Recurrent depth блок (K=4) → уточнённый эмбеддинг.
  3. Retrieval из векторной БД.
  4. Конкатенация с документами → recurrent depth блок (K=8) → финальный ответ.

7. Пет-проект для закрепления

Задача: Реализовать минимальный трансформер с recurrent depth и сравнить его производительность на задаче математических рассуждений (например, датасет GSM8K) при разной глубине теста.

Инструменты: PyTorch, Hugging Face Transformers (можно взять готовый слой), датасет GSM8K.

Шаги:

  1. Загрузите предобученный маленький трансформер (например, GPT-2 124M) или создайте свой с одним слоем.
  2. Заморозьте все слои, кроме одного (или используйте только один слой).
  3. Реализуйте функцию forward_recurrent(x, K), которая применяет слой K раз.
  4. Обучите модель на подмножестве GSM8K с K=4 (фиксированная глубина).
  5. На тесте оцените accuracy при K=1,2,4,8,16.
  6. Постройте график зависимости accuracy от K.

Ожидаемый результат: accuracy растёт с увеличением K до некоторого плато, демонстрируя эффект recurrent depth. Вы также заметите, что при K=1 модель работает плохо, а при K=16 может начать переобучаться (overthinking).


8. Связь с другими вопросами

ВопросТема
150Что такое Agentic RAG и как он отличается от обычного RAG?
152Какие архитектуры агентов существуют (ReAct, Toolformer, etc.)?
153Как агент принимает решение о вызове инструмента?
156Что такое Test-Time Compute Scaling и как оно связано с Recurrent Depth?
160Как вы оцениваете качество работы агента в RAG?
170Что такое Self-RAG и как он использует рефлексию?

Навигация