ما با حیرت به مدلهای زبانی بزرگ (LLM) مانند GPT-4، Gemini، Claude و Llama نگاه میکنیم. این مدلها که بر روی دادههای مقیاس اینترنت (> 10^12 توکن) آموزش داده شدهاند، دانش گسترده و تسلط زبانی فراوانی دارند. با این حال، تبدیل این پتانسیل خام به دستیارهای هوش مصنوعی مفید، بیضرر و صادق، چیزی فراتر از مجموعه دادههای عظیم میطلبد. این امر نیازمند همسویی است - آموزش این مدلها برای رفتار مطابق با ترجیحات و ارزشهای انسانی.
فناوری کلیدی که این همسویی را برای بسیاری از مدلهای پیشرفته امکانپذیر میکند، یادگیری تقویتی از بازخورد انسانی (RLHF) است. این یک فرآیند پیچیده است که مدلهای بزرگ را با استفاده از قضاوت انسانی به عنوان راهنمای نهایی، تنظیم دقیق میکند.
این پست به بررسی عمیقتر RLHF میپردازد و سازوکارهای اساسی، ریاضیات و مراحل محاسباتی درگیر را بررسی میکند.
مسئله همسویی: چرا پیشآموزش کافی نیست؟
پیشآموزش استاندارد LLM برای پیشبینی توکن بعدی در یک دنباله بهینه میشود. با توجه به یک زمینه c ، مدل پارامترهای ?\psi را یاد میگیرد تا احتمال توکن بعدی واقعی t را در سراسر یک مجموعه داده عظیم D به حداکثر برساند:
این هدف باعث میشود که مدل در تولید متن روان و اغلب از نظر واقعی آگاه، ماهر شود. با این حال، ذاتاً به مدل آموزش نمیدهد که:
- دستورالعملها را به درستی دنبال کند: مدلهای پیشآموزششده ممکن است محدودیتها را نادیده بگیرند یا تفاوتهای ظریف درخواست کاربر را اشتباه درک کنند.
- صداقت را حفظ کند: آنها میتوانند اطلاعات نادرست اما ظاهراً معقول را "توهم" کنند.
- از خروجیهای مضر اجتناب کند: آنها ممکن است تعصبات را بازتولید کنند یا محتوای سمی آموختهشده از دادههای آموزشی را تولید کنند.
- مختصر و مفید باشد: پاسخها میتوانند طولانی، طفرهآمیز یا نادیده گرفتن نیاز اصلی کاربر باشند.
- از درخواستهای نامناسب خودداری کند: آنها فاقد درک ذاتی از مرزهای اخلاقی هستند.
ما به مکانیزمی نیاز داریم تا مدل را به طور صریح به سمت رفتارهای مطلوب هدایت کنیم، فراتر از تکمیل الگوی ساده.
RLHF: یک فرآیند همسویی چند مرحلهای
RLHF از طریق یک فرآیند ساختاریافته سه مرحلهای به مسئله همسویی میپردازد:
مرحله 1: تنظیم دقیق نظارتشده (SFT) - (اختیاری اما رایج)
قبل از پرداختن به RLHF مناسب، مدلها اغلب در ابتدا بر روی یک مجموعه داده کوچکتر و با کیفیت بالا از جفتهای دستورالعمل-پاسخ، تنظیم دقیق میشوند. این مجموعه داده شامل نمونههایی از خروجیهای مورد نظر برای درخواستهای مختلف است که اغلب توسط انسانها انتخاب میشوند.
- هدف: تطبیق مدل پیشآموزششده برای پیروی بهتر از دستورالعملها و پاسخگویی به یک سبک خاص (به عنوان مثال، مانند یک دستیار).
- فرآیند: تنظیم دقیق مدل با استفاده از همان هدف پیشبینی توکن بعدی به عنوان پیشآموزش، اما فقط در این مجموعه داده انتخابشده:
- نتیجه: یک مدل p? که در پیروی از دستورالعملها بهتر از مدل پیشآموزششده پایه p? است. این به عنوان یک نقطه شروع بهتر برای مراحل بعدی RLHF عمل میکند. بیایید این سیاست شروع را pSFT بنامیم.
مرحله 2: آموزش یک مدل پاداش (RM) - یادگیری ترجیحات انسانی
این هسته اصلی بخش "بازخورد انسانی" است. ما باید قضاوت انسانی در مورد اینکه چه چیزی یک پاسخ "خوب" را تشکیل میدهد، ثبت کنیم.
- هدف: آموزش یک مدل r?(x,y) که یک درخواست x و یک پاسخ تولیدشده y را دریافت میکند و یک امتیاز اسکالر را خروجی میدهد که نشاندهنده میزان ترجیح یک انسان برای آن پاسخ است.
- جمعآوری دادهها:
- مجموعهای متنوع از درخواستها x را انتخاب کنید.
- از مدل SFT (یا حتی نسخههای مدل متعدد) برای تولید چندین پاسخ کاندید {y1, y2, … , yk} برای هر درخواست x استفاده کنید.
- جفتهای پاسخ (yi, yj) را برای یک درخواست x به برچسبگذاران انسانی ارائه دهید.
- از برچسبگذاران بخواهید که کدام پاسخ را ترجیح میدهند، Yw (برنده) یا Yl(بازنده).
- یک مجموعه داده بزرگ DRM از تاپلهای ترجیحی (x,Yw,Yl) جمعآوری کنید.
- مدلسازی ترجیحات: مدل پاداش r?(x,y) برای پیشبینی این ترجیح آموزش داده میشود. یک رویکرد رایج از مدل Bradley-Terry استفاده میکند، که فرض میکند احتمال ترجیح yw بر yl مربوط به تفاوت در امتیازات پاداش آنها از طریق یک تابع سیگموئید s است:
- هدف آموزش: به حداکثر رساندن احتمال ترجیحات انسانی مشاهدهشده. این به حداقل رساندن یک تابع زیان لجستیک بر روی مجموعه داده تبدیل میشود:
- مدل پاداش اغلب با وزنهای مدل SFT (یا مدل پیشآموزششده) شروع میشود و یک لایه خطی را در بالای نمایش توکن نهایی اضافه میکند تا پاداش اسکالر را خروجی دهد.
- کد مفهومی (زیان مدل پاداش):
import torch
import torch.nn as nn
import torch.optim as optim
from transformers import AutoModelForSequenceClassification, AutoTokenizer
# Example
# Assume RewardModel outputs a single scalar score
# reward_model = AutoModelForSequenceClassification.from_pretrained('sft_model_path', num_labels=1)
# tokenizer = AutoTokenizer.from_pretrained('sft_model_path')
def compute_reward_model_loss(reward_model, tokenizer, prompt, response_winner, response_loser):
"""Conceptual function for RM loss calculation"""
# Tokenize inputs (handle truncation, padding etc.)
winner_inputs = tokenizer(prompt + response_winner, return_tensors='pt', truncation=True, padding=True)
loser_inputs = tokenizer(prompt + response_loser, return_tensors='pt', truncation=True, padding=True)
# Get reward scores from the model
# The actual way to get the scalar might differ based on model head architecture
# Assuming model outputs logits, and we take the first logit as the score
score_winner = reward_model(**winner_inputs).logits.squeeze() # Shape: [batch_size]
score_loser = reward_model(**loser_inputs).logits.squeeze() # Shape: [batch_size]
# Calculate loss based on pairwise comparison
# log(sigmoid(score_winner - score_loser))
loss = -torch.log(torch.sigmoid(score_winner - score_loser)).mean()
return loss
# --- Training Loop Sketch ---
# optimizer = optim.Adam(reward_model.parameters(), lr=1e-5)
# for batch in preference_dataloader: # Batches of (prompt, y_w, y_l)
# optimizer.zero_grad()
# loss = compute_reward_model_loss(reward_model, tokenizer,
# batch['prompt'], batch['response_winner'], batch['response_loser'])
# loss.backward()
# optimizer.step()
- سلب مسئولیت: کد بالا بسیار مفهومی است و بسیاری از جزئیات مانند بارگیری دادهها، معماری مدل دقیق برای امتیازدهی، دستکاری دستگاه و آموزش توزیعشده را حذف میکند.
مرحله 3: تنظیم دقیق با یادگیری تقویتی (RL) - بهینهسازی سیاست
اکنون، ما از مدل پاداش آموزشدیده برای بهبود مدل زبانی SFT (سیاست اولیه ما) با استفاده از RL استفاده میکنیم.
- هدف: آموزش یک سیاست (که LLM است که ما در حال تنظیم آن هستیم) که پاسخهایی y به درخواستها x تولید میکند که پاداش مورد انتظار پیشبینیشده توسط مدل پاداش را به حداکثر میرساند.
- فرمولبندی RL:
- حالت: درخواست x دریافتشده توسط عامل.
- اقدام: تولید پاسخ:
- پاداش: امتیاز اختصاصدادهشده توسط مدل پاداش.
- چالش: به حداکثر رساندن سادهلوحانه میتواند LLM را به انحراف شدید از تولید زبان واقعگرایانه (یافتن سوء استفادهها در RM) یا فراموش کردن دانش از پیشآموزش سوق دهد.
- راهحل (PPO): بهینهسازی سیاست پروگزیمال (PPO) معمولاً استفاده میشود. هدف آن به حداکثر رساندن پاداش ضمن محدود کردن میزان تغییر سیاست از یک سیاست مرجع است که معمولاً سیاست اولیه SFT است. این محدودیت با استفاده از یک جریمه واگرایی KL اعمال میشود.
- تابع هدف PPO: هدف برای تنظیم سیاست LLM تقریباً به شرح زیر است:
- جایی که:
- E(x,y)~p? نشاندهنده انتظار زمانی است که درخواستها x از یک مجموعه داده گرفته میشوند و پاسخها y توسط سیاست فعلی p? تولید میشوند.
- r?(x,y) پاداش حاصل از مدل پاداش آموزشدیده است.
- KL واگرایی Kullback-Leibler بین سیاست فعلی و سیاست اولیه SFT است. این میزان "انحراف" سیاست فعلی از مرجع را اندازهگیری میکند.
- ß یک ابرپارامتر است که قدرت جریمه KL را کنترل میکند. یک ß بالاتر p? را به pSFT نزدیکتر نگه میدارد.
- (توجه: PPO در عمل از یک هدف جانشین بریدهشده کمی پیچیدهتر برای پایداری استفاده میکند، اما ایده اصلی در بالا ثبت شده است.)
- کد مفهومی (مرحله بهروزرسانی RL):
import torch
# Assume policy_llm is the model being trained (e.g., AutoModelForCausalLM)
# Assume reference_llm is the frozen SFT model (same architecture)
# Assume reward_model is the trained RM from Stage 2
# Assume tokenizer is shared
def compute_rl_loss(policy_llm, reference_llm, reward_model, tokenizer, prompts, responses, beta):
"""Conceptual function for RL loss/objective calculation"""
# --- Get Rewards ---
# Need to tokenize prompts + responses for the reward model
reward_inputs = tokenizer(prompts, responses, return_tensors='pt', padding=True, truncation=True)
with torch.no_grad(): # RM is frozen during RL update
rewards = reward_model(**reward_inputs).logits.squeeze() # Shape: [batch_size]
# --- Get Log Probabilities ---
# Tokenize for the policy LLM (inputs = prompts, labels = responses)
policy_inputs = tokenizer(prompts, return_tensors='pt', padding=True, truncation=True)
policy_labels = tokenizer(responses, return_tensors='pt', padding=True, truncation=True).input_ids
# Calculate log probability of generating 'responses' given 'prompts'
# under the current policy_llm
outputs_policy = policy_llm(**policy_inputs, labels=policy_labels)
log_probs_policy = outputs_policy.loss * -policy_labels.size(1) # Reconstruct sum log P(token|context)
# Calculate log probability under the reference model (frozen)
with torch.no_grad():
outputs_ref = reference_llm(**policy_inputs, labels=policy_labels)
log_probs_ref = outputs_ref.loss * -policy_
labels.size(1)
# --- Calculate KL Divergence --- #
# KL(P || Q) = sum(P(x) * log(P(x) / Q(x)))
kl = log_probs_ref - log_probs_policy # per-token KL estimates
mean_kl = kl.mean()
# --- Compute Objective --- #
# objective = E[reward - beta * KL]
objective = rewards - beta * kl
loss = -objective.mean() # PPO minimizes the negative objective
return loss, mean_kl
# --- Training Loop (Conceptual) ---
# optimizer = optim.Adam(policy_llm.parameters(), lr=1e-5)
# for batch in rl_dataloader: # Batches of prompts
# # 1. Generate responses from the policy model
# responses = policy_llm.generate(batch['prompt'])
# # 2. Compute loss and KL
# loss, mean_kl = compute_rl_loss(policy_llm, reference_llm, reward_model, tokenizer,
# batch['prompt'], responses, beta)
# # 3. Backpropagate and update
# optimizer.zero_grad()
# loss.backward()
# optimizer.step()
# 4. Monitor KL, adjust beta if needed
# if mean_kl > kl_threshold:
# beta *= kl_penalty
# elif mean_kl < kl_threshold:
# beta /= kl_penalty
مانند قبل، کد بالا برای وضوح ساده شده است. کتابخانه Transformer و TRL (Transformer Reinforcement Learning) ابزارهای بسیار قدرتمندی برای تسهیل این روالهای پیچیده در یک کد تمیز ارائه میدهند.
چالشها و ملاحظات عملی
اگرچه RLHF به طور قابل توجهی LLMها را بهبود بخشیده است، چندین چالش عملی و حوزههای برای تحقیق وجود دارد:
- برچسبگذاران انسانی پرهزینه: بدست آوردن دادههای ترجیحی انسانی با کیفیت بالا گران و زمانبر است. نیاز به برچسبگذارانی دارد که دستورالعملها را درک کنند، دیدگاههای متفاوتی را در نظر بگیرند و با سناریوهای پیچیده سروکار داشته باشند.
- تعصب در بازخورد انسانی: ترجیحات انسانی میتواند ذهنی و تحت تأثیر عوامل فرهنگی، جمعیتشناختی و فردی باشد. LLM آموزشدیده ممکن است ناخواسته این تعصبات را به نفع دیدگاههای خاص تقویت کند.
- مقیاسبندی بازخورد: تعداد مقایسههای انسانی مورد نیاز برای آموزش یک مدل پاداش قوی با مقیاس مدل زبان افزایش مییابد. مقیاسبندی بازخورد انسانی به عنوان مثال از طریق عدم قطعیت برچسبگذاران به تحقیق بیشتری نیاز دارد.
- انحرافات مدل پاداش: مدلهای پاداش ناقص میتوانند بهینه سازی سیاست RL را به سمت پاسخهایی هدایت کنند که به ترجیحات واقعی انسان هماهنگ نیستند. سیاست RL ممکن است "سوء استفادهها" را در مدل پاداش بیابد و به روشهای غیرمنتظره و نامطلوب از آن سوء استفاده کند. استفاده از تکنیکهای پاداشدهی ایمن به یک حوزه تحقیقاتی فعال تبدیل شده است.
- مشکلات آموزش RL: آموزش سیاست RL میتواند از نظر محاسباتی گران باشد و در مقایسه با تنظیم دقیق نظارتشده، بیثباتتر است. ایجاد تعادل در پاداش با محدودیت واگرایی KL و انتخاب الگوریتمهای RL مناسب مستلزم تنظیم دقیق است.
گزینهها
RLHF تنها تکنیک همسویی نیست. در اینجا یک لیست سریع از برخی رویکردهای دیگر وجود دارد:
- تنظیم دقیق نظارتشده (SFT): یک پایه ارزشمند برای سیستم RLHF است و همچنان یک رویکرد همسویی سودمند محسوب میشود.
- یادگیری معکوس (IRL): در عوض، IRL به دنبال بازیابی تابع پاداش از یک رفتار متخصص است. ایده پشت این روش این است که از این طریق، عامل یاد میگیرد نه تنها عمل درست، بلکه دلیل درست انجام آن را نیز انجام دهد.
- یادگیری تقویتی بدون مدل: تلاش برای آموزش یک "تابع ارزش" (به نام Q-Learning) که به عامل میگوید کدام اقدام در هر ایالت بیشترین پاداش را میدهد. به طور معمول، عوامل مبتنی بر مدل سریعتر و با داده کمتری یاد میگیرند.
- DPO (بهینهسازی ترجیح مستقیم): مشابه RLHF، DPO با بهینهسازی مستقیم مدل زبانی برای برآوردن ترجیحات انسانی عمل میکند. با فرمولبندی مجدد مسئله یادگیری تقویتی به یک مسئله طبقهبندی ساده، مدل را آموزش میدهد تا تفاوتهای بین پاسخهای ترجیحدادهشده و نامطلوب را تشخیص دهد. در نتیجه، در مقایسه با RLHF، حذف نیاز به مدل پاداش، ثبات و کارآمدی را افزایش میدهد.
در نتیجه
همسو کردن مدلهای زبانی بزرگ با ارزشهای انسانی یک چالش مهم است. یادگیری تقویتی از بازخورد انسانی (RLHF) با بهینهسازی مدلها برای ترجیحات انسانی، به طور قابل توجهی پیشرفت کرده است.
فرآیند RLHF شامل سه مرحله کلیدی است:
- مدل زبانی با استفاده از دادههای نظارتشده تنظیم دقیق میشود.
- یک مدل پاداش برای پیشبینی ترجیحات انسان آموزش داده میشود.
- با استفاده از یادگیری تقویتی، مدل زبانی با پاداش مدل پاداش بهینهسازی میشود.
با این حال، RLHF چالشهایی مانند جمعآوری دادهها، تعصبات در بازخورد انسانی، در مقیاس دادن به بازخورد و مدلسازی پاداش دارد. تحقیقات در حال انجام بر این چالشها متمرکز است تا همسویی مدل را بیشتر بهبود بخشد.
RLHF پیشرفت قابل توجهی را در همسویی مدلهای زبانی بزرگ نشان میدهد. با درک مکانیسمهای آن و رسیدگی به چالشهای آن، میتوانیم دستیارهای هوش مصنوعی ایجاد کنیم که مفیدتر، بیضررتر و همسو با ارزشهای انسانی هستند.