فصل ۴ — همترازی (Alignment)
Alignment مفهوم جدیدی در NLP نیست، اما معنای آن در حوزهها و زمانهای مختلف تغییر کرده است. در NLP سنتی، alignment معمولاً به پیوند عناصر متناظر در دو مجموعه اشاره میکند؛ مانند همترازکردن واژهها میان یک جملهٔ چینی و یک جملهٔ انگلیسی. با افزایش اهمیت LLMها، این اصطلاح به معنای گستردهتر «همترازکردن output مدل با انتظارهای انسان» به کار میرود.
مسئلهای که alignment حل میکند این است که output مدل ممکن است با goal یا context مورد نظر کاربر سازگار نباشد. برای مثال، LLM پیشآموخته ممکن است instruction کاربر را دنبال نکند، زیرا برای این کار آموزش ندیده است. همچنین ممکن است محتوای مضر تولید کند یا biasهای موجود در training data را تداوم دهد. بنابراین چالش جدید آن است که output نهفقط دقیق و مرتبط، بلکه از نظر اخلاقی sound و non-discriminatory نیز باشد.
صرف pre-training میتواند مسائل alignment متنوعی باقی بگذارد. هدف نهایی کاهش یا رفع این مسائل برای ساخت LLM دقیق و ایمن است. از آنجا که LLM روی حجم عظیمی از data آموزش میبیند، میتوان تصور کرد اگر data کافی شامل taskهای متنوع و همسو با human preference داشته باشیم، pre-training شاید خود مدل را آنقدر دقیق و ایمن کند که alignment جداگانه لازم نباشد. اما در عمل جمعآوری dataای که همهٔ taskها را پوشش دهد یا preferenceهای انسانی را بهاندازهٔ کافی نمایندگی کند تقریباً ناممکن است؛ بنابراین دستکم در وضعیت فعلی alignment مرحلهای ضروری و حیاتی است.
این فصل بر روشهای alignment برای LLM تمرکز دارد. ابتدا taskهای عمومی alignment و سپس دو رویکرد پرکاربرد بررسی میشوند: instruction alignment و human preference alignment. اولی عمدتاً از supervised fine-tuning استفاده میکند تا output به instruction کاربر نزدیک شود. دومی معمولاً به reinforcement learning تکیه دارد و LLM را بر اساس feedback انسان آموزش میدهد. این دو، با وجود هدفهای متفاوت، غالباً با هم برای ساخت LLM خوبهمتراز استفاده میشوند.
۴.۱ نمای کلی همترازی LLM
Alignment را میتوان به چند شکل انجام داد، زیرا خود مسئله پیچیده و چندوجهی است و ملاحظات فنی مختلفی دارد. سه رویکرد رایج:
رویکرد اول: fine-tuning با labeled data. این روش pre-training موجود را ادامه میدهد تا مدل برای task مشخص سازگار شود. نمونهٔ اصلی Supervised Fine-Tuning (SFT) است که LLM را روی datasetی از instructionهای task-specific و output مورد انتظار آموزش میدهد. SFT dataset معمولاً بسیار کوچکتر از training set اصلی اما بسیار تخصصی است. حاصل این است که مدل اجرای task بر اساس instruction کاربر را یاد میگیرد. مثلاً با fine-tuning روی question-answer pairها میتواند به پرسشهایی پاسخ دهد که عیناً در SFT dataset نبودهاند. این روش وقتی input-output relationship را میتوان نسبتاً آسان توصیف و annotate کرد مفید است.
رویکرد دوم: fine-tuning با reward model. ارزشها و انتظارهای انسانی پیچیده و دشوار برای توصیفاند؛ حتی انسانها همیشه نمیتوانند روشن بیان کنند چه چیزی از نظر اخلاقی درست یا از نظر فرهنگی مناسب است. بنابراین data annotation به سادگی SFT نیست و تعداد محدود نمونههای انسانی رفتار مطلوب را کامل توصیف نمیکند. ایده، ساخت reward model شبیه expert انسانی است که وقتی response مدل با human preference همسوتر است reward بیشتری بدهد. برای ساخت آن، scoring function از human preference data آموزش داده میشود و سپس reward model برای guide کردن LLM استفاده میگردد. به این ترتیب alignment به reinforcement learning task تبدیل میشود. روشهایی مانند Reinforcement Learning from Human Feedback (RLHF) در سازگارکردن LLM با ظرافتهای رفتار و social norm انسانی موفق بودهاند.
رویکرد سوم: alignment در inference. prompting را نیز میتوان نوعی alignment دانست که training یا fine-tuning ندارد و با هزینهٔ کم adaptation پویا ایجاد میکند. راه دیگر rescoring outputهاست؛ مثلاً scoring system شبیه reward model feedback انسانی را شبیهسازی و outputهای با feedback مثبتتر را در اولویت قرار دهد.
این سه روش معمولاً پس از pre-training بهترتیب استفاده میشوند: ابتدا SFT، سپس RLHF و در نهایت prompting یا روش دیگر در inference. بهطور تقریبی توسعهٔ LLM به مرحلهٔ pre-training و alignment تقسیم میشود.
شکل ۴.۱ — الگوی pre-train-then-align. در pre-training، LLM با next-token prediction روی دادهٔ عظیم آموزش میبیند؛ در alignment، با instruction alignment مانند SFT، human preference alignment مانند RLHF و prompting به instruction، intent و preference کاربر نزدیک میشود. training و fine-tuning پیش از inference قرار دارند.
از آنجا که prompting در فصل قبل بهتفصیل بررسی شد، ادامهٔ فصل بر alignment مبتنی بر fine-tuning متمرکز است.
۴.۲.۱ ریزتنظیم نظارتشده (Supervised Fine-tuning)
راه مستقیم adaptation برای instruction following، fine-tune کردن مدل با زوجهای input-output annotateشده است [Ouyang et al., 2022; Wei et al., 2022a]. بر خلاف language model training استاندارد، هدف اینجا بیشینهکردن probability کل sequence نیست؛ بلکه probability ادامهٔ sequence با داشتن prefix بیشینه میشود. SFT data مجموعهای از زوجهای (x,y) است که output y پاسخ درست instruction ورودی x است.
نمونهٔ dataset برای SFT| x: instruction + user input | y: output |
| مقالهٔ زیر را خلاصه کن. Article: In recent years, solar energy has seen unprecedented growth ... | {∗summary∗} |
| اعداد مالی اصلی گزارش درآمد زیر را استخراج کن. Report: revenue of $10 million ... profit margin of 15% ... | Revenue: $10 million, Profit Margin: 15% |
| ایمیل زیر را spam یا not spam طبقهبندی کن. Congratulations! You’ve won a $500 gift card ... | Spam |
| برای مشکل فنی زیر راهحل بده. my computer is running slow and often freezes. | First, check for ... |
چنین datasetی instruction و output چند مسئلهٔ NLP را در خود دارد و میتوان LLM را برای چند task همزمان fine-tune کرد.
فرض کنید x=x₀...x_m input و y=y₁...y_n output متناظر باشد. در SFT هدف بیشینهکردن Pr(y|x) است. اگر parameterهای pre-trained برابر θ̂ باشند:
θ̃ = arg maxθ̂⁺ Σ(x,y)∈D log Prθ̂⁺(y|x) (4.1)
θ̃ parameterهای optimizeشده پس از fine-tuning و θ̂⁺ adjustment بر parameterهای pre-trained است. برای سادهکردن notation در ادامه از θ استفاده میشود، اما fine-tuning از parameterهای pre-trained آغاز میشود، نه random initialization.
log-probability output با جمع log-probability توکنهای y، مشروط به input و tokenهای قبلی، محاسبه میشود:
log Prθ(y|x) = Σi=1n log Prθ(y_i | x, y_{<i}) (4.2)
این formulation معادل کمینهکردن cross-entropy loss است.
اگر x و y را به sequence واحد seq_{x,y}=[x,y] متصل کنیم، language modeling عمومی روی joint probability است:
log Prθ(seq_{x,y}) = log Prθ(x,y) = log Prθ(x) + log Prθ(y|x) (4.3)
در SFT جملهٔ اول، یعنی loss مربوط به تولید input x، صفر قرار داده میشود و فقط output loss محاسبه میگردد. بنابراین با LLM استاندارد قابل پیادهسازی است: forward pass معمولی و در backward pass loss بخش input برابر صفر.
شکل ۴.۲ — Supervised fine-tuning. input و output به یک sequence متصل میشوند؛ forward pass عادی است، اما در backward pass loss فقط برای output محاسبه و loss input صفر میشود.
در نتیجه SFT را میتوان به فرم language model training نوشت:
θ̃ = arg maxθ Σ(x,y)∈D log Prθ(seq_{x,y}) (4.4)
بحث بالا single-round prediction بود: input یک بار داده و output یکباره تولید میشود. اما در practice، multi-round prediction مانند dialogue نیز مهم است. مثال healthcare chatbot:
User: مدتی است خیلی خستهام.
Chatbot: متأسفم. غیر از خستگی علامت دیگری هم داشتهاید؟
User: بله، سردردهای مکرر هم دارم.
Chatbot: این علائم از چه زمانی شروع شدهاند؟
User: حدود یک هفته.
Chatbot: بهتر است با یک healthcare professional مشورت کنید. میخواهید برای appointment کمک کنم؟
User: بله، لطفاً بعد از ساعت کاری باشد.
Chatbot: چهارشنبه و پنجشنبهٔ آینده بعد از 5 PM وقت وجود دارد. کدام روز بهتر است؟
...
اگر K round مکالمه {x₁,y₁,...,x_K,y_K} داشته باشیم، x_k user request و y_k response است. هدف بیشینهکردن مجموع log-probability responseها با توجه به conversational history است:
θ̃ = arg maxθ Σk=1K log Prθ(y_k | x₁,y₁,...,x_k) (4.5)
اجرای مستقیم به K بار اجرای LLM نیاز دارد. روش efficientتر، محاسبهٔ loss همهٔ responseها در یک run روی sequence کامل [x₁,y₁,...,x_K,y_K] است:
log Prθ(seq)=log Pr(x₁)+log Pr(y₁|x₁)+...+log Pr(x_K|x₁,y₁,...,y_{K−1})+log Pr(y_K|x₁,y₁,...,x_K) (4.6)
loss مربوط به user inputها یعنی جملههای Pr(x_k|history) صفر و فقط probability responseها محاسبه میشود. بنابراین مقدار مؤثر معادلهٔ (۴.۶) با هدف (۴.۵) برابر است:
θ̃ = arg maxθ Σseq∈D log Prθ(seq) (4.7)
شکل ۴.۳ — SFT برای conversational model. مکالمهٔ متناوب user/chatbot یک sequence واحد در نظر گرفته میشود، اما loss فقط برای responseهای LLM محاسبه میشود و loss user turnها صفر است.
پیادهسازی SFT از نظر بنیادی شبیه language model training است، اما در عمل ملاحظات مهمی دارد:
- نیاز به labeled data: برخلاف pre-training که raw text فراوان است، annotation و selection دادهٔ SFT ساده نیست. data باید هم از نظر quantity کافی و هم high-quality و مرتبط با taskهای واقعی باشد. در عین حال باید با data کمتر fine-tune کرد تا هزینهٔ computation و data construction کاهش یابد. کیفیت LLM اغلب به data SFT حساس است، بنابراین data باید دقیق توسعه و بررسی شود.
- هزینهٔ محاسباتی: update میلیاردها parameter به compute و memory زیاد و HPC گران نیاز دارد. راههایی مانند pruning، quantization و training algorithm efficient بررسی شدهاند. بهویژه parameter-efficient fine-tuning، از جمله soft promptها، میتواند هزینه را کاهش دهد [Houlsby et al., 2019; Hu et al., 2022; Han et al., 2024].
- خطر فراموشی و overfit: SFT یک post-training step است که باید مزایای pre-training را حفظ کند و adjustment جدید بیفزاید. fine-tuning گسترده روی data زیاد میتواند generalization را کاهش دهد یا catastrophic forgetting ایجاد کند. regularization، early stopping، learning rate کوچک و data متنوع از domainهای مختلف راههای کاهش این خطرند. در practice، SFT نیازمند engineering و experiment دقیق است.