PEFT documentation
مونتوكلورا (مونتوكلوورا)
مونتوكلورا (مونتوكلوورا)
هذا متغيّر من LoRA، وبالتالي كل ما هو ممكن باستخدام LoRA صالح لهذه الطريقة ما لم يُذكر خلاف ذلك في هذه الصفحة.
يغلّف MonteCLoRA مُكيّف LoRA قياسيًّا بوحدة تباينية صغيرة ترسم عينات مونت كارلو من الاضطرابات العشوائية فوق مصفوفة A الخاصة بـ LoRA أثناء التدريب. وبشكل محدد، يتعلم معاملات تباينية (تباين مبني على توزيع Wishart، وحَد ضوضاء طبيعي متعدد المتغيرات لكل عينة، وترجيح توزيع Dirichlet على العينات) ويضيف الاضطراب المُتوسط الناتج إلى lora_A في كل تمريرة أمامية. يُضاف حدّ تباعد KL + إنتروبيا إلى خسارة التدريب للحفاظ على تثبيت هذه المعاملات التباينية على مسبق معقول. في وقت الاستدلال، يُعطَّل المُعيّن ويتصرف MonteCLoRA تمامًا مثل مُكيّف LoRA عادي، لذا لا يوجد تكلفة استدلال إضافية أو معاملات إضافية للدمج. للاطلاع على الطريقة الكاملة راجع https://huggingface.co/papers/2411.04358.
قد ترغب في النظر في MonteCLoRA عندما:
- أنت تقوم بضبط دقيق على مجموعة بيانات صغيرة أو مليئة بالضوضاء، وتريد تنظيمًا أقوى من LoRA العادي. تعمل عملية المتوسطات بطريقة مونت كارلو مع حد KL معًا كمنظم بأسلوب بايزي.
- تريد الحصول على معايرة أفضل لعدم اليقين / متانة أعلى من مُكيّفك دون دفع تكلفة إضافية في وقت الاستدلال (فآلية التباين تُستخدم في التدريب فقط).
- تتسبب تقنية LoRA الأساسية في الإفراط في التخصيص، ولا يكفي خفض
rأو زيادةlora_dropout.
ربما لا تحتاج إلى MonteCLoRA عندما تمتلك مجموعة بيانات كبيرة ونظيفة، وكان LoRA العادي يتدرّب بشكل مستقر بالفعل — في ذلك النطاق، تضيف المعاملات التباينية الإضافية في الغالب عبئًا على التدريب دون فائدة كبيرة.
لتفعيل MonteCLoRA، مرّر MontecloraConfig إلى LoraConfig:
from peft import LoraConfig, MontecloraConfig
monteclora_config = MontecloraConfig(
num_samples=8, # number of Monte Carlo samples per forward pass
sample_scaler=1e-4, # magnitude of the variational perturbation
kl_loss_weight=1e-5, # weight of the KL term added to the training loss
)
config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
monteclora_config=monteclora_config,
)أثناء التدريب، يجب عليك إضافة خسارة التنظيم التبايني إلى خسارة المهمة. أبسط طريقة هي استدعاء LoraModel._get_monteclora_loss() على LoraModel الأساسي:
task_loss = ... # standard loss returned by your model
monteclora_loss = model._get_monteclora_loss() # 0.0 if MonteCLoRA is not used
total_loss = task_loss + monteclora_loss
total_loss.backward()إذا كنت تتدرب باستخدام Trainer الخاص بـ HF، يمكنك ببساطة دمج peft.helpers.MontecloraTrainerMixin الذي يقوم بذلك نيابةً عنك في compute_loss:
from transformers import Trainer
from peft.helpers import MontecloraTrainerMixin
class MontecloraTrainer(MontecloraTrainerMixin, Trainer):
passيتوفر مثال عملي كامل في examples/monteclora_finetuning.
واجهة برمجة التطبيقات
MonteCloraConfig
فئة peft.MontecloraConfig
< source >( num_samples: int = 8use_entropy: bool = Falsedirichlet_prior: float = 0.1sample_scaler: float = 0.0001kl_loss_weight: float = 1e-05buffer_size: int = 150 )
المعاملات
- num_samples (
int) — عدد عينات مونت كارلو التي يجب سحبها في كل تمريرة أمامية. تمنح القيم الأعلى عادةً تدريبًا أكثر سلاسة وتقديرات أفضل لعدم اليقين، لكنها تزيد من استهلاك الحوسبة والذاكرة. خفّض هذه القيمة إذا كان التدريب بطيئًا جدًا أو إذا كانت الذاكرة محدودة، وزِدها إذا كان التدريب مستقرًا وتريد متوسط مونت كارلو أقوى. - use_entropy (
bool) — ما إذا كان يجب إضافة حد تنظيمي للإنتروبيا يمنع انهيار أوزات مونت كارلو إلى عينة واحدة. فعّل هذا الخيار إذا لاحظت أن المُعيّن يصبح شديد الحدة أو إذا كنت ترغب في تنظيم أقوى؛ واتركه معطلاً لمحاكاة LoRA القياسية بشكل أدق. - dirichlet_prior (
float) — معامل التركيز للسابق ديريشليت على أوزان العينات/الخبراء. تدفع القيم الأكبر الأوزان لتكون أكثر تجانساً (تنظيم أقوى، وتشتت أقل)، بينما تشجع القيم الموجبة الأصغر أوزاً أكثر تشتتاً وذروات أكثر حدة. زد القيمة إذا كان المُعيّن (sampler) يعاني من الإفراط في التخصيص (overfitting)، وانقصها (مع إبقائها > 0) إذا كان متحفظاً جداً. - sample_scaler (
float) — عامل التوسيع الكلي للاضطرابات المُستخرجة التي تُطبَّق على أوزان LoRA. زيادة هذا العامل تجعل ضجيج مونت كارلو أقوى (مما يزيد من التنظيم والاستكشاف، لكنه يزيد أيضًا من عدم استقرار التدريب)؛ بينما إنقاصه يجعل السلوك أقرب إلى LoRA الحتمي القياسي. ضبطه قريبًا جدًا من 0 يُعطِّل تأثير Monteclora إلى حد كبير. - kl_loss_weight (
float) — وزن حد تباعد كولباك-ليبلر بين التوزيع التبايني وأصله. تزيد القيم الأكبر من التركيز على مطابقة الأصل (تنظيم أقوى، وقد يؤدي إلى عدم ملاءمة كافية)؛ بينما تعتمد القيم الأصغر بشكل أكبر على احتمال البيانات (تنظيم أضعف، وقد يؤدي إلى ملاءمة زائدة). اضبط هذا المعامل إذا لاحظت أن Monteclora تُفرط في تنظيم المُكيّف أو تُهمل ذلك. - buffer_size (
int) — حجم المخزن المؤقت الداخلي المستخدم بواسطة عينة مونت كارلو (مثل تخزين الإحصاءات الحديثة). يمكن للقيم الأكبر أن تُثبّت المعاملات التباينية المقدّرة على حساب ذاكرة إضافية؛ قلّل هذا إذا كانت الذاكرة محدودة.
هذه فئة التهيئة الفرعية لتخزين إعدادات Monteclora (التكيّف منخفض الرتبة باستخدام مونت كارلو). تُقدّم Monteclora الاستدلال التبايني إلى LoRA من خلال إضافة أخذ عينات مونت كارلو إلى أوزان المُكيِّف.
في الممارسة العملية، يمكنك التفكير في Monteclora على أنها تضيف اضطرابات عشوائية متعلمة فوق أوزان LoRA للحصول على مُكيّف (adapter) مُعاير بشكل أفضل وأكثر تنظيمًا. تتيح لك الحُجج أدناه الموازنة بين الاستقرار، وقوة التنظيم، وتكلفة الحساب.