نماذج ومنصات الذكاء الاصطناعي

تحسين التفضيل المباشر: دليل كامل

mm
أضف Unite.AI إلى مصادرك المفضلة على Google

تحقيق التوازن بين نماذج اللغة الكبيرة (LLM) والقيم والإهتمامات البشرية يعتبر تحديًا. الطرق التقليدية، مثل تعلم التعزيز من خلال التغذية الراجعة البشرية (RLHF)، ساهمت في طريقنا من خلال دمج المدخلات البشرية لتحسين مخرجات النموذج. ومع ذلك، يمكن أن يكون RLHF معقدًا ومكلفًا من حيث الموارد، مما يتطلب قدرة حسابية كبيرة ومعالجة البيانات. يظهر تحسين التفضيل المباشر (DPO) كنهج جديد ومبسّط، يقدم بديلًا كفؤًا لهذه الطرق التقليدية. من خلال تبسيط عملية التحسين، يقلل DPO من العبء الحاسوبي ويعزز أيضًا قدرة النموذج على التكيف بسرعة مع التفضيلات البشرية.

في هذا الدليل، سنغوص في عمق DPO، مستكشفين أسسه وتطبيقاته العملية.

الحاجة إلى محاذاة التفضيل

لفهم DPO، من المهم فهم لماذا يعتبر محاذاة نماذج LLM مع التفضيلات البشرية أمرًا مهمًا. على الرغم من قدراتها المذهلة، يمكن أن تنتج نماذج LLM المتدربة على مجموعات بيانات كبيرة أحيانًا مخرجات غير متسقة أو متحيزة أو غير متوافقة مع القيم البشرية. يمكن أن تظهر هذه الانحرافات بطرق مختلفة:

  • توليد محتوى غير آمن أو ضار
  • توفير معلومات غير دقيقة أو مضللة
  • إظهار التحيزات الموجودة في بيانات التدريب

لمعالجة هذه القضايا، قام الباحثون بتطوير تقنيات لتعديل نماذج LLM باستخدام التغذية الراجعة البشرية. وأبرز هذه النهجيات طريقة تعلم التعزيز من التغذية الراجعة البشرية (RLHF).

فهم RLHF: السابق لتحسين التفضيل المباشر

كان تعلم التعزيز من التغذية الراجعة البشرية (RLHF) هو الأسلوب المعتمد لتحقيق محاذاة بين نماذج LLM والتفضيلات البشرية. دعونا نناقش عملية RLHF لتفهم تعقيداتها:

أ) التدريب الموجه المتقدم (SFT): تبدأ العملية بتعديل نموذج LLM مدرب مسبقًا على مجموعة بيانات من الاستجابات عالية الجودة. يساعد هذا الخطوة النموذج على توليد مخرجات أكثر صلة ومتسقة للاختبار المستهدف.

ب) نمذجة المكافأة: يتم تدريب نموذج مكافأة منفصل لتنبؤ بالتفضيلات البشرية. يتضمن هذا:

  • توليد أزواج استجابة لمحفزات معينة
  • طلب من البشر تقييم أي استجابة يفضلونها
  • تدريب نموذج لتنبؤ هذه التفضيلات

ج) تعلم التعزيز: يتم تعديل نموذج LLM المعدل باستخدام تعلم التعزيز. توفر نموذج المكافأة التغذية الراجعة، مما يوجه نموذج LLM لتوليد استجابات تتوافق مع التفضيلات البشرية.

هنا نموذج بايثون بسيط لتوضيح عملية RLHF:

على الرغم من فعالية RLHF، إلا أنه يوجد بعض العيوب:

  • يتطلب تدريب وضبط نماذج متعددة (SFT، نموذج المكافأة، ونموذج RL المُحسّن)
  • يمكن أن يكون عملية RL غير مستقرة وحساسة للمتغيرات
  • يتطلب كمية كبيرة من العمليات الحسابية، مما يتطلب العديد من المرور عبر النماذج

أدى هذه القيود إلى البحث عن بدائل أبسط وأكثر كفاءة، مما أدى إلى تطوير DPO.

تحسين التفضيل المباشر: المفاهيم الأساسية

تحسين التفضيل المباشر https://arxiv.org/abs/2305.18290

تحسين التفضيل المباشر https://arxiv.org/abs/2305.18290

هذه الصورة تظهر فرقين بين نهجين لتحقيق محاذاة بين مخرجات نماذج LLM والتفضيلات البشرية: تعلم التعزيز من التغذية الراجعة البشرية (RLHF) و تحسين التفضيل المباشر (DPO). يعتمد RLHF على نموذج مكافأة لتوجيه سياسة نموذج اللغة من خلال حلقات التغذية الراجعة المتكررة، بينما يُحسّن DPO مباشرةً مخرجات النموذج لتوافق الاستجابات المفضلة البشرية باستخدام بيانات التفضيل. هذا المقارنة يسلط الضوء على نقاط القوة والتطبيقات المحتملة لكل نهج، مما يوفر رؤى حول كيفية تدريب نماذج LLM المستقبلية لتحقيق محاذاة أفضل مع التوقعات البشرية.

الأفكار الرئيسية وراء DPO:

أ) نمذجة المكافأة الضمنية: يلغي DPO الحاجة إلى نموذج مكافأة منفصل عن طريق معاملة نموذج اللغة نفسه كدالة مكافأة ضمنية.

ب) صياغة السياسة: بدلاً من تحسين دالة المكافأة، يُحسّن DPO مباشرةً السياسة (نموذج اللغة) لزيادة احتمالية الاستجابات المفضلة.

ج) الحل المغلق: يعتمد DPO على رؤية رياضية تتيح حلًا مغلقًا لسياسة مثالية، مما يجنب الحاجة إلى تحديثات RL المتكررة.

تنفيذ DPO: جولة عملية في الكود

تظهر الصورة التالية شفرة بايثون لتنفيذ دالة خسارة DPO باستخدام PyTorch. هذه الدالة تلعب دورًا حاسمًا في تعديل كيفية تقديم نماذج اللغة لمخرجاتها بناءً على التفضيلات البشرية. هنا تفصيل للمكونات الرئيسية:

  • التوقيع الدالة: تأخذ دالة dpo_loss عدة معاملات، بما في ذلك احتمالات لوغارتمية للسياسة (pi_logps)، احتمالات لوغارتمية لنموذج المرجع (ref_logps)، وفهرس مفضل و غير مفضل (yw_idxs، yl_idxs). بالإضافة إلى ذلك، يتحكم معامل beta في قوة جزاء KL.
  • استخراج الاحتمالات اللوغارتمية: يتم استخراج الاحتمالات اللوغارتمية للاستجابات المفضلة و غير المفضلة من كلا نموذجي السياسة و المرجع.
  • حساب النسبة اللوغارتمية: يتم حساب الفرق بين الاحتمالات اللوغارتمية للاستجابات المفضلة و غير المفضلة لكلا نموذجي السياسة و المرجع. هذا النسبة حاسم في تحديد اتجاه و حجم التحسين.
  • حساب الخسارة و المكافأة: يتم حساب الخسارة باستخدام دالة logsigmoid، بينما يتم تحديد المكافآت عن طريق تسجيل الفرق بين احتمالات لوغارتمية السياسة و نموذج المرجع مع معامل beta.
دالة خسارة DPO باستخدام PyTorch

دالة خسارة DPO باستخدام PyTorch

دعونا نغوص في الرياضيات وراء DPO لفهم كيف يتحقق هذه الأهداف.

رياضيات DPO

DPO هو إعادة صياغة ماهرة لمشكلة تعلم التفضيل. هنا تفصيل خطوة بخطوة:

أ) النقطة البداية: تحسين المكافأة الخاضعة لقيود KL

يمكن التعبير عن الهدف الأصلي ل RLHF على النحو التالي:

الصيغة الرياضية المعقدة في الصورة التالية تمثل دالة الخسارة المستخدمة في تحسين التفضيل المباشر (DPO)، وهي طريقة تدريب متقدمة لتعديل كيفية محاذاة مخرجات نماذج LLM مع التفضيلات البشرية.

حيث:
  • πθ هي سياسة النموذج (نموذج اللغة) الذي نحسنه
  • r(x,y) هي دالة المكافأة
  • πref هي سياسة مرجع (عادة نموذج SFT الأولي)
  • β يتحكم في قوة تقييد الانحراف KL

ب) الشكل المثالي للسياسة: يمكن إثبات أن الشكل المثالي للسياسة لهذا الهدف يأخذ الشكل:

π_r(y|x) = 1/Z(x) * πref(y|x) * exp(1/β * r(x,y))

حيث Z(x) هو ثابت تعديل.

ج) تضاد المكافأة و السياسة: رؤية DPO الرئيسية هي التعبير عن دالة المكافأة بدلالة السياسة المثالية:

r(x,y) = β * log(π_r(y|x) / πref(y|x)) + β * log(Z(x))

د) نموذج التفضيل: افتراضًا أن التفضيلات تتبع نموذج برادلي-تيري، يمكن التعبير عن احتمالية تفضيل y1 على y2 على النحو التالي:

p*(y1 ≻ y2 | x) = σ(r*(x,y1) - r*(x,y2))

حيث σ هي دالة اللوجستيك.

ه) هدف DPO من خلال استبدال تضاد المكافأة-السياسة في نموذج التفضيل، نحصل على هدف DPO:

L_DPO(πθ; πref) = -E_(x,y_w,y_l)~D [log σ(β * log(πθ(y_w|x) / πref(y_w|x)) - β * log(πθ(y_l|x) / πref(y_l|x)))]

يمكن تحسين هذا الهدف باستخدام تقنيات الانحدار التدرجي القياسية، دون الحاجة إلى خوارزميات RL.

تنفيذ DPO

الآن، بعد فهم النظرية وراء DPO، دعونا ننظر كيفية تنفيذه في الممارسة. سنستخدم بايثون و بايتورش في هذا المثال:

import torch
import torch.nn.functional as F

<p>class DPOTrainer:
def __init__(self, model, ref_model, beta=0.1, lr=1e-5):
self.model = model
self.ref_model = ref_model
self.beta = beta
self.optimizer = torch.optim.AdamW(self.model.parameters(), lr=lr)</p>

<p>def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs):
&quot;&quot;&quot;
pi_logps: احتمالات لوغارتمية للسياسة، شكل (B,)
ref_logps: احتمالات لوغارتمية لنموذج المرجع، شكل (B,)
yw_idxs: فهرس الاستجابات المفضلة في [0, B-1]، شكل (T,)
yl_idxs: فهرس الاستجابات غير المفضلة في [0, B-1]، شكل (T,)
beta: درجة حرارة تتحكم في قوة جزاء KL</p>

<p>كل زوج من (yw_idxs[i], yl_idxs[i]) يمثل فهرس زوج مفضل.</p>

<p># استخراج الاحتمالات اللوغارتمية للاستجابات المفضلة و غير المفضلة
pi_yw_logps, pi_yl_logps = pi_logps[yw_idxs], pi_logps[yl_idxs]
ref_yw_logps, ref_yl_logps = ref_logps[yw_idxs], ref_logps[yl_idxs]</p>

<p># حساب النسبة اللوغارتمية
pi_logratios = pi_yw_logps - pi_yl_logps
ref_logratios = ref_yw_logps - ref_yl_logps</p>

<p># حساب خسارة DPO
losses = -F.logsigmoid(self.beta * (pi_logratios - ref_logratios))
rewards = self.beta * (pi_logps - ref_logps).detach()</p>

return losses.mean(), rewards

<p>def train_step(self, batch):
x, yw_idxs, yl_idxs = batch
self.optimizer.zero_grad()</p>

<p># حساب الاحتمالات اللوغارتمية لنموذج السياسة و نموذج المرجع
pi_logps = self.model(x).log_softmax(-1)
ref_logps = self.ref_model(x).log_softmax(-1)</p>

<p># حساب الخسارة
loss, _ = self.compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs)
loss.backward()
self.optimizer.step()</p>

return loss.item()

<p># الاستخدام
model = YourLanguageModel() # 初始化 نموذجك
ref_model = YourLanguageModel() # تحميل نموذج المرجع المسبق
trainer = DPOTrainer(model, ref_model)</p>

<p>for batch in dataloader:
loss = trainer.train_step(batch)
print(f&quot;الخسارة: {loss}&quot;)

التحديات والتوجيهات المستقبلية

على الرغم من أن DPO يقدم ميزات كبيرة مقارنة بالنهجيات التقليدية ل RLHF، لا تزال هناك تحديات ومناطق للبحث:

أ) قابلية التوسع إلى نماذج أكبر:

بما أن نماذج اللغة تزداد حجمًا، يبقى تطبيق DPO بشكل فعال على نماذج تحتوي على مئات المليارات من المعاملات تحديًا مفتوحًا. يبحث الباحثون في تقنيات مثل:

  • طرق التعديل الفعالة (مثل LoRA، تعديل البREFIX)
  • تحسينات التدريب الموزع
  • نقاط التحقق للانحدار و التدريب بدقة مختلطة

مثال لاستخدام LoRA مع DPO:


<p>from peft import LoraConfig, get_peft_model</p>

<p>class DPOTrainerWithLoRA(DPOTrainer):
def __init__(self, model, ref_model, beta=0.1, lr=1e-5, lora_rank=8):
lora_config = LoraConfig(
r=lora_rank,
lora_alpha=32,
target_modules=[&quot;q_proj&quot;, &quot;v_proj&quot;],
lora_dropout=0.05,
bias=&quot;none&quot;,
task_type=&quot;CAUSAL_LM&quot;
)
self.model = get_peft_model(model, lora_config)
self.ref_model = ref_model
self.beta = beta
self.optimizer = torch.optim.AdamW(self.model.parameters(), lr=lr)</p>

<p># الاستخدام
base_model = YourLargeLanguageModel()
dpo_trainer = DPOTrainerWithLoRA(base_model, ref_model)

ب) التكيف المتعدد و التكيف بأقل عدد من الشوت:

تطوير تقنيات DPO التي يمكن أن تتكيف بفعالية مع مهام جديدة أو مجالات مع بيانات تفضيل محدودة هي منطقة نشطة للبحث. النهجيات التي يتم استكشافها تشمل:

  • إطارات التعلم المتعددة للتعديل السريع
  • تعديل البREFIX ل DPO
  • تعلم النقل من نماذج تفضيل عامة إلى مجالات محددة

ج) التعامل مع التفضيلات الغامضة أو المتضاربة:

البيانات الحقيقية للتفضيلات غالبًا ما تحتوي على غموض أو تضارب. تحسين متانة DPO لهذه البيانات أمر بالغ الأهمية. الحلول المحتملة تشمل:

  • نمذجة التفضيل الاحتمالية
  • التعلم النشط لحل الغموض
  • تجميع تفضيلات متعدد الوكلاء

مثال لنمذجة التفضيل الاحتمالية:


<p>class ProbabilisticDPOTrainer(DPOTrainer):
def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs, preference_prob):
# حساب النسبة اللوغارتمية
pi_yw_logps, pi_yl_logps = pi_logps[yw_idxs], pi_logps[yl_idxs]
ref_yw_logps, ref_yl_logps = ref_logps[yw_idxs], ref_logps[yl_idxs]</p>

<p>log_ratio_diff = pi_yw_logps.sum(-1) - pi_yl_logps.sum(-1)
loss = -(preference_prob * F.logsigmoid(self.beta * log_ratio_diff) +
(1 - preference_prob) * F.logsigmoid(-self.beta * log_ratio_diff))
return loss.mean()</p>

<p># الاستخدام
trainer = ProbabilisticDPOTrainer(model, ref_model)
loss = trainer.compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs, preference_prob=0.8) # 80% ثقة في التفضيل

د) دمج DPO مع تقنيات محاذاة أخرى:

دمج DPO مع نهجيات محاذاة أخرى يمكن أن يؤدي إلى أنظمة أكثر متانة وقدرة:

  • مبادئ الذكاء الاصطناعي الدستورية لتحقيق الالتزام الصريح بالقيود
  • المناقشة ونمذجة المكافأة التكرارية لاستخلاص تفضيلات معقدة
  • التعلم العكسي للمكافأة لفهم دوافع الوظائف المكافئة

مثال لدمج DPO مع مبادئ الذكاء الاصطناعي الدستورية:


<p>class ConstitutionalDPOTrainer(DPOTrainer):
def __init__(self, model, ref_model, beta=0.1, lr=1e-5, constraints=None):
super().__init__(model, ref_model, beta, lr)
self.constraints = constraints or []</p>

<p>def compute_loss(self, pi_logps, ref_logps, yw_idxs, yl_idxs):
base_loss = super().compute_loss(pi_logps, ref_logps, yw_idxs, yl_idxs)</p>

<p>constraint_loss = 0
for constraint in self.constraints:
constraint_loss += constraint(self.model, pi_logps, ref_logps, yw_idxs, yl_idxs)</p>

return base_loss + constraint_loss

<p># الاستخدام
def safety_constraint(model, pi_logps, ref_logps, yw_idxs, yl_idxs):
# تنفيذ منطق الفحص الأمني
unsafe_score = compute_unsafe_score(model, pi_logps, ref_logps)
return torch.relu(unsafe_score - 0.5) # الجزاء إذا كان درجة الخطر &gt; 0.5</p>

<p>constraints = [safety_constraint]
trainer = ConstitutionalDPOTrainer(model, ref_model, constraints=constraints)</p>

الاعتبارات العملية وافضل الممارسات

عند تطبيق DPO في التطبيقات الواقعية، يجب مراعاة النصائح التالية:

أ) جودة البيانات: جودة بيانات التفضيل حاسمة. تأكد من أن مجموعتك البيانية:

  • تغطي مجموعة واسعة من المدخلات وسلوكيات المرغوبة
  • تحتوي على تعليمات تفضيل متسقة وموثوقة
  • تتوازن بين أنواع مختلفة من التفضيلات (مثل الحقائق، السلامة، الأسلوب)

ب) ضبط المتغيرات: على الرغم من أن DPO له متغيرات أقل من RLHF، لا تزال عملية الضبط مهمة:

  • β (بيتا): يتحكم في التوازن بين تحقيق التفضيل و الانحراف عن نموذج المرجع. ابدأ بقيم حول 0.1-0.5.
  • معدل التعلم: استخدم معدل تعلم أقل من التعديل القياسي، عادة في النطاق 1e-6 إلى 1e-5.
  • حجم الدفعة: عادة ما تعمل دفعات أكبر (32-128) جيدًا لتعلم التفضيل.

ج) التحسين التكراري: يمكن تطبيق DPO بشكل تكراري:

  1. تدريب نموذج أولي باستخدام DPO
  2. توليد استجابات جديدة باستخدام النموذج المدرب
  3. جمع بيانات تفضيل جديدة على هذه الاستجابات
  4. إعادة التدريب باستخدام مجموعة البيانات الموسعة

 

تحسين التفضيل المباشر

أداء تحسين التفضيل المباشر

تظهر هذه الصورة أداء نماذج LLM مثل GPT-4 مقارنة بالحكم البشري عبر تقنيات تدريب مختلفة، بما في ذلك تحسين التفضيل المباشر (DPO) و التدريب الموجه المتقدم (SFT) و تحسين السياسة القريبة (PPO). الجدول يُظهر أن مخرجات GPT-4 تتوافق بشكل متزايد مع التفضيلات البشرية، خاصة في مهام الملخصات. مستوى الاتفاق بين GPT-4 و المراجعين البشر يظهر قدرة النموذج على توليد محتوى يتوافق مع التقييمات البشرية، بشكل قريب من المحتوى الذي يُنشئه البشر.

دراسات الحالة والتطبيقات

لتوضيح فعالية DPO، دعونا ننظر إلى بعض التطبيقات الواقعية ومتغيراتها:

  • تحسين التفضيل المباشر التكراري: تم تطويره بواسطة Snorkel (2023)، هذا المتغير يدمج عينة الرفض مع DPO، مما يسمح بعملية اختيار أكثر دقة لبيانات التدريب. من خلال التكرار عبر عدة جولات من عينة التفضيل، يمكن للنموذج تعزيز القدرة على التعميم وتجنب الانحراف إلى تفضيلات مشوشة أو متحيزة.
  • IPO (تحسين التفضيل التكراري): قدمه Azar et al. (2023)، IPO يضيف مصطلح تنظيم لمنع الانحراف، وهو مشكلة شائعة في تحسين التفضيل. تمديد هذا يسمح للنماذج بالحفاظ على توازن بين الالتزام بالتفضيلات و الحفاظ على القدرات العامة.
  • KTO (تحسين النقل): متغير أحدث من Ethayarajh et al. (2023)، KTO يتخلى عن التفضيلات الثنائية تمامًا. بدلاً من ذلك، يركز على نقل المعرفة من نموذج المرجع إلى نموذج السياسة، مع تحسينه لتحقيق توافق أكثر سلاسة وثبات مع القيم البشرية.
  • تحسين التفضيل المباشر متعدد الوضعيات للتعلم عبر المجالات بواسطة Xu et al. (2024): نهج حيث يتم تطبيق DPO عبر وضعيات مختلفة – نص، صورة، صوت – مما يظهر مرونته في محاذاة النماذج مع التفضيلات البشرية عبر أنواع بيانات متنوعة. هذا البحث يسلط الضوء على إمكانية DPO في إنشاء أنظمة ذكاء اصطناعي شاملة قادرة على التعامل مع مهام معقدة ومتعددة الوضعيات.

الختام

يُعتبر تحسين التفضيل المباشر تمثل تقدمًا كبيرًا في محاذاة نماذج اللغة مع التفضيلات البشرية. بساطته، كفاءته، وفعاليته تجعله أداة قوية للباحثين والممارسين على حد سواء.

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

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