Чтобы большие мультимодальные языковые модели (Multimodal Large Language Models, MLLM) могли решать сложные задачи, их зачастую учат явно расписывать логику ответа — то, что называется цепочка рассуждений (Chain of Thought - CoT). Однако это приводит к генерации объёмных промежуточных рассуждений, что заметно увеличивает число токенов и, как следствие, замедляет вывод (inference). В статье «Efficient Reasoning with Hidden Thinking» авторы предлагают фреймворк Heima: CoT прячется во «внутреннее пространство» модели, а снаружи видна лишь короткая последовательность специальных «thinking tokens», которые затем можно расшифровать обратно в детальные рассуждения при необходимости.
🏗️ Как устроен Heima
Идея в том, чтобы модель по ходу генерации не печатала полные промежуточные шаги («Почему ответ такой»), а кодировала их во внутренние векторные представления. Авторы реализуют это в два этапа:
🏷️ Heima Encoder (мультимодальная часть):
- Получает на вход изображение (Xv) + вопрос (Xq)
- Генерирует финальный ответ (Ya)
- Вместо «текстовых CoT» создаёт небольшую последовательность специальных токенов <CoT>(k), по одному на каждый этап рассуждения.
- Скрытые состояния этих специальных токенов (thinking tokens) несут в себе всю полноту CoT, но при этом занимают намного меньше текстового места.
🧩 Heima Decoder (обычный LLM, работающий только с текстом):
- Может принять «thinking tokens» от Heima Encoder как скрытые векторы, плюс «объясняющую» подсказку (prompt)
- Декодирует их в исходный (или почти исходный) детализированный CoT, чтобы была понятна логика вывода.
Проще говоря, во время реального ответа Heima Encoder выдаёт значительно меньше токенов, чем полноценный CoT, что ускоряет ответ и сокращает ресурс. Но когда нужно увидеть детали размышлений, тот же пакет скрытых «thinking tokens» можно прогнать через Heima Decoder и получить восстановленные шаги рассуждения.
🤔 Основные технические детали
☁️ Постепенное (progressive) внедрение:
Чтобы модель плавно научилась кодировать CoT в минимальные блоки, авторы не сразу заменяют все промежуточные рассуждения на <CoT>-токены. Сначала часть CoT остаётся текстовой, часть — скрывается, потом доля скрытых частей растёт, пока вся цепочка не станет «thinking tokens».
🔢 Минимальная последовательность:
Обычно 3–5 строк детального CoT может занимать сотни токенов. Здесь же каждый этап (summary - итог, caption - заголовок, reasoning - рассуждение) превращается в один специальный токен вроде <Thinking_of_Summary>, за которым в скрытом векторе хранится полная логика.
⏱️ Ускорение инференса:
Ключевое преимущество — генерация намного меньшего числа токенов во время ответа. Бенчмарки показывают, что Heima Encoder может работать с 6–10% обычного количества токенов и при этом терять минимум в точности. На некоторых наборах вопросов (например, MMBench) точность даже повышается.
🔍 Восстановление и интерпретация:
Heima Decoder (реализован на более простом LLM, без мульти-модальных возможностей) берёт вектор из скрытого состояния <Thinking_of_Caption> и при помощи специального промпта (примерно «Расскажите о ходе мысли <Thinking_of_Caption>…») генерирует детальные рассуждения, очень похожие на исходные. GPT-4-оценка показывает высокую степень совпадения (3–5 баллов из 5).
💡 Почему это важно
🤖 Экономия ресурсов
Вычислительные затраты пропорциональны количеству генерируемых токенов. Если CoT длинный, крупная модель (10+ млрд параметров) тратит кучу времени и памяти. Сокращая CoT в десятки раз, можно удешевить вывод.
💬 Возможность интерпретации
Большой минус «полного скрытого» подхода в том, что мы не видим, как модель рассуждала. А здесь решение: скрытые «thinking tokens» по желанию преобразуются обратно в явные «цепочки рассуждений».
🤝 Работает с мультимодальностью
Heima Encoder умеет сочетать визуальные и текстовые входы. Причём Heima Decoder уже не нуждается в картинке — он восстанавливает детали reasoning, взяв лишь текстовый вопрос и скрытые векторы.
📊 Ключевые результаты экспериментов
Исследование провели на нескольких мультимодальных бенчмарках:
🔸 MMBench, MMStar, MMVet:
- Тематика: общий визуальный Q&A, проверка логики.
- Heima показал сходную или даже бóльшую точность, чем модель LLaVA-CoT (подготовленная с явным текстовым CoT), но при этом генерировал значительно (иногда до 10–15 раз) меньше токенов.
🔸 MathVista, AI2D:
- Специализированные задачи на научно-математическое мышление (чертежи, диаграммы).
- Heima сохранял корректность при сокращении CoT, особенно если применялся «прогрессивный» подход (поэтапное обучение).
🔸 HallusionBench:
- Набор заданий, проверяющих «галлюцинации» LLM с визуальными иллюзиями.
- Heima при значительном сокращении выходного текста сохранял или даже чуть улучшал метрики точности.
Авторы уточняют, что «прогрессивное кодирование» (gradual encoding) и «восстановочный этап» (recovery stage) дают ощутимый плюс: без них качество заметно падает.
✨ Личное мнение и перспективы
Мне кажется, подход Heima решает важный вопрос: как найти баланс между прозрачностью рассуждений (CoT) и эффективностью. Разработчики и исследователи боятся, что «скрытые рассуждения» убьют интерпретируемость. Но Heima демонстрирует возможность:
🥁 Минимум затрат во время главного ответа (модель «думает» внутри, порождая единичные токены),
🔎 Полный детальный вывод при необходимости (Heima Decoder умеет расшифровывать эти скрытые векторы обратно в CoT).
Из потенциальных трудностей: приходится поддерживать отдельную декодирующую подсистему, и надо следить, чтобы «thinking tokens» действительно содержали релевантную информацию. Исследование показывает успех на ряде датасетов, но интересно было бы увидеть, как такой подход работает в более широком спектре задач, например, длинные разговоры или пошаговые инструкции.
В целом Heima задаёт новый вектор: «скрытое» CoT — это не просто трюк, а реальный путь к тому, чтобы LLM, будучи громоздкой, при этом не генерировала лишние сотни токенов и оставалась интерпретируемой по запросу.
📝 Ссылки и исходный код
- Репозиторий: github.com/shawnricecake/Heima