RLHF для выравнивания LLM: от SFT до PPO
Вы дообучили LLM на инструкциях — модель корректно заполняет шаблоны, но выдает откровенно вредные или бесполезные ответы в сложных сценариях. Многие сталкиваются с такой ситуацией. SFT (Supervised Fine-Tuning) не учит модель расставлять приоритеты между качеством, безопасностью и стилем. Мы специализируемся на RLHF — технике alignment tuning, которая решает эту проблему, выравнивая модель с бизнес-требованиями через человеческую обратную связь. Наш опыт включает проекты для финансового сектора, медицинской диагностики и юридических ассистентов, где точность и безопасность критичны. Гарантируем, что итоговая модель будет не только умной, но и полезной, безвредной и честной. Наша компания работает на рынке более 5 лет и имеет более 50 успешных проектов в области RLHF.
Почему RLHF превосходит SFT?
SFT на инструкциях даёт модель, которая умеет следовать формату. Но не умеет расставлять приоритеты между качеством ответов. RLHF добавляет сигнал предпочтения: ответ A лучше ответа B по критериям полезности/безопасности/стиля. Этот сигнал нельзя выразить через cross-entropy loss.
Без RLHF: модель оптимизирует правдоподобие следующего токена. С RLHF: оптимизирует reward от human proxy (reward model), удержанный KL-дивергенцией от SFT baseline.
Как устроен пайплайн RLHF?
SFT: начальная настройка
Fine-tuning базовой LLM на (prompt, quality_response) парах. Датасет: 10K–100K примеров качественных демонстраций.
from trl import SFTTrainer from transformers import AutoModelForCausalLM, TrainingArguments model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3-8B") trainer = SFTTrainer( model=model, train_dataset=dataset, dataset_text_field="text", max_seq_length=2048, args=TrainingArguments( output_dir="./sft-output", per_device_train_batch_size=4, gradient_accumulation_steps=8, learning_rate=2e-5, num_train_epochs=3, bf16=True ) ) trainer.train() LoRA для SFT: PEFT/LoRA снижает требования к памяти с ~160 GB (70B full fine-tune) до ~40 GB (QLoRA 4-bit). r=64, alpha=128, target_modules=["q_proj","v_proj","k_proj","o_proj","gate_proj","up_proj","down_proj"].
Reward Model: обучение предпочтениям
Reward Model (RM) принимает (prompt, response) → скаляр reward. Обучается на парных сравнениях.
Датасет сравнений: Аннотаторы оценивают пары ответов (y_w, y_l) — chosen/rejected. Источники: Anthropic HH-RLHF, OpenAI comparisons dataset, Alpaca Farm. Для домена — внутренние аннотаторы.
Архитектура RM: LLM с добавленной regression head (linear layer на [EOS] токене):
from trl import RewardTrainer, RewardConfig # базовая модель = SFT модель reward_model = AutoModelForSequenceClassification.from_pretrained( "sft-output", num_labels=1 # скаляр reward ) reward_trainer = RewardTrainer( model=reward_model, train_dataset=comparison_dataset, # chosen/rejected pairs args=RewardConfig( output_dir="./reward-model", per_device_train_batch_size=4, gradient_accumulation_steps=4, learning_rate=1e-5, max_length=512 ) ) Bradley-Terry loss: L = -log(sigmoid(r(y_w) - r(y_l))). Оптимизирует: reward выбранного ответа > reward отклонённого.
Метрики качества RM: Accuracy на held-out comparison dataset. Целевые значения: >70% (базовый), >75% (хороший), >80% (отличный). Выше 85% — риск overfitting на аннотаторский bias.
PPO: оптимизация с подкреплением
Proximal Policy Optimization оптимизирует LLM (policy) для максимизации reward при KL-ограничении:
Objective = E[r_θ(prompt, response)] - β * KL(π_θ || π_SFT) β — коэффициент KL penalty. При β=0 — pure RL, модель может коллапсировать в reward hacking. При β слишком высоком — не отходит от SFT.
from trl import PPOTrainer, PPOConfig, AutoModelForCausalLMWithValueHead ppo_config = PPOConfig( model_name="sft-output", learning_rate=1.41e-5, batch_size=128, mini_batch_size=16, gradient_accumulation_steps=1, ppo_epochs=4, kl_penalty="kl", init_kl_coef=0.2, # начальный β target_kl=6.0, # адаптивная KL цель adap_kl_ctrl=True # автоматическая коррекция β ) ppo_trainer = PPOTrainer( config=ppo_config, model=AutoModelForCausalLMWithValueHead.from_pretrained("sft-output"), ref_model=ref_model, # замороженный SFT reference tokenizer=tokenizer, reward_model=reward_model, dataset=prompt_dataset ) for batch in ppo_trainer.dataloader: queries, responses = ppo_trainer.generate(batch['input_ids'], ...) rewards = reward_model(queries, responses) stats = ppo_trainer.step(queries, responses, rewards) Value head: PPO требует оценку V(s) состояния. Добавляется linear layer поверх LLM — обучается совместно с policy.
Альтернативы PPO: DPO, ORPO, SimPO
DPO (Direct Preference Optimization) убирает RM и PPO — напрямую оптимизирует предпочтения через reparameterization. Проще, стабильнее, но менее гибкий.
from trl import DPOTrainer, DPOConfig dpo_trainer = DPOTrainer( model=sft_model, ref_model=ref_model, beta=0.1, # temperature train_dataset=comparison_dataset, args=DPOConfig(output_dir="dpo-output", ...) ) ORPO (Odds Ratio Preference Optimization): Объединяет SFT + preference alignment в один pass. Без reference модели.
SimPO: Sequence-level preference, reference-free.
Constitutional AI (CAI) — вариант Anthropic: Вместо human aннотаторов для RM: LLM-generated critique & revision. Набор принципов (constitution) → модель сама оценивает ответы → synthetic preference dataset → RM обучение. Снижает зависимость от дорогой human annotation.
Инфраструктура и мониторинг
Требования к GPU
| Модель | SFT (QLoRA) | SFT (full) | PPO |
|---|---|---|---|
| LLaMA-3 8B | 2× A100 80GB | 8× A100 80GB | 8× A100 80GB |
| LLaMA-3 70B | 8× A100 80GB | 32× A100 80GB | 32× A100 80GB |
DeepSpeed ZeRO-3: Шардирование параметров/градиентов/оптимайзера между GPU. Обязательно для PPO на 70B+.
vLLM для генерации в PPO: Ускоряет sampling (rollout generation) в 10–20× vs HuggingFace generate. Критично — генерация занимает 80% времени PPO.
Мониторинг RLHF
W&B или MLflow для трекинга:
- ppo/mean_scores — средний reward за эпоху (должен расти)
- ppo/kl_divergence — должен оставаться в [target_kl ± 30%]
- ppo/policy_loss — стабильность policy
- Qualitative: регулярная ручная оценка сэмплов
Reward hacking детекция: перегенерация held-out промптов каждые N шагов, ручная оценка на наличие деградации (repetition, sycophancy, gibberish).
Сравнение методов выравнивания
| Метод | RM нужен? | Reference модель? | Сложность | Стабильность | Гибкость |
|---|---|---|---|---|---|
| PPO | Да | Да | Высокая | Средняя | Высокая |
| DPO | Нет | Да | Средняя | Высокая | Средняя |
| ORPO | Нет | Нет | Низкая | Высокая | Низкая |
| SimPO | Нет | Нет | Низкая | Высокая | Средняя |
Процесс работы и гарантии
Полный цикл работ включает следующие этапы:
- Сбор и аннотация comparison-датасета (внутренними или аутсорсинговыми аннотаторами) — 6–10 недель.
- Технический пайплайн SFT → Reward Model → PPO (или DPO/ORPO) — 4–6 недель.
- Параметризация: подбор LoRA/QLoRA, beta, KL penalty, learning rate.
- Интеграция с MLOps-инфраструктурой (W&B, MLflow).
- Документация модели: model card, границы применимости, метрики.
- Обучение вашей команды работе с пайплайном.
- Поддержка на этапе эксплуатации: мониторинг reward hacking, ретренинг.
Наша команда имеет более пяти лет опыта в RLHF для промышленных LLM. Мы реализовали проекты для клиентов в сфере FinTech, HealthTech и LegalTech с общим объёмом дообучения свыше 50 моделей. Гарантируем прозрачность каждого этапа: вы получаете воспроизводимые эксперименты, модель карту и план итераций. Свяжитесь с нами для бесплатной оценки вашего проекта — мы подберём оптимальный метод выравнивания под ваши данные и задачи. Закажите консультацию нашего инженера.
Что входит в работу
- Подготовка и аннотация датасета сравнений
- SFT базовой модели (с LoRA или full fine-tune)
- Обучение Reward Model с метриками качества
- Оптимизация через PPO, DPO или альтернативный метод
- Интеграция с MLOps (W&B, MLflow, vLLM)
- Документация: model card, границы применимости, метрики
- Обучение вашей команды и сопровождение до деплоя
- Постдеплойный мониторинг и ретренинг
Сроки и стоимость
Полный цикл от сбора comparison-датасета до деплоя обычно занимает 12–20 недель. Самая затратная часть — сбор и аннотация человеческих предпочтений (6–10 недель). Технический пайплайн SFT+RM+PPO — 4–6 недель. Итеративные улучшения Constitution + RM могут продолжаться бесконечно.
Стоимость дообучения рассчитывается индивидуально. Для точной оценки вашего проекта свяжитесь с нами — мы предоставим детальную смету и timeline. Инвестиции в RLHF окупаются за счёт повышения качества генерации и снижения рисков. Получите консультацию нашего инженера — оценим ваш проект бесплатно.
RLHF — ключевая техника, описанная в научной литературе.







