Что такое Chain-of-Thought без токенов (latent CoT) и как это реализовано?

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

Latent CoT (Reasoning|скрытая цепочка рассуждений) — это метод, при котором модель рассуждает в непрерывном скрытом пространстве, не генерируя промежуточные текстовые токены. Вместо декодирования каждого шага рассуждения в слова, модель выполняет итеративные обновления скрытого состояния через дополнительные слои или специальные механизмы. Это позволяет ускорить инференс, снизить вычислительные затраты и потенциально улучшить глубину рассуждений. Ключевые реализации — COCONUT (2025) и ∇-Reasoner.


1. Термин: Chain-of-Thought (CoT) и его ограничения

Chain-of-Thought (CoT) — техника, при которой модель генерирует последовательность промежуточных шагов рассуждения в виде текста перед финальным ответом. CoT значительно улучшает производительность на задачах, требующих многошаговой логики (математика, планирование).

Ограничения обычного CoT

  • Генерация токенов требует времени — каждый шаг декодируется авторегрессивно, что линейно увеличивает задержку.
  • Высокая вычислительная стоимость — длинные цепочки потребляют много памяти и FLOPs.
  • Избыточность — модель может генерировать многословные, неинформативные шаги.
  • Ограничение длины контекста — длинные CoT могут превысить окно внимания.

Latent CoT предлагает обойти эти проблемы, выполняя рассуждения в скрытом пространстве, без порождения текста.


2. Идея latent CoT: рассуждение в скрытом пространстве

В обычном трансформере каждый слой преобразует state|скрытое состояние. Latent CoT добавляет дополнительные итерации (или слои), которые обновляют state|скрытое состояние, не выводя его в слова. Модель «думает» в непрерывном пространстве, а затем одним декодирующим шагом выдаёт ответ.

Ключевые принципы

  • Скрытые рассуждения — модель выполняет несколько шагов внутреннего обновления, аналогичных шагам CoT, но без токенизации.
  • Непрерывность — состояния — векторы в R^d, а не токены|дискретные токены.
  • Эффективность — один проход через дополнительные слои быстрее, чем генерация последовательности токенов.

3. Архитектурные подходы к реализации

3.1 Дополнительные слои трансформера

Модель содержит резервные слои (residual blocks), которые активируются только во время рассуждения. После обычного прямого прохода модель выполняет K итераций через эти слои, обновляя скрытое состояние последнего слоя.

3.2 Итеративное обновление скрытого состояния (рекуррентный подход)

Вместо дополнительных слоёв используется рекуррентный блок, который применяется к скрытому состоянию несколько раз. Например, в ∇-Reasoner применяется градиентный спуск по скрытому состоянию для минимизации «энергии рассуждения».

3.3 Механизм «latent reasoning tokens»

В COCONUT вводится специальный latent reasoning token — обучаемый вектор, который вставляется в последовательность скрытых состояний. Модель обрабатывает его как обычный токен, но не декодирует в текст. После нескольких итераций latent token агрегирует информацию, и модель выдаёт ответ.


4. COCONUT (2025) — конкретная реализация

COCONUT (Chain-of-Continuous-Thought) — метод, предложенный в 2025 году. Основные идеи:

  • Обучение с учителем — модель обучается на парах (вопрос, ответ) с использованием специальной функции потерь, которая поощряет формирование внутренней цепочки рассуждений.
  • Архитектура — стандартный декодерный трансформер, в который добавлены latent reasoning layers (LRL). Эти слои имеют ту же структуру, что и обычные, но их выход не подаётся на декодирующую голову до завершения всех итераций.
  • Процесс инференса:
    1. Входной запрос кодируется до последнего слоя.
    2. Включается режим рассуждения: скрытое состояние проходит через LRL T раз (T — гиперпараметр).
    3. После T итераций финальное состояние декодируется в ответ.
  • Обучение — используется auxiliary loss, который штрафует за преждевременное декодирование и поощряет разнообразие скрытых состояний.

Псевдокод инференса COCONUT

def forward_with_latent_cot(model, input_ids, num_reasoning_steps=5):
    hidden = model.embed(input_ids)
    # Прямой проход через основные слои
    for layer in model.base_layers:
        hidden = layer(hidden)
    # Режим рассуждения
    for _ in range(num_reasoning_steps):
        hidden = model.latent_reasoning_layer(hidden)
    # Декодирование
    logits = model.lm_head(hidden[:, -1, :])
    return logits

5. ∇-Reasoner — градиентный подход

∇-Reasoner использует градиентный спуск в скрытом пространстве для имитации рассуждения. Идея: определить «энергию» скрытого состояния (например, несоответствие между текущим состоянием и ожидаемым ответом) и минимизировать её путём итеративного обновления.

  • Функция энергии E(h) — обычно отрицательное логарифмическое правдоподобие ответа при данном скрытом состоянии.
  • Обновление: h_{t+1} = h_t - η ∇_h E(h_t)
  • Преимущество: не требует дополнительных слоёв, использует существующие градиенты модели.
  • Недостаток: необходимость вычисления градиентов на инференсе (дорого), но можно аппроксимировать.

6. Сравнение обычного CoT и latent CoT

ХарактеристикаОбычный CoT (текстовый)Latent CoT (скрытый)
Форма рассужденийДискретные токеныНепрерывные векторы
Скорость инференсаМедленнее (линейно от длины цепочки)Быстрее (константное число итераций)
Вычислительные затратыВысокие (генерация каждого токена)Ниже (один проход через доп. слои)
ИнтерпретируемостьВысокая (можно прочитать шаги)Низкая (скрытые состояния не читаемы)
КонтролируемостьМожно редактировать шагиСложно вмешаться
Длина контекстаОграничена окном вниманияНе влияет (нет новых токенов)
Точность на сложных задачахВысокая (проверено)Потенциально выше (больше итераций)

7. Преимущества latent CoT

  • Скорость — инференс в 2–5 раз быстрее, чем эквивалентный текстовый CoT.
  • Эффективность памяти — не нужно хранить длинные последовательности токенов.
  • Глубина рассуждений — можно выполнять десятки итераций без риска превысить лимит контекста.
  • Параллелизм — итерации скрытого состояния можно частично распараллелить (в отличие от авторегрессивной генерации).

8. Недостатки и вызовы

  • Интерпретируемость — невозможно прочитать «мысли» модели, что критично для отладки и доверия.
  • Обучение — требуется специальная процедура, чтобы модель научилась использовать скрытые итерации. Без правильного обучения модель может игнорировать дополнительные шаги.
  • Контроль — сложно гарантировать, что модель действительно рассуждает, а не просто «перекодирует» вход.
  • Гиперпараметры — число итераций T нужно подбирать; слишком мало — недостаточно рассуждений, слишком много — затухание градиентов.

9. Применение в Agentic RAG

В Agentic RAG агенты часто используют CoT для планирования последовательности действий (поиск документов, вызов инструментов). Latent CoT может ускорить этот процесс:

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

Пример: агент получает запрос «Найди последние статьи по квантовым вычислениям и сравни их с обзором 2023 года». Вместо генерации длинного текстового плана, latent CoT за несколько итераций формирует внутреннее представление плана, а затем выдаёт команды: search("quantum computing 2024"), retrieve("review 2023"), compare().


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

Задача Реализовать упрощённую версию latent CoT на базе небольшого трансформера (например, GPT-2) для задачи математических рассуждений (сложение многозначных чисел).

Инструменты PyTorch, Hugging Face Transformers, небольшой датасет (например, GSM8K subset).

Шаги:

  1. Загрузите предобученный GPT-2 (distilgpt2).
  2. Добавьте latent reasoning layer — один дополнительный трансформерный слой после последнего слоя модели. Заморозьте основные слои.
  3. Определите режим рассуждения: после обычного прямого прохода примените LRL K раз (K=3) к скрытому состоянию последнего токена.
  4. Обучите LRL на задаче: вход — строка "123 + 456 =", выход — правильный ответ "579". Используйте loss только на финальном токене.
  5. Сравните точность и скорость с обычным fine-tuning (без latent CoT) и с текстовым CoT (генерируйте промежуточные шаги).

Ожидаемый результат Модель с latent CoT покажет сопоставимую точность с текстовым CoT, но будет работать в 2–3 раза быстрее на инференсе. Вы сможете визуализировать скрытые состояния и увидеть, как они меняются с каждой итерацией.


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

ВопросТема
289Архитектура Agentic RAG
291Планирование в Agentic RAG
292Использование инструментов агентами
293Память в Agentic RAG
294Мультиагентные системы
295Оценка агентов

12. Навигация


Навигация