PEFT documentation

DEFT: الضبط الدقيق الفعال التفكيكي لنماذج النص إلى صورة

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.21.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

DEFT: الضبط الدقيق الفعال التفكيكي لنماذج النص إلى صورة

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

بشكل محدد، يجمع DEFT بين مكوّنين منخفضي الرتبة قابلين للتدريب: (1) إسقاط على مكمّل فضاء جزئي منخفض الرتبة يولّده مصفوفة منخفضة الرتبة، و(2) تحديث منخفض الرتبة. تحدد المصفوفة منخفضة الرتبة الأولى الفضاء الجزئي، بينما يتيح التحديث منخفض الرتبة الثاني تكيّفًا مرنًا للمعاملات داخل ذلك الفضاء الجزئي.

متى يُستخدم DEFT: يُعدّ الأنسب لتكييف نموذج مع بيانات أو مفاهيم جديدة مع الحفاظ على قدرة النموذج الأساسي على اتباع التعليمات بل وتحسينها، مع إبقاء نسبة نسيان قدراته السابقة في أدنى حد.

لكل طبقة مستهدفة، يتعلم DEFT اتجاه إسقاط P (بشكل out_features x r) ومصفوفة حقن R (بشكل r x in_features). الوزن الفعّال هو الإسقاط المتبقي

W' = (I - P_proj) @ W + Q_P @ R

يشتق المُسقط P_proj من P وفقاً لـdecomposition_method:

  • "relu" (الافتراضي): Q_P = P، P_proj = P @ relu(P).T — إسقاط غير متعامد.
  • "qr": Q_P = qr(P)، P_proj = Q_P @ Q_P.T — إسقاط متعامد.

تزيل حد (I - P_proj) @ W فضاءً فرعيًا من الأوزان المُسبقة التدريب، بينما يحقن Q_P @ R محتوى جديدًا فيه. بشكل افتراضي (init_weights=True) يتم تهيئة R بحيث تكون التحديثات هويةً دقيقة عند التهيئة (W' == W)، وبالتالي يبدأ التدريب من الأوزان المُسبقة التدريب ويتعلم عملية الحقن. التحديث مكافئ لـ دلتا إضافية منخفضة الرتبة Q_P @ (R - right.T @ W)، والتي تُحسب دون تشكيل مصفوفة الإسقاط out x out على الإطلاق، ويمكن دمجها في الأوزان الأساسية للنشر دون الحاجة إلى استدلال إضافي.

تحديد para=True يختار متغير PaRa (خفض رتبة المعاملات): وهو تحديث يعتمد على الإزالة فقط W' = (I - P_proj) @ W يحتفظ فقط بحذف الفراغ الجزئي ويتخلى عن الحقن. يتم تدريب الإسقاط P فقط (بدون مصفوفة حقن R)، لذا فإن المكيّف ليس هوية عند التهيئة. تم تقديم PaRa لتخصيص نماذج الانتشار من النص إلى الصورة، وهو متاح هنا كحالة خاصة من DEFT.

يُنفَّذ DEFT حاليًا لطبقات torch.nn.Linear وConv1D (مثل gpt-2، عبر fan_in_fan_out). تتوفر النسخة الأصلية من التنفيذ والتجارب الواردة في الورقة (Dreambooth، Dreambench Plus، InsDet، VisualCloze، على Stable Diffusion ونموذج موحّد) على github.com/MAXNORM8650/DEFT.

إذا كنت تستخدم DEFT في عملك، فيرجى الاستشهاد بالورقة البحثية:

@article{kumar2026deft,
  title={DEFT: Decompositional Efficient Fine-Tuning for Text-to-Image Models},
  author={Kumar, Komal and Anwer, Rao and Shahbaz Khan, Fahad and Khan, Salman and Laptev, Ivan and Cholakkal, Hisham},
  journal={Advances in Neural Information Processing Systems},
  volume={38},
  pages={102009--102035},
  year={2026}
}

إذا كنت تستخدم متغير PaRa (para=True)، فيرجى الاستشهاد أيضاً بـ:

@inproceedings{chen2025personalizing,
  title={Para: Personalizing text-to-image diffusion via parameter rank reduction},
  author={Chen, Shangyu and Pan, Zizheng and Cai, Jianfei and Phung, Dinh},
  booktitle={International Conference on Learning Representations},
  year={2025}
}

DeftConfig

فئة peft.DeftConfig

< >

( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falser: int = 8target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonedecomposition_method: Literal['relu', 'qr'] = 'relu'init_scale: float = 1.0alpha: Optional[int] = Nonepara: bool = Falsefan_in_fan_out: bool = Falsedeft_dropout: float = 0.0init_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = None )

المعاملات

  • r (int) — رتبة الإسقاط/الحقن الخاص بـ DEFT عبر الطبقات.
  • target_modules (Optional[Union[List[str], str]]) — أسماء الوحدات التي سيتم تطبيق المُكيّف عليها. إذا تم تحديد هذا، فسيتم استبدال الوحدات التي تحمل الأسماء المحددة فقط. عند تمرير نص، سيتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، سيتم إجراء مطابقة دقيقة أو يتم التحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص الممررة. إذا تم تحديده على أنه ‘all-linear’، فسيتم اختيار جميع الوحدات الخطية، باستثناء طبقة الإخراج. إذا لم يتم تحديده، فسيتم اختيار الوحدات وفقًا لبنية النموذج. إذا لم تكن البنية معروفة، فسيتم رفع خطأ — في هذه الحالة، يجب عليك تحديد الوحدات المستهدفة يدويًا.
  • exclude_modules (Optional[Union[List[str], str]]) — أسماء الوحدات التي لا يُطبَّق عليها المُكيّف. عند تمرير نص، يتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، يتم إجراء مطابقة دقيقة أو يُتحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص المُمرَّرة.
  • decomposition_method (str) — كيف يُشتق المُسقط P_proj من P. إما "relu" (الافتراضي، غير متعامد P @ relu(P).T) أو "qr" (متعامد Q_P @ Q_P.T).
  • init_scale (float) — التحجيم المطبَّق على الانحراف المعياري المستخدم لتبديل مصفوفة الحقن R (يُستخدم فقط عندما init_weights=False). تحافظ القيم الأصغر على التحديث المُحقن أقرب إلى الصفر عند التهيئة. القيمة الافتراضية هي 1.0.
  • alpha (Optional[int]) — عامل التوسيع للحد الحقن، والذي يتم توسيعه بواسطة alpha / r (على غرار alpha في LoRA). إذا كان None، فلا يُطبق أي توسيع (عامل 1.0). لا يتأثر حد إزالة الفضاء الجزئي.
  • para (bool) — ما إذا كان سيتم استخدام طريقة PaRa: إزالة النطاق الفرعي النقي (delta = -P_proj @ W) دون حد حقن. عند تعيين True، لا يتم إنشاء R، وP هو المصفوفة القابلة للتدريب الوحيدة، ولا يمكن أن يكون المُكيّف هوية عند التهيئة. القيمة الافتراضية هي False (DEFT الكامل).
  • fan_in_fan_out (bool) — اضبط هذا على True إذا كانت الطبقة التي سيتم استبدالها تخزن الأوزان على شكل (fan_in, fan_out). على سبيل المثال، يستخدم gpt-2 Conv1D الذي يخزن الأوزان على شكل (fan_in, fan_out) وبالتالي يجب ضبط هذا على True.
  • deft_dropout (float) — احتمالية الإسقاط (dropout) المطبقة على مدخل الطبقة. القيمة الافتراضية هي 0.0.
  • init_weights (bool) — ما إذا كان سيتم استخدام التهيئة الافتراضية (الهوية) الخاصة بـ DEFT لأوزان المُكيّف، بحيث يكون المُكيّف غير مؤثر في بداية التدريب. لا تغيّر هذا الإعداد إلا إذا كنت تعرف بالضبط ما تفعله. القيمة الافتراضية هي True.
  • layers_to_transform (Union[List[int], int]) — فهارس الطبقات المراد تحويلها. إذا تم تمرير قائمة من الأعداد الصحيحة، فسيتم تطبيق المُكيّف على فهارس الطبقات المحددة في هذه القائمة. أما إذا تم تمرير عدد صحيح واحد، فسيتم تطبيق التحويلات على الطبقة الموجودة عند هذا الفهرس.
  • layers_pattern (Optional[Union[List[str], str]]) — اسم نمط الطبقة، يُستخدم فقط إذا كان layers_to_transform مختلفاً عن None. يجب أن يستهدف هذا nn.ModuleList الخاص بالنموذج، والذي يُسمى غالباً 'layers' أو 'h'.
  • bias (str) — نوع الانحياز لـ DEFT. يمكن أن يكون 'none' أو 'all' أو 'deft_only'.
  • modules_to_save (List[str]) — قائمة بالوحدات، بخلاف طبقات المُكيِّف (adapter)، التي يجب تعيينها قابلة للتدريب وحفظها في نقطة الفحص النهائية.

هذه هي فئة الإعدادات لتخزين إعدادات DeftModel.

يُنفّذ DEFT (التدريب الدقيق الفعال التفكيكي) حقن المعرفة من خلال تحديث إسقاط متبقي. بالنسبة لوزن أساسي مجمّد W، يتم تعلّم اتجاه إسقاط منخفض الرتبة P (بشكل out_features x r) ومصفوفة حقن R (بشكل r x in_features). الوزن المُكيّف هو W' = (I - P_proj) @ W + Q_P @ R، حيث يُشتق المُسقط P_proj من P وفقاً لـ decomposition_method:

  • "relu" (الافتراضي): Q_P = P، P_proj = P @ relu(P).T (إسقاط غير متعامد)
  • "qr": Q_P = qr(P)، P_proj = Q_P @ Q_P.T (إسقاط متعامد)

بشكل افتراضي (init_weights=True) يتم تهيئة R بحيث تكون التحديثات مطابقة تمامًا للهوية عند التهيئة (حيث يساوي الوزن المُكيَّف W)، وبالتالي يبدأ التدريب من الأوزان المُسبقة التدريب ويتعلم الحقن.

DeftModel

فئة peft.DeftModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module

المعاملات

  • model (torch.nn.Module) — النموذج الذي ستُربط به طبقات مُعدِّل المُكيّف (adapter tuner).
  • config (DeftConfig) — إعدادات نموذج DEFT.
  • adapter_name (str) — اسم المُكيّف، القيمة الافتراضية هي "default".
  • low_cpu_mem_usage (bool, optional, defaults to False) — إنشاء أوزان مُكيّف فارغة على جهاز meta. مفيد لتسريع عملية التحميل.

يعيد

torch.nn.Module

نموذج DEFT.

ينشئ نموذج DEFT (التدريب الدقيق الفعال التفكيكي) من نموذج مُدرَّب مسبقًا.

يقوم DEFT بتجميد الأوزان الأساسية ويتعلم، لكل وحدة هدف، اتجاه إسقاط منخفض الرتبة P ومصفوفة حقن R. يصبح الوزن الفعّال (I - P_proj) @ W + Q_P @ R، حيث يُستبدل جزء من فضاء W بمحتوى جديد محقون (انظر DeftConfig لمعرفة متغيرات decomposition_method المتاحة).

الخصائص:

  • النموذج (~torch.nn.Module) — النموذج الذي سيتم تكييفه.
  • peft_config (DeftConfig): إعدادات نموذج DEFT.
Update on GitHub