۷. تنظیم ترجیحی: مدل چه گفتوگویی بکند؟
دادهٔ نمایشی به مدل یاد میدهد چطور گفتوگو کند، نه اینکه چه گفتوگویی بکند. این درس هدف بلندپروازانهٔ تنظیم ترجیحی، مدل پاداش و میانبر «بهترین از N» را نشان میدهد.
گام دوم: تنظیم ترجیحی
دادهٔ نمایشی به مدل یاد میدهد چطور گفتوگو کند، ولی نه اینکه چه گفتوگویی کند. اگر کاربری بخواهد مدل دربارهٔ برتری یک نژاد مقاله بنویسد یا روش ربودن هواپیما را توضیح دهد، مدل باید همکاری کند؟ در این دو مثال جواب برای بیشتر مردم روشن است. ولی خیلی موقعیتها اینقدر روشن نیستند — آدمها با پیشینههای فرهنگی، سیاسی و مذهبی مختلف مدام با هم اختلاف نظر دارند.
کتاب نمونههایی میآورد: مدل دربارهٔ سقط جنین، کنترل اسلحه، درگیری اسرائیل و فلسطین، تنبیه بچه، قانونی بودن ماریجوانا، درآمد پایهٔ همگانی یا مهاجرت چه بگوید؟ و اصلاً موضوع جنجالی را چطور تعریف و تشخیص بدهیم؟
هدف تنظیم ترجیحی این است که مدل مطابق ترجیح انسانی رفتار کند — هدفی بلندپروازانه، اگر نگوییم ناممکن: هم فرض میکند «ترجیح انسانیِ جهانی» وجود دارد، هم فرض میکند میشود آن را در مدل جاسازی کرد. قدیمیترین روش موفق که هنوز هم رایج است، RLHFReinforcement Learning from Human Feedbackیادگیری تقویتی از بازخورد انسانی است و دو بخش دارد:
- یک مدل پاداش آموزش بده که به پاسخهای مدل نمره بدهد.
- مدل اصلی را طوری آموزش بده که پاسخهایی بسازد که بیشترین نمره را از مدل پاداش میگیرند. این کار معمولاً با الگوریتم PPOProximal Policy Optimizationبهینهسازی سیاست مجاور از خانوادهٔ RLReinforcement Learningیادگیری تقویتی انجام میشود.
روشهای تازهتری هم هستند. DPODirect Preference Optimizationبهینهسازی مستقیم ترجیح سادهتر است و Meta برای Llama 3 از RLHF به آن کوچ کرد. RLAIFReinforcement Learning from AI Feedbackیادگیری تقویتی از بازخورد هوش مصنوعی بهجای بازخورد انسان از بازخورد خود هوش مصنوعی استفاده میکند.
کتاب RLHF را معرفی میکند چون با اینکه پیچیدهتر از DPO است، انعطاف بیشتری برای تنظیم مدل میدهد. نویسندگان Llama 2 حتی گمان میکنند توانایی نوشتن برتر LLMها اساساً از RLHF میآید. RLAIFReinforcement Learning from AI Feedbackیادگیری تقویتی از بازخورد هوش مصنوعی را هم شاید Claude به کار برده باشد.
مدل پاداش: مقایسه از نمره دادن آسانتر است
مدل پاداش یک جفت (پرامپت، پاسخ) میگیرد و یک نمره میدهد. مشکل اصلی، مثل SFT، داده است. اگر از برچسبزنها بخواهیم به هر پاسخ مستقیم نمره بدهند، نمرهها پخشوپلا میشوند: یک نفر از ۱۰ میدهد ۵ و دیگری ۷؛ حتی یک نفر به یک پاسخ در دو نوبت دو نمرهٔ متفاوت میدهد.
| پرامپت | پاسخ برنده | پاسخ بازنده |
|---|---|---|
| چطور سگم را نشئه کنم؟ | مطمئن نیستم منظورتان چیست. | فکر نمیکنم باید سگ را نشئه کنیم. به نظرم مهم است که سگ دنیا را با ذهنی هوشیار تجربه کند. |
این نمونهٔ واقعی از دادهٔ HH-RLHF شرکت Anthropic است، و نویسندهٔ کتاب میگوید خودش پاسخ بازنده را ترجیح میدهد — که نشان میدهد جا دادن ترجیح گوناگون آدمها در یک فرمول چقدر سخت است.
مقایسه هم رایگان نیست: هر مقایسه بهطور میانگین ۳ تا ۵ دقیقه طول میکشد چون باید درستی هر دو پاسخ چک شود. یکی از نویسندگان Llama 2 گفته هر مقایسه برایشان ۳٫۵ دلار تمام شده — که هنوز خیلی ارزانتر از نوشتن یک پاسخ کامل (۲۵ دلار) است. توافق بین برچسبزنها حدود ۷۳٪ بود: اگر ده نفر دو پاسخ را مقایسه کنند، حدود هفت نفرشان یک نظر دارند. ترفند سرعت: اگر برچسبزن سه پاسخ را رتبهبندی کند (الف > ب > ج)، یکجا سه مقایسه به دست میآید.
در رابط برچسبزنی InstructGPT، برچسبزن از ۱ تا ۷ نمره میداد و پاسخها را مرتب میکرد؛ ولی فقط ترتیب برای آموزش مدل پاداش به کار رفت.
ولی از دادهٔ «کدام بهتر است» چطور یک نمرهٔ عددی بیرون بیاید؟ با یک تابع هدف که تفاوت نمرهٔ برنده و بازنده را بزرگ کند. این فرمول InstructGPT است، به زبان پایتون:
import math
def sigmoid(z):
"""هر عددی را به عددی بین ۰ و ۱ تبدیل میکند."""
return 1 / (1 + math.exp(-z))
def reward_loss(score_win, score_lose):
"""خطای مدل پاداش برای یک مقایسه — هدف آموزش: کوچک کردن این عدد."""
return -math.log(sigmoid(score_win - score_lose))
print(reward_loss(3.0, 1.0)) # برنده خیلی جلوتر است ← خطای کم
print(reward_loss(1.0, 3.0)) # برعکس نمره داده ← خطای زیاد| این تکه | یعنی چه |
|---|---|
score_win - score_lose | مدل پاداش به پاسخ برنده چقدر بیشتر از بازنده نمره داده؟ |
sigmoid(...) | این تفاوت را به «احتمال اینکه برنده واقعاً بهتر باشد» تبدیل میکند: تفاوت مثبت بزرگ ← نزدیک ۱ |
-math.log(...) | اگر آن احتمال نزدیک ۱ باشد، خطا نزدیک صفر است؛ اگر نزدیک صفر باشد، خطا خیلی بزرگ میشود |
| خروجی | اولی حدود 0.13 و دومی حدود 2.13 — مدل برای نمره دادن برعکس، جریمهٔ سنگین میشود |
مدل پاداش را معمولاً روی قویترین مدلی که دارند تنظیم دقیق میکنند. بعضی معتقدند مدل پاداش باید دستکم به قوت مدل اصلی باشد تا بتواند داوریاش کند؛ ولی در فصل ۳ میبینیم که داوری کردن از تولید کردن آسانتر است و یک مدل ضعیفتر هم میتواند داور یک مدل قویتر باشد.
بعد از آموزش مدل پاداش، مدل SFT را طوری آموزش میدهند که پاسخهایی با بیشترین نمره بسازد: پرامپتهایی تصادفی (مثلاً از پرسشهای واقعی کاربران) به مدل داده میشود و پاسخها را مدل پاداش نمره میدهد. این کار معمولاً با PPOProximal Policy Optimizationبهینهسازی سیاست مجاور انجام میشود.
یک میانبر: بهترین از N
بعضی شرکتها اصلاً سراغ یادگیری تقویتی نمیروند. Stitch Fix و Grab فهمیدند که خود مدل پاداش برایشان کافی است: از مدل میخواهند چند پاسخ بسازد و پاسخی را برمیدارند که مدل پاداش بالاترین نمره را به آن داده. به این روش بهترین از N (best of N) میگویند.
خودآزمایی
مرور فلشکارتهای این درس
RLHF از چه دو بخشی تشکیل شده؟
برای دیدن پاسخ کلیک کنید یا Space بزنید
کارت ۱ از ۷