تخطَّ إلى المحتوى
11/30الفصل 11 من 30

من Base Model إلى Assistant: ‏SFT وRLHF وDPO وGRPO

لماذا لا تجيب النماذج الأساسية عن الأسئلة؟ شرح SFT وRLHF وDPO وGRPO وكيف يحوّل post-training predictor إلى assistant.

في هذه الصفحة

اطلبوا من GPT-2 — وهو نموذج لغوي مدرّب مسبقًا بكفاءة — أن يكتب هايكو عن البحر:

TEXT
prompt: Write a haiku about the sea.

The sea is a beautiful place.

The sea is a beautiful place.

The sea is a beautiful place.

The sea is a beautiful place.

The sea is a beautiful place.

هو ليس مرتبكًا، ولم يفشل في أداء مهمته. إنه يفعل بالضبط ما درّبه عليه الفصل 10: أن يأخذ نصًا ما، ثم ينتج نصًا لاحقًا محتملًا. على الإنترنت، غالبًا ما تتبع سطرًا مثل اكتب هايكو عن البحر. فقرة نثرية عن البحر، والجملة التي ظهرت للتو تكون مرشحة على نحو غير معتاد للظهور مرة أخرى. النموذج predictor ممتاز للـnext-token، لكنه assistant عديم الفائدة.

والآن الطلب نفسه إلى نموذج بُني بالطريقة نفسها — Qwen2.5، بنصف مليار parameter، أي أربعة أضعاف حجم GPT-2 أعلاه ومع ذلك ما يزال صغيرًا بأي معيار في 2026 — بعد مراحل التدريب التي يدور حولها هذا الفصل:

TEXT
Whispers of the ocean,
Silent depths where waves meet,
Mysteries in the vast blue.

أربعة أضعاف عدد parameters لا تعلّم النموذج أن يتوقف عن الكلام. الفجوة بين هذين الخرجين ليست الحجم، ولا البنية، ولا حجم البيانات. إنها post-training: مرحلة ثانية، أصغر من التدريب المسبق بعدة مراتب، تأخذ text predictor وتحوله إلى شيء يجيب.

المرحلة الأولى: أن نريه شكل الإجابة

رابط إلى القسم: المرحلة الأولى: أن نريه شكل الإجابة

الخطوة الأولى هي الأقل بريقًا، وهي التي تنجز معظم العمل. اجمعوا أمثلة لتعليمات مقترنة بردود جيدة، ثم واصلوا التدريب عليها بالخسارة نفسها من الفصل 8 — توقّع token التالي — لكن على جزء الرد فقط. هذا هو supervised fine-tuning، أو SFT.

لا يُعلَّم النموذج شيئًا جديدًا عن اللغة. ما يُعلَّم له هو صيغة: أن نصًا بهذا الشكل يتبعه نص بذلك الشكل، ثم يتوقف. انظروا مجددًا إلى فشل base model. لقد أجاب عن السؤال في الجملة الأولى، ثم لم يستطع التوقف، لأن لا شيء في تدريبه كان يعلّم نهاية الرد. التوقف سلوك متعلَّم.

ولهذا أيضًا يحتاج النموذج إلى أن يُخبَر أين تقع الحدود، وهذا ما تفعله chat template:

TEXT
<|im_start|>system
You are Qwen, created by Alibaba Cloud. You are a helpful assistant.<|im_end|>
<|im_start|>user
What is the capital of France?<|im_end|>
<|im_start|>assistant

علامتا <|im_start|> و<|im_end|> هما tokens حقيقية في المفردات، أُضيفتا قبل fine-tuning، ورآهما النموذج ملايين المرات في هذه المواضع بالضبط. بهما يعرف من دوره الآن وأين تنتهي دورة الكلام.

تجاوزوا template وقدّموا للنموذج سؤالًا عاريًا، وستعطونه تسلسلًا لم يره في التدريب. قياسًا، النموذج نفسه، والسؤال نفسه، وgreedy decoding نفسه:

من دون template — السلسلة الخام What is the capital of France?:

TEXT
 The capital of France is Paris.

To verify this, I will use a simple
Python code snippet to confirm that
Paris is indeed the capital city of
France.

[...and then it starts writing a
Python script to check its own answer]

مع template:

TEXT
The capital of France is Paris.

الإجابة صحيحة في الحالتين، لكن من دون العلامات ينجرف النموذج إلى كتابة Python ليتحقق من نفسه، لأن prompt الذي تلقاه لا يشبه شيئًا دُرّب عليه في fine-tuning. هذا هو السبب الأكثر شيوعًا لعبارة «النموذج صار أغبى عندما ناديته مباشرة»: template ليست زخرفة حول النموذج، إنها جزء من النموذج، وtemplate الخاطئة تدهور صامت بلا خطأ ظاهر.

المرحلة الثانية، والمشكلة التي وُجدت لحلها

رابط إلى القسم: المرحلة الثانية، والمشكلة التي وُجدت لحلها

لـSFT سقف، وهذا السقف هو البيانات. لكي تجري fine-tuning على عرض توضيحي، تحتاج إلى شخص يكتب الرد المثالي — وبالنسبة إلى معظم الأسئلة المهمة، كتابة إجابة جيدة صعبة وبطيئة ومكلفة، وتنتج إجابة واحدة فقط لا يمكنك التحقق من جودتها.

ما يجيده الناس هو المقارنة. عند عرض ردين، يستطيع المعلّق أن يقول بثقة أيهما أفضل خلال ثوانٍ قليلة، من دون أن يكون قادرًا على إنتاج أيٍّ منهما. هذه هي الحقيقة التي تُبنى عليها المرحلة الثانية بأكملها، وهي الجزء الذي تقلبه معظم الشروح رأسًا على عقب:

البشر لا يكتبون الإجابات. إنهم يرتبون الأزواج.

إذًا البيانات هي أزواج — prompt، وردان، وأيهما فاز. لا يمكن إدخال ذلك في خسارة next-token، لأنه لا توجد سلسلة هدف. يحتاج الأمر إلى آلة مختلفة.

لا يمكنك أن تطلب من إنسان تقييم كل رد أثناء التدريب — فذلك يعني ملايين الأحكام. لذلك تدرّب نموذجًا ليقلّد البشر: reward model يأخذ ردًا ويعيد عددًا scalar.

تدريبه من المقارنات يستخدم نتيجة من عام 1952. يقول نموذج Bradley–Terry2 إنه إذا كان لعنصرين قوتان كامنتان، فإن احتمال فوز أحدهما على الآخر هو logistic function للفارق بينهما. اقلبوا ذلك فيصبح loss: بما أن إنسانًا فضّل ywy_w على yly_l، عظّموا

P(ywyl)=σ(r(yw)r(yl))P(y_w \succ y_l) = \sigma\big(r(y_w) - r(y_l)\big)

والذي يكون في code حلقة التدريب كلها:

reward_model.pyPYTHON
loss = -F.logsigmoid(reward(chosen) - reward(rejected)).mean()   

لاحظوا ما لا يراه النموذج أبدًا: درجة مطلقة. إنه لا يتعلم إلا الفروق، وهذا بالضبط ما تحتويه البيانات.

والآن الجزء الجدير بالقياس. يتعلم reward model ما كافأه المعلّقون، والمعلّقون بشر. إليكم محاكاة تكون فيها الجودة الحقيقية للرد معتمدة فقط على كونه مفيدًا وصحيحًا — الطول لا يساوي شيئًا — لكن المعلّق المحاكى لديه تفضيل خفيف للإجابات الأطول عندما تكون بقية الأمور متقاربة، وهذا تحيز بشري موثق جيدًا. درّبوا reward model على 2000 مقارنة واقرؤوا أوزانه:

تحيز المعلّق للطولالوزن المتعلَّم على الفائدةعلى الصحةعلى الطول
0.0+1.00+1.00+0.01
0.3+0.98+1.00+0.15
0.6+0.97+1.00+0.27
1.2+1.00+0.99+0.59

reward model يعمل على نحو مثالي. لقد تعلّم بأمانة التفضيلات التي عُرضت عليه — بما في ذلك الجزء من تلك التفضيلات الذي لا علاقة له بالجودة. reward model ليس مقياسًا للجيد؛ إنه مقياس لما اختاره المعلّقون، وكل تحيز في مجموعة التعليقات أصبح الآن معاملًا في دالة قابلة للتفاضل يوشك نموذج أكبر بكثير على تحسينها.

وهذا يقودنا إلى ما يحدث عندما تحسّنه. أعطوا السياسة ميزانية ثابتة من الجهد لتوزعها على خصائص الرد، مع عدم تناظر واقعي: أن تكون مفيدًا وأن تكون صحيحًا مكلفان، أما أن تكون أطول فرخيص — ما عليك إلا مواصلة الكتابة.

المكافأة لكل وحدة جهد، للنموذج المدرّب أعلاه: الفائدة 8.26، الصحة 8.31، الطول 31.70. الطول يدفع ما يقارب أربعة أضعاف الصحة، ليس لأن reward model معطوب، بل لأن الطول رخيص.

حسّنوا وفق تلك المكافأة وراقبوا الرقمين:

درجة reward modelالجودة الحقيقيةالطول الناتج
السياسة الابتدائية12.5880.9743.365
بعد التحسين31.6960.00012.497

ارتفعت المكافأة بمقدار 2.5 مرة. أما الشيء الذي كان يفترض بالمكافأة أن تقيسه فقد هبط إلى الصفر. اكتشفت السياسة أنها تستطيع تسجيل نتيجة عالية جدًا بالكتابة مطولًا من دون قول شيء، ولم يكن في أي جزء من حلقة التدريب طريقة لملاحظة ذلك، لأن reward model هو تعريف الجيد داخل الحلقة.

هذا هو reward hacking، وإذا تساءلتم يومًا لماذا تكون chat models مسهبة جدًا، فهذا الجدول جزء كبير من الإجابة.

الدفاع القياسي هو معاقبة السياسة إذا ابتعدت كثيرًا عن نقطة بدايتها، مع قياس المسافة باستخدام تباعد KL من الفصل 4:

objective=E[r(y)]βDKL(πθπref)\text{objective} = \mathbb{E}\big[r(y)\big] - \beta \, D_{\mathrm{KL}}\big(\pi_\theta \,\|\, \pi_{\text{ref}}\big)

المرجع πref\pi_{\text{ref}} هو نموذج SFT — السياسة قبل مرحلة التعزيز. الادعاء هو أن هذا يمنع النموذج من الانجراف إلى سلوك منحط. لنرَ كم يبقى من هذا الادعاء عند القياس. الإعداد نفسه، مع مسح β\beta:

β\betaالمكافأةالجودة الحقيقيةالطولKL
031.6990.00012.4982.994
131.6970.00012.4972.993
528.3180.28510.7002.163
1512.8601.5422.5520.151
3010.4261.7191.3030.025
609.6321.7690.9080.005
النموذج المرجعي وحده9.1621.7910.6870

اقرؤوا الصف الأخير مقابل البقية. عند β=0\beta = 0 وβ=1\beta = 1 لا تفعل العقوبة شيئًا على الإطلاق: قيمة المكافأة أكبر بكثير من KL بحيث يدفع المحسّن الغرامة ويخترق على أي حال. بين 5 و15 يتأرجح السلوك. وبحلول β=60\beta = 60، عادت الجودة الحقيقية إلى 1.769 — وهي ما تزال أقل من 1.791 التي كان يملكها النموذج المرجعي قبل بدء أي من هذا.

تحذير واحد قبل أن يُقتبس ذلك الرقم في أي مكان: 1.791 في الصف الأخير و0.974 التي يعطيها الجدول الأول لـالسياسة الابتدائية قياسان مختلفان للنموذج نفسه قبل RL، أخذاهما التجربتان كلٌ على حدة. قارنوا الصفوف داخل الجدول، لا بين الجداول — خلاصة كل جدول قائمة على صفوفه، ولا تعتمد أي منهما على baseline الآخر.

لذلك فالملخص الصادق ليس «عقوبة KL تمنع reward hacking». بل هو:

عقوبة KL لا تمنع reward hacking. إنها تحد مقدار ابتعاد السياسة عن المرجع — وبما أن الفشل يتطلب الحركة، فهذا يساعد. لكنها رباط، لا تصحيح: عند β\beta المنخفض ينقطع الرباط، وعند β\beta المرتفع تستعيد النموذج المرجعي، ولا تشتري المرحلة المكلفة كلها شيئًا.

النطاق المفيد ضيق، وموقعه يعتمد على reward model، ولا توجد طريقة للعثور عليه إلا بالنظر. لهذا يجب أن يكون النموذج المرجعي جيدًا — KL أرضية عند جودة المرجع، وليس سقفًا على الفشل — وهذا سبب كبير في أن هذه المرحلة صعبة عمليًا لا مبدئيًا.

الخوارزمية التي جعلت هذا يعمل على نطاق واسع هي Proximal Policy Optimization.3 في فقرة واحدة: تقدّر ميزة كل رد، وتحدّث السياسة لزيادة احتمال الردود فوق baseline، وتقص حجم أي تحديث منفرد حتى لا يستطيع تقدير ميزة كبير أن يدمر السياسة في خطوة واحدة. وعند تطبيقها على نماذج اللغة4 يعني ذلك إبقاء أربعة نماذج في اللعب في الوقت نفسه — السياسة، والمرجع، وreward model، وcritic — مع توليد السياسة عينات جديدة طوال التدريب.

هي تعمل، وقد أنتجت InstructGPT وكل ما انحدر منه، وهي صعبة بصدق: أربعة نماذج في الذاكرة، sampling داخل حلقة التدريب، وسمعة مستحقة بعدم الاستقرار. الادعاء بأن بإمكانك تنفيذها في تدوينة سيكون غير أمين، لذلك لا يفعل هذا الفصل ذلك.

ما حل محلها في معظم الأغراض جاء من ملاحظة شيء. للهدف المنتظم بـKL أعلاه سياسة مثلى ذات صيغة مغلقة، ويمكن عكس ذلك التعبير: يمكن كتابة المكافأة بدلالة السياسة المثلى والمرجع. استبدال ذلك داخل خسارة Bradley–Terry يجعل reward model يختفي تمامًا. ما يبقى هو loss بإشراف على أزواج التفضيل — لا sampling، ولا critic، ولا reward model، ونموذجان في الذاكرة بدلًا من أربعة.

هذا هو Direct Preference Optimization،5 وهو سطران:

dpo.pyPYTHON
def dpo_loss(pi_w, pi_l, ref_w, ref_l, beta=0.1):
    """pi_* and ref_* are summed log-probabilities of a full response."""
    logits = beta * ((pi_w - ref_w) - (pi_l - ref_l))   
    return -F.logsigmoid(logits)                        

اقرؤوا ما يقوله. الكمية التي تُدفع إلى الأعلى هي مقدار ما تفضّل به السياسة الفائز أكثر مما فعل المرجع، ناقص مقدار ما تفضّل به الخاسر أكثر. المرجع ليس عقوبة تُركّب لاحقًا — إنه داخل loss، ولهذا لا يحتاج DPO إلى حد KL منفصل.

الخاصية الأهم موجودة في gradient. قيّموا loss وgradient على الزوج نفسه في خمس حالات مختلفة للسياسة:

حالة السياسةlossمقدار gradient
تفضّل الفائز بقوة بالفعل0.51300.0401
تفضّله بالفعل، بضعف0.66850.0488
مطابقة للمرجع0.69310.0500
تفضّل الخاسر0.79810.0550
تفضّل الخاسر بقوة1.00550.0634

يكبر gradient كلما زاد خطأ السياسة. الأزواج التي يتعامل معها النموذج جيدًا لا تسهم إلا قليلًا؛ والأزواج التي يقلبها تهيمن على التحديث. DPO يزن كل مثال بحسب مقدار خطأ السياسة الحالية فيه، تلقائيًا، من دون جدولة — وآلية الوزن الذاتي هذه هي ما يؤدي العمل الذي كان يقوم به تقدير الميزة وcritic في PPO. (قيمة loss في الصف الثالث هي تمامًا ln2\ln 2، وهي المرساة التي يجب التحقق منها في أي تنفيذ: سياسة مطابقة لمرجعها لم تتعلم شيئًا ويجب أن تقف عند ln2\ln 2.)

GRPO6 يسلك طريقًا مختلفًا للخروج من المشكلة نفسها. يبقي حلقة sampling لكنه يحذف critic: بدلًا من تدريب نموذج لتوقع baseline، يأخذ عينة من مجموعة ردود على prompt نفسه ويستخدم متوسط مكافأة المجموعة baseline مباشرة. ميزة الرد هي مقدار كونه أفضل من أشقائه. هذا يستبدل نموذجًا كاملًا بدفعة أكبر، وهو ما جعل التدريب على مكافآت قابلة للتحقق — موضوع الفصل 12 — عمليًا.

عرض التفاصيل

ثلاث قطع أخرى من مشهد post-training، بإيجاز.

RLAIF وConstitutional AI.7 ليس من الضروري أن يكون المعلّق إنسانًا. أعطوا نموذجًا مجموعة مبادئ مكتوبة واطلبوا منه نقد مخرجاته وتنقيحها، أو الاختيار بين مرشحين، وستحصلون على مجموعة بيانات تفضيل بسرعة الآلة وتكلفتها. الاعتراض البديهي — النموذج يصحح واجبه بنفسه — حقيقي، والإجابة الصادقة هي أن الأمر يعمل أفضل مما يبدو لأن الحكم أسهل من التوليد، وهو عدم التناظر نفسه الذي يقوم عليه الفصل كله.

LIMA، وكم يحتاج هذا من بيانات قليلة.8 ألف عرض منسّق بعناية أنتجت assistant منافسًا. التفسير المقترح هو أن التدريب المسبق ثبّت بالفعل المعرفة والصيغة، وأن post-training لا يحتاج إلا إلى اختيار أي من سلوكيات النموذج الموجودة سيظهر. إن كان ذلك صحيحًا، فجودة بيانات post-training تطغى على كميتها — وسلوك المجال منذ ذلك الحين يوحي بأن الناس يصدقون ذلك.

LoRA وQLoRA.910 Fine-tuning كل وزن في نموذج كبير يتطلب ذاكرة للأوزان وgradients الخاصة بها وحالة المحسّن — ستة عشر بايت لكل parameter من الفصل 10، فوق المتوسطين اللذين بناهما الفصل 6 يدويًا — على نطاق يحتاج إلى عنقود. LoRA يجمّد الأوزان الأصلية ويدرب زوجًا منخفض الرتبة من المصفوفات بجانبها، ما يخفض parameters القابلة للتدريب بمراتب كثيرة؛ أما QLoRA فيكمّم base المجمّد إلى 4 bits أيضًا. كلاهما يُعرض هنا بوصفه تقنية. أما هل fine-tuning هو الشيء الصحيح لإنفاق المال عليه أصلًا فذلك سؤال آخر، وهو سؤال الفصل 20.

ضريبة alignment، والسؤال الذي لم يجب عنه أحد

رابط إلى القسم: ضريبة alignment، والسؤال الذي لم يجب عنه أحد

شيئان يجب حملهما إلى الأمام.

الأول أن لهذه المرحلة كلفة، وتظهر في القدرة. غالبًا ما تصبح النماذج أسوأ قابلية للقياس في بعض مهام benchmark بعد تدريب alignment — ضريبة alignment — لأن الهدف تغيّر: الرد الآمن، المتحفظ، والمنسق جيدًا ليس دائمًا الرد الذي يعظّم الدقة. بعض هذه الفجوة عولج هندسيًا، وبعضها مقايضة حقيقية لا خطأ يجب إصلاحه.

الثاني هو السؤال الذي تخفيه كلمة aligned. aligned مع من؟ السلسلة هي: شركة تكتب إرشادات، ومتعهدون يفسرونها، ومقارناتهم تدرّب reward model، وreward model يشكل سياسة، والسياسة تجيب عن سؤال من شخص لم يرَ أيًا من ذلك. كل حلقة اختيار قام به أشخاص محددون، ولا تملك أي من الخوارزميات في هذا الفصل رأيًا حول ما إذا كانت تلك الاختيارات جيدة.

هذه ليست زخرفة بلاغية. إنها السبب الملموس في أن نموذجين frontier يرفضان طلبات مختلفة، ولماذا يغيّر النموذج نفسه رأيه بين الإصدارات، ولماذا تكون كلمة «aligned» وصفًا لـعملية لا خاصية في قطعة أثرية. الرياضيات في هذا الفصل محسومة. ذلك الجزء ليس محسومًا.

علّم post-training النموذج أن يجيب. لكنه لم يعلّمه أن يفكر قبل الإجابة، والاثنان مختلفان بطريقة يتبين أنها قابلة للتدريب.

الفصل 12 يدور حول ما يحدث عندما تسمحون للنموذج بإنفاق مزيد من الحوسبة على سؤال صعب وقت الإجابة بدلًا من وقت التدريب — chain of thought، وreinforcement learning من مكافآت قابلة للتحقق، والسبب في أن النموذج الذي يعرض عمله لا يشرح نفسه فحسب بل يحسب بطريقة مختلفة. كما يسدد دين هذا الفصل: يوجد GRPO فيه، يؤدي العمل الذي كان critic في PPO يقوم به، على مكافآت لا تحتاج إلى معلّق أصلًا لأن البرهان إما أن يتحقق أو لا يتحقق.


الأجيال أعلاه تأتي من gpt2 وQwen/Qwen2.5-0.5B-Instruct مع greedy decoding، لذلك تتكرر بالضبط. الفصل 11 من Hugging Face LLM Course يشرح SFT وDPO باستخدام trl وpeft إذا أردتم تشغيل الشيء الحقيقي بدلًا من المحاكاة؛ والفصل 7 من كتاب Sebastian Raschka Build a Large Language Model (From Scratch) ينفذ instruction fine-tuning من البداية إلى النهاية من دون مكتبة.

  1. Sutton, R. S. and Barto, A. G. Reinforcement Learning: An Introduction, 2nd edition (MIT Press, 2018). الإحالة مقصودة: مربع المفردات أعلاه هو أصغر مجموعة فرعية قابلة للاستخدام، والموضوع الحقيقي كتاب كامل.

  2. Bradley, R. A. and Terry, M. E. Rank Analysis of Incomplete Block Designs: I. The Method of Paired Comparisons. Biometrika 39(3/4), pp. 324–345 (1952). نموذج المقارنة الزوجية الكامن تحت كل reward model مستخدم اليوم.

  3. Schulman, J., Wolski, F., Dhariwal, P., Radford, A. and Klimov, O. Proximal Policy Optimization Algorithms. arXiv:1707.06347 (2017).

  4. Ouyang, L. et al. Training language models to follow instructions with human feedback. arXiv:2203.02155 (2022). InstructGPT — الورقة التي جعلت الوصفة ثلاثية المراحل معيارًا. سبقتها Christiano et al. (arXiv:1706.03741)، التي قدّمت تعلم reward model من المقارنات البشرية، وStiennon et al. (arXiv:2009.01325)، التي طبّقته على التلخيص.

  5. Rafailov, R., Sharma, A., Mitchell, E., Ermon, S., Manning, C. D. and Finn, C. Direct Preference Optimization: Your Language Model is Secretly a Reward Model. arXiv:2305.18290 (2023). الاشتقاق الذي يزيل reward model في القسم 4، ويستحق القراءة كاملًا؛ إنه أقصر من سمعته.

  6. Shao, Z. et al. DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models. arXiv:2402.03300 (2024). يقدّم GRPO في القسم 4.1.

  7. Bai, Y. et al. Constitutional AI: Harmlessness from AI Feedback. arXiv:2212.08073 (2022).

  8. Zhou, C. et al. LIMA: Less Is More for Alignment. arXiv:2305.11206 (2023).

  9. Hu, E. J. et al. LoRA: Low-Rank Adaptation of Large Language Models. arXiv:2106.09685 (2021).

  10. Dettmers, T., Pagnoni, A., Holtzman, A. and Zettlemoyer, L. QLoRA: Efficient Finetuning of Quantized LLMs. arXiv:2305.14314 (2023).

هل أنت مستعد لتترك الاختيار لـ LIA؟

ابنِ بكل نماذج الذكاء الاصطناعي في مكان واحد — ابدأ مجانًا اليوم.