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: оптимізує винагороду від 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 анотаторів для 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 — ключова техніка, описана в науковій літературі.







