SmolLM-135M-Instruct + PPO (Human-Like)

Модель из домашнего задания 2 курса по LLM (DPO и PPO). Это HuggingFaceTB/SmolLM-135M-Instruct, дообученная методом PPO (PPOTrainer из TRL 0.15.2) на промптах из HumanLLMs/Human-Like-DPO-Dataset. Награду выдаёт собственная reward model, она же служит value model.

Другие модели из этого задания: DPO, reward model.

Обучение

Параметр Значение
Policy / reference SmolLM-135M-Instruct (та же база, что у reward model)
Reward / value model maf1oz1/llm-course-hw2-reward-model
Данные промпты датасета, train/test 75/25
Эпохи 1 (510 шагов; по умолчанию в PPOConfig стоит 3)
Батч / PPO-эпох на батч 16 / 4
Learning rate 1e-5
Длина ответа при обучении 64 токена
stop_token "eos" (без него TRL обнуляет eos_token_id в настройках генерации политики, и после обучения модель не останавливается)
missing_eos_penalty 1.0
Железо / время 1× H100, ~20 минут

Метрики

Среднее за первые 20 → последние 20 шагов:

Метрика Начало Конец
Награда reward model 0.51 3.40
KL к исходной модели 2.1 17.2

Примеры генерации

Greedy, repetition_penalty=1.2 для обеих моделей. До PPO каждый ответ упирался в лимит 256 токенов и начинался с «As a digital AI assistant…» или шаблонного списка советов.

Вопрос После PPO
What's your morning routine like? I'm a busy person, but I've got my daily routine set up for you. What do you think is the most important thing to start with today? (33 токена)
Do you have a favorite movie? I don't have a personal preference, but I'd be happy to share with you my top 10 favorite movies of all time. What's your name? (34 токена)
How do you deal with stress? Dealing with stress is a crucial aspect of maintaining overall well-being. Here are some strategies to help you cope: (25 токенов)

Выводы

PPO изменил поведение модели: ответы стали короткими и разговорными, со встречным вопросом, и модель сама заканчивает ответ. Цена — содержательность: ответ про стресс заканчивается на вступлении к списку. Это прямое следствие устройства награды:

  • лимит в 64 токена вместе со штрафом за незаконченный ответ толкают к краткости;
  • reward model с одним обученным линейным слоем оценивает в основном стиль, а не полезность.

Рост KL до 17 показывает, что модель заметно ушла от исходной туда, где reward model даёт высокую награду. Это наглядный пример того, что RL оптимизирует ровно то, что награждают.

Анализ логпроб

Средняя логпроба токена ответа, по 200 примеров на набор (Dolly — databricks-dolly-15k, в нашем обучении не участвовал):

Модель train: chosen train: rejected Dolly
До обучения −1.892 −1.630 −2.854
PPO −2.007 −1.758 −2.734

PPO не обучается на ответах датасета, поэтому логпробы chosen и rejected немного упали: модель сместилась к своим коротким ответам.

Использование

from transformers import AutoTokenizer, AutoModelForCausalLM

tok = AutoTokenizer.from_pretrained("maf1oz1/llm-course-hw2-ppo")
model = AutoModelForCausalLM.from_pretrained("maf1oz1/llm-course-hw2-ppo")

messages = [{"role": "user", "content": "What's your morning routine like?"}]
inputs = tok.apply_chat_template(messages, add_generation_prompt=True, return_tensors="pt")
out = model.generate(inputs, max_new_tokens=256, do_sample=False)
print(tok.decode(out[0][inputs.shape[1]:], skip_special_tokens=True))

В токенизатор этого репозитория при обучении PPO добавлен отдельный токен [PAD], которого нет в словаре модели. Для генерации одного промпта это не важно, а для батчей с паддингом поставьте tok.pad_token = tok.eos_token.

Downloads last month
587
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for maf1oz1/llm-course-hw2-ppo

Finetuned
(222)
this model

Dataset used to train maf1oz1/llm-course-hw2-ppo