Привет, Хабр!
Меня зовут Роман, я NLP-инженер в Сбере. Занимаюсь мультиагентными системами и работаю с LLM в проде. Сегодня расскажу про одну из самых интересных статей июня по версии Huggingface Daily Papers — Reflect, Retry, Reward: Self-Improving LLMs via Reinforcement Learning.

TL;DR

Авторы предлагают простой, но мощный метод: если первая попытка модели провалилась, она должна написать краткую саморефлексию, а затем сделать повторную попытку. Если она успешна — награду получают только токены саморефлексии.

Для этого используется модифицированный GRPO (Group Relative PPO), где все токены, кроме self-reflection, маскируются. Оценка правильности — через бинарный верификатор, которому не нужен ground truth.

Итог: максимальный прирост 18.1 п.п. на tool-calling задачах (APIGen) и 34.7 п.п. на арифметике (Countdown). Для 1.5–7 B моделей техника работает наиболее впечатляюще: они превосходят по качеству >70B модели. Без катастрофического забывания и с затратой ≈ 2 тысячи RL-шагов на 4–8 × H100.

Что сделали

Что это дало

Сколько стоило

Маскированный GRPO → reward только токенам self reflection

APIGen +18 p.p. (Qwen-2 1.5 B), Countdown +34 p.p. (Qwen-2.5-1.5 B)

1 750 шагов, 256 фейлов/батч, 4–8 × H100

При всей простоте метод закрывает проблему при работе с маленькими моделями, строгим форматом и отсутствием датасета с полной разметкой.

Зачем всё это нужно?

В таких задачах как Tool / API-calling в фиксированном формате, генерация кода и подобных изменение одного символа в ответе может привести к неверному решению. И именно здесь проявляется сразу несколько «узких мест», которые авторы пытаются устранить.

В реальном процессе для таких задач мы можем встроить бинарный верификатор (например, проверка корректности json). Задача состоит в том, чтобы поставить ответу метку «верно/неверно», при этом правильный ответ знать необязательно.

Основная идея подхода — отдать награду только там, где она действительно влияет на ответ. Модель формулирует краткую саморефлексию после ошибки. Бинарный верификатор оценивает, привела ли эта мысль ко второму успешному решению. Если да — положительный градиент получает только текст рефлексии. Так мы превращаем каждую прод-ошибку в обучающий пример без ручной разметки. Не рискуем переобучить модель на конкретных числах или аргументах — лишь улучшаем её умение анализировать собственные ошибки.

Таким образом, бинарный верификатор становится бесплатным поставщиком данных для постоянного самообучения модели — без разметки людей.

Как это работает?

  1. Модель делает первую попытку решить задачу.

  2. Если провал — она генерирует короткую рефлексию.

  3. Снова пробует — с рефлексией и первой попыткой в контексте.

  4. Если вторая попытка успешна → reward получают только токены рефлексии.

Модель учится анализировать ошибки, а не просто угадывать ответ. Это позволяет дообучаться даже без разметки и не ломать знания на других задачах.

Формально, GRPO-advantage вычисляют так:

Обозначение

Смысл

t

Позиция (токен) в сгенерированной последовательности.

r_i

Бинарный reward для всей i-й попытки от верификатора

r_group

Средний reward внутри текущего мини-батча (или «группы») сэмплов.

Пример работы на математическом примере:

Датасеты

Датасет

Train / Test

Чекер

После фильтра «fail-only»

APIGen

48 k / 12 k

JSON-эквивалент

25 382 примера

Countdown

435 k / 15 k

eval target ∧ uses_all_nums

14 911 примёров

Для каждого запроса сэмплировали около 64 ответов, сохранили только ошибочные ответы перед основным прогоном для экономии ресурсов.

Эксперименты

Основной метрикой рассмотрим изменение точности между «сырой» моделью (vanilla pass@2) и обученной с предложенной техникой (RL pass@2).

Датасет

Валидатор

Модели (1.5–7 B)

pass@2 vs RLpass@2

APIGen 60k

JSON-эквивалент

Qwen-2, Llama-3.1, Phi-3.5

+9 п.п. в среднем

Countdown 450k

eval target & uses_all_nums

Qwen-2.5, Llama 3.x, Palmyra

+16 п.п. в среднем

Для маленьких моделей средний прирост особенно впечатляет. Относительно простая (но нельзя сказать, что недорогая — 8 x H100 есть не у всех) техника очень сильно добавляет процентные пункты.

Количественные результаты

Здесь я оставил маленькие модели, потому что они представляют наибольший практический интерес. Для больших моделей несложно предложить более эффективную технологию повышения качества (по крайней мере на этих двух датасетах), а дообучение в сравнении с маленькими моделями сильно дороже.

Function Calling (APIGen, 12k):

Модель

P@1 van

P@1 RRR

Δ @1

P@2 van

P@2 RRR

Δ @2

Qwen-2 1.5B

32.6 %

48.6 %

+16.0

34.8 %

52.9 %

+18.1

Qwen-2 7B

66.4 %

72.2 %

+5.8

69.4 %

77.3 %

+7.9

Llama-3.1 8B

64.9 %

68.7 %

+3.8

70.9 %

74.9 %

+4.0

Math Countdown (15 k)

Модель

P@1 van

P@1 RRR

Δ @1

P@2 van

P@2 RRR

Δ @2

Qwen-2.5 1.5B

6.0

34.9

+28.9

10.2

45.0

+34.8

Qwen-2.5 3B

18.8

39.7

+20.9

29.0

47.3

+18.3

Qwen-2.5 7B

31.7

43.4

+11.7

38.0

50.3

+12.3

Llama-3.1 8B

2.2

4.6

+2.3

8.8

17.8

+9.0

Видно, что после применения авторского подхода растет качество при первом проходе. Это полезно, потому что в прод-решении мы хотим минимизировать количество вызовов модели для получения финального решения (минимизация расходов).

Ключевые наблюдения и анализ ошибок

Vanilla рефлексии — длинные, многословные, дублируют промпты. После GRPO — в 2–3 раза короче, без повторов, прямо указывают ошибку.
Лучшая единичная дельта — +34.8 п.п. (10.2 % → 45.0 %) у Qwen-2.5-1.5 B на Countdown. 
Qwen-2-7B Instruct после Reflect, Retry, Reward опережает Qwen-2-72B Instruct (в 10 раз больше!) без обучения на tool-calling (77.3 % vs 73.7). 

Катастрофического забывания нет: MMLU-Pro, GSM8K, HellaSwag, MATH просели не более чем на 1 п.п.

APIGen: у 1.5 B-модели ошибки выбора инструмента падают с 33.9% до 21.3%. Countdown: у той же 1.5 B-модели доля «неправильных чисел» снижается с 73.7% до 34.3%.

Better Self-Reflections

Размышления моделей без дообучения длинные и избыточные, а дообученные генерируют более короткие и обобщаемые размышления.

Гиперпараметры

Параметр

Значение

Комментарий

LR

5 × 10⁻⁷

выше — взрыв KL, ниже — не сходится

KL коэфф.

1 × 10⁻³

удерживает дивергенцию ≈ 0.3 nats

Scheduler

cosine + 0.03 warm-up ration

мягкий старт

Batch

256 ошибочных сэмплов

оптимум для GRPO-rank на 8 × H100

Шаги

1 750

реальная сходимость (по указанию авторов) быстрее

Ресурсы

4–8 × H100

-

Параметры не вызывают особых вопросов, можно обратить внимание на вычислительные ресурсы. Может показаться, что кластер 4-8 x H100 не выглядит бюджетным, но тут важно отметить, что эти ресурсы нам нужны только на этапе дообучения. Для инференса маленьких моделей, на которые авторы делают акцент в своей работе, необходимо гораздо меньше ресурсов (в пересчете на один инстанс модели).

Ограничения

Метод требует бинарного верификатора. Для более сложных задач может понадобиться judge-LLM, что может требовать дополнительных ресурсов. И так как judge-LLM должна быть сильнее, чем базовая модель, то тут подход уже выходит за рамки бюджетного. Во время инференса придется либо разворачивать вторую (более тяжелую) модель, либо тратить деньги (и жертвовать приватностью) на API.

При этом GRPO-обучение крупных моделей (> 8B) осложняется вычислительной эффективностью.

Вывод

Обучая модель улучшать саморефлексию, а не конкретный ответ. Авторы достигают значительного прироста на задачах APIGen и Countdown без катастрофического забывания и демонстрируют, что меньшие модели (1.5–7 B) после RRR обгоняют 10× более крупные «сырые» модели. Метод требует лишь бинарного верификатора, что делает его применимым там, где проверка ответа проста.

Подход действительно интересный, хотя и кажется достаточно простым. Лично мне хотелось бы еще увидеть сравнения с обычным GRPO без рефлексии. Хочется точно увидеть, что мы не получим такой же прирост без дополнительной рефлексии от модели.

Еще фиксация только на двух датасетах (двух достаточно узких типах задач) кажется недостаточной. Можно попробовать как в недавней Absolute Zero: Reinforced Self-play Reasoning with Zero Data более сильной моделью генерировать задачи и проверять эту синтетику бинарным верификатором. В прод-решении мы можем генерировать синтетику на основе реальных логов, получая доступ к более сильной модели по API, либо (для приватности) поднимать более тяжелую модель на тех же 4-8 x H100.

Спасибо, что дочитали! Пишите свои мысли в комментарии


Автор статьи: Потемин Роман, магистрант AI Talent Hub.

Комментарии (0)