RLHF [1] — фундаментальный метод алаймента языковых моделей, который применялся при обучении ChatGPT, LLama 2, Qwen 2.5 и т.д. Как известно RLHF очень требователен к ресурсам и чувствителен к гиперпараметрам. Сложность данного метода обоснована сложностью алгоритма PPO [2], который лежит в основе RLHF.
Статья Back to Basics [3] предлагает использовать более простой алгоритм REINFORCE для алаймента языковых моделей. Согласно результатам данной работы, данный алгоритм не только проще в реализации, но и показывает лучшие метрики, чем PPO.
Мы предлагаем вам реализовать алгоритм REINFORCE w/ baseline для алаймента языковых моделей. Обращаем ваше внимание, что вам не нужно реализовывать RLOO для подсчёта baseline, достаточно взять moving average.
-
SFT модель: Используйте
HuggingFaceTB/SmolLM2-135M-Instructв качестве SFT модели. -
Reward Model: Поверх SFT обучите Reward Model на парах из датасета
esfrankel17/HelpSteer2_binarized.- Разбейте
average_rting_splitна train и validation подвыборки - Рекомендуется использовать
RewardTrainerиз библиотекиtrl - Достаточно обучить одну эпоху
- Используйте learning rate = 5e-5, fp16
- Ограничьте максимальную длину так, чтобы избежать Out of Memory
- Рекомендуем куда-нибудь сохранить полученную RM
- Разбейте
-
REINFORCE: Реализуйте алгоритм REINFORCE w/ baseline из статьи, используя SFT и RM, полученные на предыдущих шагах.
- НЕ рекомендуется использовать
RLOOTrainerиз библиотекиtrl, так как реализация в нём отличается от алгоритма, описанного в статье - Bonus: в отчёте опишите почему именно
- Используйте batch size и количество итераций, которые позволяют ваши ресурсы
- В качестве baseline используйте moving average
- НЕ рекомендуется использовать
Вопрос: Выросла ли средняя награда на отложенной выборке (validation split) по сравнению c SFT моделью?
Предположим, что мы хотим обучить Reward Model, которая выдаёт не скалярную оценку, а распределение вероятности поверх дискретных оценок. Пусть оценка текста — натуральное число от 1 до 10, тогда RM выдаёт 10 чисел, каждое из которых — вероятность текста получить соответствующую оценку (соответственно сумма этих значений равна 1).
-
Функция потерь: Подумайте, как должна выглядеть функция потерь для обучения такой модели наград, если мы по-прежнему хотим максимизировать вероятность
$p(y_w \succ y_l | x)$ . -
Обучение RM: Обучите Reward Model с полученной функцией потерь на том же датасете пар.
-
Интеграция в REINFORCE:
- Придумайте, как данную модель интегрировать в алгоритм REINFORCE
- Какую дополнительную информацию мы можем использовать, если работаем с распределением над оценками?
- Как этот сигнал интерпретируется?
-
Обучение: Обучите REINFORCE поверх SFT с вероятностной RM. Используйте те же гиперпараметры, что использовали при обучении в Level 1.
Вопросы:
- Получилось ли улучшить качество алаймента?
- Как вы объясните полученный результат?
-
Анализ результатов: Проанализируйте полученные результаты. Это самый важный пункт, потому что хочется увидеть не только числа с полученными метриками. Как вы объясняете увиденное поведение? Напишите отчет о проведенных экспериментах. Что получилось? Что нет?
-
Исследовательский подход: Нет правильного способа решить задачу. Не стоит беспокоиться, что вы делаете что-то неправильно. Мы хотим увидеть ваши способности к исследованиям, а не какое-то конкретное решение задачи. Возможно, вы придумаете то, о чем мы даже не задумывались изначально – это будет высший класс.
-
Достоверность: Убедитесь, что результатам можно доверять. Исключите вариант случайности, etc.
-
Ресурсы: Вы можете использовать Google Colab или Kaggle Code, чтобы получить доступ к бесплатным вычислительным ресурсам.
-
Оформление:
- Присылайте решение в виде репозитория на github с отчетом по решению и чёткими инструкциями, как запустить ваш код
- Убедитесь, что мы сможем запустить ваше решение по этим инструкциям
- Вы можете использовать любые библиотеки и фреймворки, которые вам могут быть необходимы
-
Качество кода: Сфокусируйтесь на том, чтобы код был чист и понятен. Если вы считаете, что какая-то его часть может быть непонятна, то добавьте комментарии. Мы очень сильно ценим хорошо написанный код, поэтому если решение задачи будет оформлено грязно, то мы можем отклонить заявку.
[1] Ouyang et al, Training language models to follow instructions with human feedback
[2] Schulman et al, Proximal Policy Optimization Algorithms
[3] Ahmadian et al, Back to Basics: Revisiting REINFORCE Style Optimization for Learning from Human Feedback in LLMs