Channel: gonzo-обзоры ML статей
Training Large Language Models to Reason in a Continuous Latent Space
Shibo Hao, Sainbayar Sukhbaatar, DiJia Su, Xian Li, Zhiting Hu, Jason Weston, Yuandong Tian
Статья: https://arxiv.org/abs/2412.06769
Код: https://github.com/facebookresearch/coconut
Песня: https://www.youtube.com/watch?v=PKQPey6L42M
Статья, которую надо разобрать, про Coconut и ризонинг в латентном пространстве. Тем более даже Quanta уже написала, а мы всё нет.
📃TL;DR.
Идея проста: языковое пространство может быть не лучшим выбором для ризонинга через CoT (про CoT и ToT тут https://hottg.com/gonzo_ML/1885), и ризонинг можно делать не выходя в пространство токенов. Отсюда рождается Coconut (Chain Of CONtinUous Thought). Последнее скрытое состояние можно не декодировать в токен, а сразу подавать его на вход декодера в авторегрессионном процессе генерации как эмбеддинг для следующего шага.
💡Идея
Это интересный подход по нескольким причинам.
Во-первых, прогон всего ризонинга через токены создаёт узкое место. Из одного эмбеддинга могут быть сгенерированы разные токены, эквивалентные и не очень, и всё богатство оригинальной “мысли” может потеряться. Что если его не терять?
Дополнительный минус в том, что на каждый токен уходит одинаковый вычислительный бюджет, хотя токены неравнозначны. BLT (https://hottg.com/gonzo_ML/3109) отчасти решал эту проблему, но там и часть авторов та же, что у кокоса.
В общем, почему бы не попробовать ризонинг без языковых ограничений? Тем более, что, во-вторых, это соответствует некоторым данным по neuroimaging, когда в процессе ризонинга языковые области мозга не задействуются. В частности, одна из свежих работ (https://hottg.com/gonzo_ML/2797) говорит, что язык оптимизирован для коммуникации, а не для думания.
🛠Реализация
Она, как уже упоминалось в TL;DR, чрезвычайно проста. В процессе ризонинга мы не задействуем выходную голову модели и её слой эмбеддинга, а в качестве входного эмбеддинга на следующем шаге используем выходной эмбеддинг предыдущего шага.
LLM переключается между двумя режимами: языковым (language mode) и латентным (latent mode). Языковой режим — это стандартный режим для LLM с генерацией токенов. Латентный режим -- новый режим с переиспользованием эмбеддинга. Начало и окончание латентного режима обрамляется токенами <bot> и <eot>. Соответственно для всех токенов с индексами между индексами этих двух токенов включается новый режим. Весь процесс полностью дифференцируемый и позволяет обучать модель обычным бэкпропом.
Вопрос, где взять данные для такого обучения. Для этого берутся языковые данные для обычного CoT и реализуется мультиэтапный curriculum. На начальном этапе (stage) модель обучается обычному языковому CoT. На последующих этапах, для шага номер k, первые k шагов языкового размышления убираются, а внутри <bot>/<eot> тэгов появляются k позиций, в каждую из которых записываются эмбеддинги предыдущего шага. Состояние оптимизатора сбрасывается между отдельными этапами.
Во время обучения оптимизируется обычный negative log-likelihood loss, но маскируется и не учитывается лосс для вопроса и латентных мыслей (не буду кавычки каждый раз ставить вокруг слова мысль). Эта objective никак не стимулирует модель сжимать убираемые текстовые мысли, так что есть потенциал выучивания более эффективных репрезентаций ризонинга.
Для примера с N шагами рассуждения надо сделать N+1 forward pass. KV-кеш может помочь не пересчитывать одно и то же, но всё равно последовательная природа вычисления этих этапов не даёт эффективно распараллеливать весь процесс. Оптимизация является отдельным интересным направлением исследования, и я уверен, что за ней дело не станет.
При инференсе главный челлендж это решить, когда нужно уходить в латентный режим и выходить из него. С токеном <bot> всё просто, ставим сразу после вопроса, а для <eot> рассматриваются две стратегии: 1) обучить бинарный классификатор, решающий по эмбеддингу, когда надо переключаться, и 2) добивать паддингом латентные размышления до фиксированной длины. Оба подхода работают, так что по дефолту используют более простой второй.
🧪Оценка
Shibo Hao, Sainbayar Sukhbaatar, DiJia Su, Xian Li, Zhiting Hu, Jason Weston, Yuandong Tian
Статья: https://arxiv.org/abs/2412.06769
Код: https://github.com/facebookresearch/coconut
Песня: https://www.youtube.com/watch?v=PKQPey6L42M
Статья, которую надо разобрать, про Coconut и ризонинг в латентном пространстве. Тем более даже Quanta уже написала, а мы всё нет.
📃TL;DR.
Идея проста: языковое пространство может быть не лучшим выбором для ризонинга через CoT (про CoT и ToT тут https://hottg.com/gonzo_ML/1885), и ризонинг можно делать не выходя в пространство токенов. Отсюда рождается Coconut (Chain Of CONtinUous Thought). Последнее скрытое состояние можно не декодировать в токен, а сразу подавать его на вход декодера в авторегрессионном процессе генерации как эмбеддинг для следующего шага.
💡Идея
Это интересный подход по нескольким причинам.
Во-первых, прогон всего ризонинга через токены создаёт узкое место. Из одного эмбеддинга могут быть сгенерированы разные токены, эквивалентные и не очень, и всё богатство оригинальной “мысли” может потеряться. Что если его не терять?
Дополнительный минус в том, что на каждый токен уходит одинаковый вычислительный бюджет, хотя токены неравнозначны. BLT (https://hottg.com/gonzo_ML/3109) отчасти решал эту проблему, но там и часть авторов та же, что у кокоса.
В общем, почему бы не попробовать ризонинг без языковых ограничений? Тем более, что, во-вторых, это соответствует некоторым данным по neuroimaging, когда в процессе ризонинга языковые области мозга не задействуются. В частности, одна из свежих работ (https://hottg.com/gonzo_ML/2797) говорит, что язык оптимизирован для коммуникации, а не для думания.
🛠Реализация
Она, как уже упоминалось в TL;DR, чрезвычайно проста. В процессе ризонинга мы не задействуем выходную голову модели и её слой эмбеддинга, а в качестве входного эмбеддинга на следующем шаге используем выходной эмбеддинг предыдущего шага.
LLM переключается между двумя режимами: языковым (language mode) и латентным (latent mode). Языковой режим — это стандартный режим для LLM с генерацией токенов. Латентный режим -- новый режим с переиспользованием эмбеддинга. Начало и окончание латентного режима обрамляется токенами <bot> и <eot>. Соответственно для всех токенов с индексами между индексами этих двух токенов включается новый режим. Весь процесс полностью дифференцируемый и позволяет обучать модель обычным бэкпропом.
Вопрос, где взять данные для такого обучения. Для этого берутся языковые данные для обычного CoT и реализуется мультиэтапный curriculum. На начальном этапе (stage) модель обучается обычному языковому CoT. На последующих этапах, для шага номер k, первые k шагов языкового размышления убираются, а внутри <bot>/<eot> тэгов появляются k позиций, в каждую из которых записываются эмбеддинги предыдущего шага. Состояние оптимизатора сбрасывается между отдельными этапами.
Во время обучения оптимизируется обычный negative log-likelihood loss, но маскируется и не учитывается лосс для вопроса и латентных мыслей (не буду кавычки каждый раз ставить вокруг слова мысль). Эта objective никак не стимулирует модель сжимать убираемые текстовые мысли, так что есть потенциал выучивания более эффективных репрезентаций ризонинга.
Для примера с N шагами рассуждения надо сделать N+1 forward pass. KV-кеш может помочь не пересчитывать одно и то же, но всё равно последовательная природа вычисления этих этапов не даёт эффективно распараллеливать весь процесс. Оптимизация является отдельным интересным направлением исследования, и я уверен, что за ней дело не станет.
При инференсе главный челлендж это решить, когда нужно уходить в латентный режим и выходить из него. С токеном <bot> всё просто, ставим сразу после вопроса, а для <eot> рассматриваются две стратегии: 1) обучить бинарный классификатор, решающий по эмбеддингу, когда надо переключаться, и 2) добивать паддингом латентные размышления до фиксированной длины. Оба подхода работают, так что по дефолту используют более простой второй.
🧪Оценка
Тестируют подход на трёх датасетах с математическим (GSM8k) и логическим ризонингом (ProntoQA, и новый ProsQA).
Проверяют на предобученной GPT-2. Для математики используют две латентных мысли (c=2) на каждый шаг ризонинга, три этапа (stages, k=3) и обучают шесть эпох на первом этапе и три на остальных. На логике одна латентная мысль на шаг, шесть этапов, обучают пять эпох на этап.
В сравнении используются следующие бейзлайны:
1) обычный CoT с файнтюнингом модели на примерах
2) No-CoT, с обучением модели сразу выдавать ответ
3) iCoT, implicit CoT из https://arxiv.org/abs/2405.14838, который постепенно интернализировал промежуточные шаги рассуждений через последовательный файнтюнинг, там шаги по одному выбрасывались, а в Coconut вместо них появляются латентные шаги, что по идее даёт модели “подумать” побольше.
4) Pause token, когда между вопросом и ответом вставляются специальные токены <pause> (столько же, сколько continuous thoughts у кокоса) -- никакой цепочки размышлений тут нет, но дополнительные токены могут дать модели дополнительные вычислительные возможности.
Сам Coconut тоже проверяют в трёх режимах:
1) w/o curriculum без мультиэтапного обучения, сразу берутся данные с последнего этапа, где уже нет языковых мыслей, есть только латентные.
2) w/o thought с мультиэтапным обучением и постепенным убиранием языковых шагов рассуждения, но без использования непрерывных латентных мыслей -- по сути похоже на iCoT, но процедура обучения из Coconut
3) Pause as thought c заменой непрерывных мыслей на токены <pause> и сохранением мультиэтапной процедуры
🏁 Результаты
Coconut стабильно лучше LLM без CoT, и лучше CoT на логических задачах. На GSM8k обычный CoT лучше, но у Coconut растёт качество с увеличением числа мыслей на шаг (насыщения там не видно до двух мыслей на шаг, но в приложении попробовали три и там стало хуже, видимо из-за проблем в обучении, нужно что-то менять в процедуре).
Токенов у Coconut при этом меньше в разы.
Coconut с pause as thought в целом тоже неплохо работает, но обычный Coconut лучше.
На авторском датасете ProsQA, где предсказание следующего шага не очень помогает и надо планировать и искать по более сложному графу, обычный CoT не лучше No-CoT, зато Coconut или iCoT существенно улучшают ситуацию.
Без мультиэтапной процедуры с curriculum модель плохо выучивает ризонинг в латентном пространстве. В идеальном мире она бы сама выучила наиболее эффективные непрерывные мысли через бэкпроп, но чего-то не хватает.
Хоть Coconut и призван обходиться без перехода в пространство токенов, это по-прежнему можно делать, если хочется. В одном примере авторы декодировали первую непрерывную мысль и увидели там токены, которые ожидались в промежуточном рассуждении. Это прикольно в плане интерпретируемости.
🔍Анализ
У модели есть интересная возможность переключаться между ризонингом языковым и в латентном пространстве. Авторы дополнительно покопались в латентном ризонинге.
Проверили работу модели на датасете ProsQA с разным числом латентных мыслей, от нуля до шести. Разница здесь только в инференс тайме, модель одна и та же. Также дополнили мультиэтапную процедуру обучения, чтобы модель не забывала более ранние этапы, так что с вероятностью 0.3 замешиваются данные от других этапов.
Сделали более гранулярную классификацию качества ответа модели, теперь есть не просто корректность конечного ответа, а более детальные типы:
1) Correct Path — верный кратчайший путь в графе
2) Longer Path — верный, но не кратчайший
3) Hallucination — путь содержит несуществующие рёбра или несвязный
4) Wrong Target — путь валиден, но не к тому узлу
5) Correct Label и (6) Incorrect Label — для методов, где можно получить только финальный ответ
Ожидаемо, с увеличением количества непрерывных мыслей корректных результатов становится больше. Галлюцинации тоже уходят.
Проверяют на предобученной GPT-2. Для математики используют две латентных мысли (c=2) на каждый шаг ризонинга, три этапа (stages, k=3) и обучают шесть эпох на первом этапе и три на остальных. На логике одна латентная мысль на шаг, шесть этапов, обучают пять эпох на этап.
В сравнении используются следующие бейзлайны:
1) обычный CoT с файнтюнингом модели на примерах
2) No-CoT, с обучением модели сразу выдавать ответ
3) iCoT, implicit CoT из https://arxiv.org/abs/2405.14838, который постепенно интернализировал промежуточные шаги рассуждений через последовательный файнтюнинг, там шаги по одному выбрасывались, а в Coconut вместо них появляются латентные шаги, что по идее даёт модели “подумать” побольше.
4) Pause token, когда между вопросом и ответом вставляются специальные токены <pause> (столько же, сколько continuous thoughts у кокоса) -- никакой цепочки размышлений тут нет, но дополнительные токены могут дать модели дополнительные вычислительные возможности.
Сам Coconut тоже проверяют в трёх режимах:
1) w/o curriculum без мультиэтапного обучения, сразу берутся данные с последнего этапа, где уже нет языковых мыслей, есть только латентные.
2) w/o thought с мультиэтапным обучением и постепенным убиранием языковых шагов рассуждения, но без использования непрерывных латентных мыслей -- по сути похоже на iCoT, но процедура обучения из Coconut
3) Pause as thought c заменой непрерывных мыслей на токены <pause> и сохранением мультиэтапной процедуры
🏁 Результаты
Coconut стабильно лучше LLM без CoT, и лучше CoT на логических задачах. На GSM8k обычный CoT лучше, но у Coconut растёт качество с увеличением числа мыслей на шаг (насыщения там не видно до двух мыслей на шаг, но в приложении попробовали три и там стало хуже, видимо из-за проблем в обучении, нужно что-то менять в процедуре).
Токенов у Coconut при этом меньше в разы.
Coconut с pause as thought в целом тоже неплохо работает, но обычный Coconut лучше.
На авторском датасете ProsQA, где предсказание следующего шага не очень помогает и надо планировать и искать по более сложному графу, обычный CoT не лучше No-CoT, зато Coconut или iCoT существенно улучшают ситуацию.
Без мультиэтапной процедуры с curriculum модель плохо выучивает ризонинг в латентном пространстве. В идеальном мире она бы сама выучила наиболее эффективные непрерывные мысли через бэкпроп, но чего-то не хватает.
Хоть Coconut и призван обходиться без перехода в пространство токенов, это по-прежнему можно делать, если хочется. В одном примере авторы декодировали первую непрерывную мысль и увидели там токены, которые ожидались в промежуточном рассуждении. Это прикольно в плане интерпретируемости.
🔍Анализ
У модели есть интересная возможность переключаться между ризонингом языковым и в латентном пространстве. Авторы дополнительно покопались в латентном ризонинге.
Проверили работу модели на датасете ProsQA с разным числом латентных мыслей, от нуля до шести. Разница здесь только в инференс тайме, модель одна и та же. Также дополнили мультиэтапную процедуру обучения, чтобы модель не забывала более ранние этапы, так что с вероятностью 0.3 замешиваются данные от других этапов.
Сделали более гранулярную классификацию качества ответа модели, теперь есть не просто корректность конечного ответа, а более детальные типы:
1) Correct Path — верный кратчайший путь в графе
2) Longer Path — верный, но не кратчайший
3) Hallucination — путь содержит несуществующие рёбра или несвязный
4) Wrong Target — путь валиден, но не к тому узлу
5) Correct Label и (6) Incorrect Label — для методов, где можно получить только финальный ответ
Ожидаемо, с увеличением количества непрерывных мыслей корректных результатов становится больше. Галлюцинации тоже уходят.
Отдельный интересный результат в том, что Coconut с k=0, то есть когда он вынужден генерировать обычную языковую цепочку CoT без латентных мыслей (но уже с парой токенов <bot>/<eot>), качество выше, чем у CoT, меньше галлюцинирует. Видимо, помогает процедура обучения с замешиванием разных этапов (а может и пара дополнительных токенов тоже).
Латентный ризонинг можно интерпретировать как поиск по дереву, если опираться на интуицию, что непрерывные мысли могут содержать более одного шага рассуждения. Так, первая мысль кокоса может выбрать всех детей узла графа, следующая — детей детей. Получается похоже на поиск в ширину (BFS), но не равномерный, а с вероятностями или приоритетами. В работе посчитали эти вероятности для примеров, получается неявная value function для исследования графа. По ощущению тут где-то рядом MCTS. И вообще выглядит, что обучили не непрерывный CoT, а непрерывный ToT.
По полученным вероятностям можно оценить степень параллелизма мыслей, если смотреть на кумулятивные значения top-1/2/3 кандидатов. У первых мыслей такой параллелизм (разница между линиями для top-1/top-2/top-3) выше, чем у вторых.
Латентное рассуждение позволяет модели отложить выбор конкретных слов и «обдумывать» варианты глубже по дереву поиска, оценивая узлы уже у самых листьев, где ошибочные пути легко выявить. Экспериментально видно, что уверенность модели обратно пропорциональна высоте узла: на малых высотах она чётко отделяет правильные варианты от неправильных, тогда как на больших это различие размывается — поэтому планирование в непрерывном латентном пространстве оказывается выгодным.
---
Интересный подход, он сильно перекликается с LCM (https://hottg.com/gonzo_ML/3149), только в LCM сразу работали на уровне отдельных больших мыслей-предложений, а здесь скорее избавляются от токенов для промежуточных вычислений. Наверное, где-то посередине есть подход с латентными концептами для объектов, действий и свойств, пока вроде не видел такого. Верю глобально в это направление с латентным ризонингом и латентным всем. Thought vector is a thing.
In the meantime, прослушайтепение дрозда песню из шапки.
Латентный ризонинг можно интерпретировать как поиск по дереву, если опираться на интуицию, что непрерывные мысли могут содержать более одного шага рассуждения. Так, первая мысль кокоса может выбрать всех детей узла графа, следующая — детей детей. Получается похоже на поиск в ширину (BFS), но не равномерный, а с вероятностями или приоритетами. В работе посчитали эти вероятности для примеров, получается неявная value function для исследования графа. По ощущению тут где-то рядом MCTS. И вообще выглядит, что обучили не непрерывный CoT, а непрерывный ToT.
По полученным вероятностям можно оценить степень параллелизма мыслей, если смотреть на кумулятивные значения top-1/2/3 кандидатов. У первых мыслей такой параллелизм (разница между линиями для top-1/top-2/top-3) выше, чем у вторых.
Латентное рассуждение позволяет модели отложить выбор конкретных слов и «обдумывать» варианты глубже по дереву поиска, оценивая узлы уже у самых листьев, где ошибочные пути легко выявить. Экспериментально видно, что уверенность модели обратно пропорциональна высоте узла: на малых высотах она чётко отделяет правильные варианты от неправильных, тогда как на больших это различие размывается — поэтому планирование в непрерывном латентном пространстве оказывается выгодным.
---
Интересный подход, он сильно перекликается с LCM (https://hottg.com/gonzo_ML/3149), только в LCM сразу работали на уровне отдельных больших мыслей-предложений, а здесь скорее избавляются от токенов для промежуточных вычислений. Наверное, где-то посередине есть подход с латентными концептами для объектов, действий и свойств, пока вроде не видел такого. Верю глобально в это направление с латентным ризонингом и латентным всем. Thought vector is a thing.
In the meantime, прослушайте
arXiv.org
Training Large Language Models to Reason in a Continuous Latent Space
Large language models (LLMs) are restricted to reason in the "language space", where they typically express the reasoning process with a chain-of-thought (CoT) to solve a complex reasoning...
Just in case, бахнул авторазбор статьи про iCoT (https://arxiv.org/abs/2405.14838), которую упоминали в разборе Coconut'а (https://hottg.com/gonzo_ML/3567). По мне так довольно полезно уже.
https://hottg.com/gonzo_ML_podcasts/117
https://hottg.com/gonzo_ML_podcasts/117
Telegram
gonzo_ML_podcasts
From Explicit CoT to Implicit CoT: Learning to Internalize CoT Step by Step
Yuntian Deng, Yejin Choi, Stuart Shieber
Статья: https://arxiv.org/abs/2405.14838
Код: https://github.com/da03/Internalize_CoT_Step_by_Step
Эта статья посвящена ключевой проблеме…
Yuntian Deng, Yejin Choi, Stuart Shieber
Статья: https://arxiv.org/abs/2405.14838
Код: https://github.com/da03/Internalize_CoT_Step_by_Step
Эта статья посвящена ключевой проблеме…
Работы, на которые надо обратить внимание
https://blog.iclr.cc/2025/04/22/announcing-the-outstanding-paper-awards-at-iclr-2025/
https://blog.iclr.cc/2025/04/22/announcing-the-outstanding-paper-awards-at-iclr-2025/
Ну и раз мы сегодня про терминаторов, то вот есть прекрасный свежий THOUGHTTERMINATOR (https://hottg.com/gonzo_ML_podcasts/123), заставляющий ризонинг модели не уходить в слишком глубокие обдумывания. Как полагается, обзор тоже сделан терминатором.
HTML Embed Code: