Accessing GPT-4 level Mathematical Olympiad Solutions via Monte Carlo Tree Self-refine with LLaMa-3 8B: A Technical Report
Работа китайских учёных по скрещиванию LLM и метода Монте-Карло для поиска по дереву для решения математических задач. По сути, это попытка привести работу LLM к виду, аналогичному AlphaGo — системе, выигравшей человека в игру, в которой огромное пространство поиска ходов (и из-за этого считалось, что компьютер никогда не сможет обыграть нас). Этот процесс полностью автономен и не зависит от человека.
Исследователи предложили следующий процесс. Используется маленькая шустрая LLAMA-3 на 8B параметров, и нигде ниже в описании она не дообучается. Далее:
1. Модель генерирует начальные решение (рассуждение) и ответ на задачу. К этому параллельно добавляется ответ в духе «я не могу это решить» (если вдруг первое решение уж совсем неправильное). Такие два варианта называются «исходным набором».
2. Далее для каждого ответа модель через промпт оценивает его качество от -100 до 100 (правда, краевые значения обрезаются, так как LLM любит ставить максимальную оценку, не оставляя пространства для улучшений).
3. Выбирается ответ (+решение) с максимальной оценкой.
4. Через другой промпт LLM просят дать критику решения, что в нём не так, что можно было бы улучшить. На основе этой критики и выбранного решения модель генерирует новое (зачастую отличающееся).
5. Новое решение проходит оценку от -100 до 100 (как в пункте 2) — всё той же LLM'кой. Однако авторы замечают, что если делать оценку всего один раз, то получается очень неточный результат, поэтому для каждого сгенерированного решения статистика будет накапливаться. Каждый раз, когда мы генерируем решение по критике нескольких предшествующих, мы считаем оценку и для них (как бы для «родителей» этого решения). И оценка каждого решения — это среднее между минимальной оценкой и средней оценкой для данного решения. Получается как бы баланс между худшим и средним сценарием.
6. После этого происходит обновление оценок всех родительских решений (тех, которые подавались в LLM как история решений, вместе с критикой). Возможно, тут у вас уже закипел котелок и вы думаете «чё происходит?». Легче всего представить структуру как дерево — каждое решение это ветка, и ветки могут отходить друг от друга. Если одно решение участвовало в генерации другого — значит, второе как ветка отрастает от первого (см. картинки ниже). И вот когда мы оценили одну финальную веточку, нужно сделать так, чтобы все ветки, на которые она опирается, учитывали её. Для этого пересчитывается значение оценки всех родителей как среднее между их текущей оценкой (из пункта 5) и максимума всех дочерних веток.
7. Цикл повторяется с пункта 3. Ищем самую перспективную ветку, генерируем оцениваем, обновляем. Шаги обновления (5-6) очень важны — по сути, они динамически задают направление поиска, позволяя отказываться от тупиковых решений, которые ну точно не правильные, и перенаправлять ресурсы к перспективным, оценённым высоко.
Конечно, я не описал все детали алгоритма (для этого читайте статью и смотрите код, хоть он и написан очень так себе), но постарался дать базовую идею, как из одного решения через рефлексию вырастает несколько новых, и как LLM постепенно приближается к правильному решению.
Самое удивительное — что 8B модель почти достигает результатов GPT-4 😨
🤔 а что будет, если вместо этого взять базовую модель получше, покрупнее? Ухххх, узнаем в следующем релизе!
Работа китайских учёных по скрещиванию LLM и метода Монте-Карло для поиска по дереву для решения математических задач. По сути, это попытка привести работу LLM к виду, аналогичному AlphaGo — системе, выигравшей человека в игру, в которой огромное пространство поиска ходов (и из-за этого считалось, что компьютер никогда не сможет обыграть нас). Этот процесс полностью автономен и не зависит от человека.
Исследователи предложили следующий процесс. Используется маленькая шустрая LLAMA-3 на 8B параметров, и нигде ниже в описании она не дообучается. Далее:
1. Модель генерирует начальные решение (рассуждение) и ответ на задачу. К этому параллельно добавляется ответ в духе «я не могу это решить» (если вдруг первое решение уж совсем неправильное). Такие два варианта называются «исходным набором».
2. Далее для каждого ответа модель через промпт оценивает его качество от -100 до 100 (правда, краевые значения обрезаются, так как LLM любит ставить максимальную оценку, не оставляя пространства для улучшений).
3. Выбирается ответ (+решение) с максимальной оценкой.
4. Через другой промпт LLM просят дать критику решения, что в нём не так, что можно было бы улучшить. На основе этой критики и выбранного решения модель генерирует новое (зачастую отличающееся).
5. Новое решение проходит оценку от -100 до 100 (как в пункте 2) — всё той же LLM'кой. Однако авторы замечают, что если делать оценку всего один раз, то получается очень неточный результат, поэтому для каждого сгенерированного решения статистика будет накапливаться. Каждый раз, когда мы генерируем решение по критике нескольких предшествующих, мы считаем оценку и для них (как бы для «родителей» этого решения). И оценка каждого решения — это среднее между минимальной оценкой и средней оценкой для данного решения. Получается как бы баланс между худшим и средним сценарием.
6. После этого происходит обновление оценок всех родительских решений (тех, которые подавались в LLM как история решений, вместе с критикой). Возможно, тут у вас уже закипел котелок и вы думаете «чё происходит?». Легче всего представить структуру как дерево — каждое решение это ветка, и ветки могут отходить друг от друга. Если одно решение участвовало в генерации другого — значит, второе как ветка отрастает от первого (см. картинки ниже). И вот когда мы оценили одну финальную веточку, нужно сделать так, чтобы все ветки, на которые она опирается, учитывали её. Для этого пересчитывается значение оценки всех родителей как среднее между их текущей оценкой (из пункта 5) и максимума всех дочерних веток.
7. Цикл повторяется с пункта 3. Ищем самую перспективную ветку, генерируем оцениваем, обновляем. Шаги обновления (5-6) очень важны — по сути, они динамически задают направление поиска, позволяя отказываться от тупиковых решений, которые ну точно не правильные, и перенаправлять ресурсы к перспективным, оценённым высоко.
Конечно, я не описал все детали алгоритма (для этого читайте статью и смотрите код, хоть он и написан очень так себе), но постарался дать базовую идею, как из одного решения через рефлексию вырастает несколько новых, и как LLM постепенно приближается к правильному решению.
Самое удивительное — что 8B модель почти достигает результатов GPT-4 😨
🤔 а что будет, если вместо этого взять базовую модель получше, покрупнее? Ухххх, узнаем в следующем релизе!