چیت‌شیت

‏RLHF، DPO و تنظیم ترجیحات (Preference Tuning)

RLHF, DPO and Preference Tuning

مدل پاداش به‌همراه PPO در مقایسه با DPO و خانواده‌ی آن. توابع زیان، تنظیمات بتا و KL، حالت‌های شکست و راهکارها.

  • ۱۱ بخش
  • ۵ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. مقایسه‌ی RLHF با DPO
  2. چه زمانی از کدام استفاده کنیم؟
  3. پایپ‌لاین RLHF
  4. یک دوره DPO (پروژه‌ی پایانی)
  5. تابع زیان DPO و فریز مدل مرجع
  6. مدل پاداش و پاداش KL (ساده)
  7. وظایف در کد
  8. توابع زیان
  9. پیش‌فرض‌ها
  10. عیب‌یابی
  11. پرسش‌ها

مقایسه‌ی RLHF با DPO

مقایسه
عامل‏RLHF (PPO)‏DPO
مدل‌های نیازمند آموزش3: مدل SFT، پاداش، خط‌مشی1: فقط خط‌مشی
حلقه‌های آموزش3: حلقه SFT، RM، PPO2: حلقه SFT، DPO
ابَرپارامترها‏lr، ضریب KL، نسبت برش (clip ratio)، lr مدل RM، دوره‌ها (epochs)‏lr، بتا (beta)، دوره‌ها (epochs)
مدل پاداشآموزش جداگانهضمنی در احتمال‌های مدل
الگوریتم‏PPO، پیچیده و ناپایداریادگیری نظارت‌شده، پایدار
مدل‌ها در حافظه3 تا 4 مدل در طول PPO2 مدل: مدل فعلی و مدل مرجع
توان محاسباتیسه حلقهحدود یک‌سوم RLHF
دادهحلقه‌ی برخط (online) با امتیازدهی‌های جدیدمجموعه‌داده‌ی ترجیحات ثابت

چه زمانی از کدام استفاده کنیم؟

نکته‌ها
  • ‏DPO: بین 5,000 تا 20,000 جفت ترجیحات، توان محاسباتی محدود، یا آزمایش‌های مکرر روی مجموعه‌داده.
  • ‏RLHF: مقیاس بزرگ، پاداش‌های چندهدفه، یا حلقه‌ی امتیازدهی برخط و تکرارشونده.
  • ‏SimPO: سوگیری طول (length bias) مشهود است؛ همچنین مدل مرجع را حذف می‌کند.
  • ‏KTO: تنها برچسب‌های تکی و غیرجفتی «خوب» یا «بد» دارید.
  • ‏ORPO: تمایل دارید فرآیند را تک‌مرحله‌ای از مدل پایه شروع کنید، بدون چک‌پوینت SFT.
  • ‏BPO: لاگ‌های DPO کاهش log-prob پاسخ برگزیده را نشان می‌دهند.
  • ‏IPO: شدت ترجیحات بسیار متغیر است و DPO به اشباع می‌رسد.

پایپ‌لاین RLHF

معماری
مقداردهی اولیهفریزآموزشپاسخپاداشجریمه‌ی KLبه‌روزرسانیمدل SFTمرحله‌ی 1جفت ترجیحاتپرامپت، برگزیده (chosen)، ردشده (rejected)خط‌مشی (Policy)مقداردهی اولیه از SFTمدل پاداشهد اسکالر، برادلی-تری (Bradley-Terry)مدل مرجعکپی فریز‌شده‌ی SFTبه‌روزرسانی PPOپاداش منهای جریمه‌ی بتای KL

یک دوره DPO (پروژه‌ی پایانی)

گام‌به‌گام
  1. مدل مرجعدر بلاک torch.no_grad()، مقادیر log-prob پاسخ‌های برگزیده و ردشده را یک‌بار ذخیره کنید.
  2. خط‌مشیتابع sequence_log_prob مقادیر log-prob توکن‌های تکمیل را جمع می‌کند. توکن‌های پرامپت اثری ندارند.
  3. حاشیه (Margin)تفاضل diff_w - diff_l، یعنی نسبت لگاریتمی برگزیده منهای نسبت لگاریتمی ردشده.
  4. تابع زیان (Loss)محاسبه‌ی -F.logsigmoid(beta * margin) برای هر سه‌گانه.
  5. گاماجرای opt.zero_grad()، loss.backward() و opt.step() روی بهینه‌ساز Adam.
  6. بررسیاگر حاشیه افزایش نیابد یا تابع زیان کاهش پیدا نکند، تابع run_demo مقدار 1 برمی‌گرداند.

تابع زیان DPO و فریز مدل مرجع

کد
python
diff_w = logp_w_pol - logp_w_ref                # نسبت لگاریتمی برگزیده
diff_l = logp_l_pol - logp_l_ref                # نسبت لگاریتمی ردشده
margin = diff_w - diff_l                        # شکاف پاداش ضمنی تقسیم بر بتا
z = beta * margin
loss = -F.logsigmoid(z)                         # سیگموئید لگاریتمی منفیِ پایدار
policy.load_state_dict(reference.state_dict())  # شروع از وزن‌های برابر
for p in reference.parameters():
    p.requires_grad = False                     # مدل مرجع هرگز تغییر نمی‌کند
target = 1.0 / (2.0 * beta) if beta > 0 else 0.0
loss = (margin - target) ** 2                   # گونه‌ی IPO

مدل پاداش و پاداش KL (ساده)

کد
python
p = sigmoid(r_pos - r_neg)                     # احتمال پیروزی پاسخ برگزیده در Bradley-Terry
grad_scale = 1 - p
w[t] += lr * grad_scale * c                    # افزایش توکن‌های برگزیده، کاهش توکن‌های ردشده
kl_term = kl(probs_new, probs_ref)
reward = rm_score - beta * kl_term             # پاداش با جریمه‌ی KL
advs = [(r - mean_r) / sd_r for r in rewards]  # مزیت‌های نرمال‌شده
ratio = math.exp(logp - log_pi_old)
clipped = (adv > 0 and ratio > 1 + eps) or (adv < 0 and ratio < 1 - eps)

وظایف در کد

کار و کد
وظیفهکد
آموزش یک RM مبتنی بر Bradley-Terrytrain_rm(n_pairs=500, lr=0.1)
حلقه‌ی اسباب‌بازی PPO-RLHFrlhf_loop(w, updates=300, beta=0.1)
‏TRL PPO با KL انطباقیPPOConfig(init_kl_coef=0.05, target_kl=6.0)
آموزش DPO، درس 10.08dpo_train(..., lr=5e-6, beta=0.1)
پیمایش پارامتر بتا (Sweep)betas=[0.01, 0.1, 0.3, 1.0]
‏log-prob پاسخsequence_log_prob(policy, prompt, chosen)
مقایسه‌ی شش تابع زیانpython3 code/main.py
پروژه‌ی پایانی سرتاسری (end-to-end)sys.exit(run_demo())

توابع زیان

مفهوم‌ها
تابع زیان RM
رابطه‌ی $-\log \sigma(R_\phi(x, y_+) - R_\phi(x, y_-))$، تابع لجستیک دوتایی Bradley-Terry.
پاداش ضمنی
$r = \beta \log \frac{\pi^*(y \mid x)}{\pi_{\text{ref}}(y \mid x)} + \beta \log Z(x)$ که در آن $Z(x)$ حذف می‌شود.
‏DPO: رابطه $-\log \sigma(\beta (\log \frac{\pi(y_w)}{\pi_{\text{ref}}(y_w)} - \log \frac{\pi(y_l)}{\pi_{\text{ref}}(y_l)}))$
IPO
خطای مربعات شکاف نسبت لگاریتمی در برابر $\frac{1}{2\beta}$؛ شکاف کران‌دار می‌ماند.
SimPO
عبارت نرمال‌شده با طول $\frac{\beta}{|y|} \log \pi(y \mid x)$ به‌همراه حاشیه‌ی $\gamma$؛ بدون مدل مرجع.
علامت گرادیان
$\partial L / \partial \log \pi_\theta(y_w) = -\beta (1 - \sigma(z))$؛ احتمال برگزیده افزایش می‌یابد.

پیش‌فرض‌ها

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
RLHF KL β0.01-0.05بازه‌ی معمول
InstructGPT KL β0.02‏lr=1.5e-5، تعداد 4 دوره‌ی PPO
PPO clip ε0.2نسبت برش‌خورده به بازه‌ی 1 ± ε
TRL `init_kl_coef`0.05با target_kl=6.0
DPO β, lesson 10.080.1نقطه‌ی بهینه بین 0.1 تا 0.3
DPO lr, lesson 10.085e-65 دوره
Capstone `DPOConfig` beta0.2‏lr برابر 1e-3، تعداد 30 دوره
Capstone `warmup_epochs`8ابتدا پیش‌آموزش مدل مرجع

عیب‌یابی

عیب‌یابی
  • پاداش رشد می‌کند ولی ارزیابی انسانی ثابت است

    علت
    دور زدن پاداش (Reward hacking)
    راه‌حل
    توقف زودهنگام، افزایش β، غنی‌تر کردن داده‌های RM
  • پاسخ‌ها بیش از حد طولانی می‌شوند

    علت
    سوءاستفاده از طول (Length hacking)
    راه‌حل
    پاداش نرمال‌شده با طول، یا استفاده از SimPO
  • میانگین KL فراتر از 5 تا 10

    علت
    دریفت خط‌مشی از SFT
    راه‌حل
    پارامتر β انطباقی با هدف‌گذاری روی یک KL ثابت
  • خط‌مشی به‌سختی تغییر می‌کند

    علت
    ‏β بیش از حد بالاست
    راه‌حل
    کاهش β
  • کاهش log-prob برگزیده در DPO

    علت
    تخریب پاسخ برگزیده
    راه‌حل
    جریمه‌ی BPO روی پاسخ برگزیده
  • شکاف DPO منفجر می‌شود

    علت
    شکاف پاداش ضمنی بی‌کران است
    راه‌حل
    ‏IPO، با محدود کردن شکاف به 1/(2 beta)
  • امتیازهای RM غیرقابل‌اعتمادند

    علت
    ‏RM کوچک‌تر از خط‌مشی است
    راه‌حل
    اندازه‌ی RM باید دست‌کم هم‌اندازه‌ی خط‌مشی باشد
  • حدود 30٪ برچسب‌های نویزی

    علت
    ترجیحات مبهم
    راه‌حل
    فیلتر داده‌ها با نرخ توافق، تنظیم دمای BT

پرسش‌ها

پرسش و پاسخ
چرا جفت‌ها، نه امتیازهای مطلق؟
انسان‌ها دو پاسخ را به‌خوبی با هم مقایسه و رتبه‌بندی می‌کنند، اما به یک پاسخ منفرد ضعیف امتیاز می‌دهند.
چرا عبارت KL لازم است؟
خط‌مشی را نزدیک به توزیع داده‌هایی نگه می‌دارد که RM روی آن‌ها آموزش دیده است.
چرا RM آخرین توکن را می‌خواند؟
ماسک علّی به آن امکان می‌دهد کل توالی را مشاهده کند.
به‌ازای هر جفت DPO چند گذر رو به جلو نیاز است؟
چهار گذر: دو مدل ضرب در دو پاسخ.
آیا الگوریتم‌های هم‌ترازی مستقیم (DAA) از بیش‌بهینه‌سازی در امان‌اند؟
خیر؛ آن‌ها در عوض نسبتِ مدل مرجع را بیش‌بهینه‌سازی می‌کنند.