Chain-of-Thought → Tree-of-Thought. Техника для повышения качества ответа...
Chain-of-Thought → Tree-of-Thought
Техника для повышения качества ответа LLM’ок под названием Chain-of-Thought (CoT), пришедшая, кажется, из работы “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models” (https://arxiv.org/abs/2201.11903), давно вошла в арсенал промпт инженеров (патентованная технология, между прочим, https://patents.google.com/patent/US20230244938A1/en). В двух словах она заключается в том, чтобы попросить модель не сразу выдать результат, а сначала сгенерировать последовательность промежуточных шагов и лишь затем выдать финальный результат. Можно сочетать с few-shot learning, давая демонстрационные примеры.
Неожиданным образом, качество ответа повышается, особенно это заметно на математических задачах, commonsense и symbolic reasoning. Кроме того, дополнительными бонусами являются большая прозрачность принятия решения и интерпретируемость. В оригинальной работе показали, что CoT это эмерджентное свойство, начинающее проявляться с размера модели в районе 100B.
Дополнительная техника декодирования под названием Self-Consistency из работы “Self-Consistency Improves Chain of Thought Reasoning in Language Models” (https://arxiv.org/abs/2203.11171) заменяет жадное декодирование на создание нескольких цепочек CoT и в конце выбор наиболее консистентного ответа, который определяется мажоритарным голосованием. Этот подход CoT-SC иногда также называется Multiple CoTs, причём чем больше этих цепочек, тем лучше, в работе доходили до 40 штук.
Популярное изложение CoT и немного CoT-SC тут https://blog.research.google/2022/05/language-models-perform-reasoning-via.html.
Но это было в начале 2022-го. С тех пор появились более продвинутые подходы. Один из них, это Tree-of-Thoughts (ToT), появившийся с разницей в два дня в двух работах: “Large Language Model Guided Tree-of-Thought” (https://arxiv.org/abs/2305.08291) и “Tree of Thoughts: Deliberate Problem Solving with Large Language Models” (https://arxiv.org/abs/2305.10601).
Теперь процесс вывода представлен деревом, а не цепочкой. И модель может делать backtracking, если вывод ушёл не туда.
Идея этих работ в том, что мыслительный процесс не линеен, это скорее похоже на хождение по дереву -- пробуем одну ветвь, обнаруживаем что не работает, отка(т/з)ываемся и пробуем другую. Это подразумевает множество раундов взаимодействия между LLM и агентом, дающим промпты.
Эти подходы уже не чистый промпт инжиниринг, одним текстом тут не обойдёшься, надо писать какие-то программы, управляющие процессом. В этом смысле это уже в парадигме LLM Programs (https://t.me/gonzo_ML/1584).
I) Начнём с первой работы от Jieyi Long из Theta Labs.
В данной постановке есть LLM, получающая промпты и выдающая ответы. Есть prompter agent, в который прилетает исходная задача от пользователя. Он выдаёт промпты в LLM и пытается получить от неё не финальное решение, а какое-то промежуточное. Специальный проверочный модуль (checker module) проверяет валидность промежуточного решения, полученного от LLM. Если проверка корректности проходит, это промежуточное решение парсится и сохраняется в памяти. Затем в зависимости от содержимого памяти prompter agent генерирует следующий промпт с целью получить от LLM следующий шаг. Если же от LLM приходит невалидный ответ, то ToT controller попросит prompter дать модели нужные подсказки и запросить решение снова. Также ToT controller отслеживает прогресс и решает, не нужно ли откатиться к родительскому узлу дерева или к более далёкому предку.
То есть стратегию ToT можно представить как алгоритм поиска по дереву, использующий LLM как эвристику для выбора шагов поиска. LLM используется для задач “short-range reasoning”, получения следующего промежуточного решения. Задачи такого типа в целом решаются LLM неплохо. Возможность откатываться к предыдущим промежуточным решениям улучшает способности к “long-range reasoning”, потому что система может исследовать большее пространство решений. А возможность выполнять многошаговые взаимодействия увеличивает число вычислительных шагов, которые может сделать система.
Техника для повышения качества ответа LLM’ок под названием Chain-of-Thought (CoT), пришедшая, кажется, из работы “Chain-of-Thought Prompting Elicits Reasoning in Large Language Models” (https://arxiv.org/abs/2201.11903), давно вошла в арсенал промпт инженеров (патентованная технология, между прочим, https://patents.google.com/patent/US20230244938A1/en). В двух словах она заключается в том, чтобы попросить модель не сразу выдать результат, а сначала сгенерировать последовательность промежуточных шагов и лишь затем выдать финальный результат. Можно сочетать с few-shot learning, давая демонстрационные примеры.
Неожиданным образом, качество ответа повышается, особенно это заметно на математических задачах, commonsense и symbolic reasoning. Кроме того, дополнительными бонусами являются большая прозрачность принятия решения и интерпретируемость. В оригинальной работе показали, что CoT это эмерджентное свойство, начинающее проявляться с размера модели в районе 100B.
Дополнительная техника декодирования под названием Self-Consistency из работы “Self-Consistency Improves Chain of Thought Reasoning in Language Models” (https://arxiv.org/abs/2203.11171) заменяет жадное декодирование на создание нескольких цепочек CoT и в конце выбор наиболее консистентного ответа, который определяется мажоритарным голосованием. Этот подход CoT-SC иногда также называется Multiple CoTs, причём чем больше этих цепочек, тем лучше, в работе доходили до 40 штук.
Популярное изложение CoT и немного CoT-SC тут https://blog.research.google/2022/05/language-models-perform-reasoning-via.html.
Но это было в начале 2022-го. С тех пор появились более продвинутые подходы. Один из них, это Tree-of-Thoughts (ToT), появившийся с разницей в два дня в двух работах: “Large Language Model Guided Tree-of-Thought” (https://arxiv.org/abs/2305.08291) и “Tree of Thoughts: Deliberate Problem Solving with Large Language Models” (https://arxiv.org/abs/2305.10601).
Теперь процесс вывода представлен деревом, а не цепочкой. И модель может делать backtracking, если вывод ушёл не туда.
Идея этих работ в том, что мыслительный процесс не линеен, это скорее похоже на хождение по дереву -- пробуем одну ветвь, обнаруживаем что не работает, отка(т/з)ываемся и пробуем другую. Это подразумевает множество раундов взаимодействия между LLM и агентом, дающим промпты.
Эти подходы уже не чистый промпт инжиниринг, одним текстом тут не обойдёшься, надо писать какие-то программы, управляющие процессом. В этом смысле это уже в парадигме LLM Programs (https://t.me/gonzo_ML/1584).
I) Начнём с первой работы от Jieyi Long из Theta Labs.
В данной постановке есть LLM, получающая промпты и выдающая ответы. Есть prompter agent, в который прилетает исходная задача от пользователя. Он выдаёт промпты в LLM и пытается получить от неё не финальное решение, а какое-то промежуточное. Специальный проверочный модуль (checker module) проверяет валидность промежуточного решения, полученного от LLM. Если проверка корректности проходит, это промежуточное решение парсится и сохраняется в памяти. Затем в зависимости от содержимого памяти prompter agent генерирует следующий промпт с целью получить от LLM следующий шаг. Если же от LLM приходит невалидный ответ, то ToT controller попросит prompter дать модели нужные подсказки и запросить решение снова. Также ToT controller отслеживает прогресс и решает, не нужно ли откатиться к родительскому узлу дерева или к более далёкому предку.
То есть стратегию ToT можно представить как алгоритм поиска по дереву, использующий LLM как эвристику для выбора шагов поиска. LLM используется для задач “short-range reasoning”, получения следующего промежуточного решения. Задачи такого типа в целом решаются LLM неплохо. Возможность откатываться к предыдущим промежуточным решениям улучшает способности к “long-range reasoning”, потому что система может исследовать большее пространство решений. А возможность выполнять многошаговые взаимодействия увеличивает число вычислительных шагов, которые может сделать система.
Источник: gonzo-обзоры ML статей
2023-09-24 16:52:57