# DeLoRA: التكيف منخفض الرتبة المنفصل
[DeLoRA](https://huggingface.co/papers/2503.18225) هي تقنية لضبط دقيق فعّال من حيث المعاملات، تحافظ ضمنياً على حدّ فروبينيوس بالنسبة للأوزان المُسبقة التدريب عن طريق تطبيع مصفوفات منخفضة الرتبة القابلة للتعلم وتغيير مقياسها. وهذا يفصل بفعالية بين تعلّم الاتجاهات (حدّ BA) وحجم (حدّ الحدّ) تحديثات الأوزان، مما يتجنّب التغيّرات الكارثية في الأوزان المُكيّفة ويعزز المتانة تجاه اختيارات المعاملات الفائقة.

ملاحظة:
- استخدم معدل تعلّم أكبر بمقدار 10 إلى 100 مرة من المعدّل المستخدم في متغيرات LoRA القياسية (القيم النموذجية تبدأ من 1e-3/1e-2/..)
- تأكد من أن معامل الحد الأولي lambda ليس صغيرًا جدًا (القيم النموذجية حوالي 10/15/..). من الممكن تعيين قيم lambda مختلفة للطبقات المختلفة

تخضع DeLoRA حاليًا للقيود التالية:
- يتم دعم طبقات nn.Linear فقط.
- لا يتم دعم الطبقات المُكمّاة.

إذا لم تكن هذه القيود مناسبة لحالتك، فكّر في استخدام طرق أخرى بدلاً منها.

ملخص الورقة البحثية هو:

> حققت أساليب الضبط الدقيق الفعّال من حيث المعاملات (PEFT) شعبية كبيرة مؤخرًا بفضل التوفر الواسع النطاق للنماذج المُسبقة التدريب على نطاق كبير. تتيح هذه الأساليب التكيف السريع مع المهام اللاحقة بتكلفة حسابية ضئيلة. ومع ذلك، تُظهر أساليب الضبط الدقيق الشائعة مثل LoRA محدودية في المتانة عندما يتعلق الأمر باختيار المعاملات الفائقة أو أنظمة التدريب الممتدة، مما يمنع تحقيق أداء مثالي جاهز للاستخدام. على النقيض من ذلك، توفر الأساليب المحدودة، مثل ETHER، متانة أكبر لكنها تقتصر على التكيفات ذات الرتبة المنخفضة للغاية والتحويلات ذات القوة الثابتة، مما يقلل من قدرة التعبير عن التكيف. في هذا العمل، نقترح الضبط المنفصل منخفض الرتبة (DeLoRA)، وهو أسلوب ضبط دقيق جديد يقوم بتطبيع وتوسيع المصفوفات القابلة للتعلم منخفضة الرتبة. من خلال تحديد مسافة التحويل، يفصل DeLoRA بفعالية التعلم الزاوي عن قوة التكيف، مما يعزز المتانة دون المساس بالأداء. من خلال التقييمات على توليد الصور الموجهة بالموضوع، وفهم اللغة الطبيعية، وضبط التعليمات، نُظهر أن DeLoRA يطابق أداء أساليب PEFT المنافسة أو يتفوق عليه، مع إظهار متانة أقوى.

## نظرة عامة على الاختبارات

<iframe src="https://peft-internal-testing-peft-method-comparison-embed.hf.space/?highlight[type]=DELORA" frameborder="0" width="850" height="1000"
>

# واجهة برمجة التطبيقات

## DeloraConfig[[peft.DeloraConfig]]

#### peft.DeloraConfig[[peft.DeloraConfig]]

```python
peft.DeloraConfig(task_type: Optional[Union[str, TaskType]] = None, peft_type: Optional[Union[str, PeftType]] = None, auto_mapping: Optional[dict] = None, peft_version: Optional[str] = None, base_model_name_or_path: Optional[str] = None, revision: Optional[str] = None, inference_mode: bool = False, r: int = 8, delora_lambda: int = 15, module_dropout: float = 0.0, target_modules: Optional[Union[list[str], str]] = None, exclude_modules: Optional[Union[list[str], str]] = None, bias: Literal['none', 'all', 'delora_only'] = 'none', init_weights: bool = True, layers_to_transform: Optional[Union[list[int], int]] = None, layers_pattern: Optional[Union[list[str], str]] = None, rank_pattern: Optional[dict] = <factory>, lambda_pattern: Optional[dict] = <factory>, modules_to_save: Optional[list[str]] = None)
```

[المصدر](https://github.com/huggingface/peft/blob/main/src/peft/tuners/delora/config.py#L24)

**المعاملات:**

r (`int`) : رتبة مُكيّف DeLoRA.

delora_lambda (`int`) : القيمة الأولية للحدّ الخاص بمكيّف DeLoRA. تُحدّد هذه المتغيّرة حدًّا أقصى لطبيعية فروبينيوس لتغيّر الأوزان، مما يمنع النموذج المُعدَّل من الانحراف بشكل كبير عن النموذج الأصلي.

module_dropout (`float`) : احتمال إسقاط (dropout) لإيقاف وحدات DeLoRA أثناء التدريب.

target_modules (`Optional[Union[List[str], str]]`) : أسماء الوحدات التي سيتم تطبيق المُكيّف عليها. إذا تم تحديد هذا، فسيتم استبدال الوحدات التي تحمل الأسماء المحددة فقط. عند تمرير نص، سيتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، سيتم إجراء مطابقة دقيقة أو يتم التحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص الممررة. إذا تم تحديد هذا على أنه 'all-linear'، فسيتم اختيار جميع وحدات linear/Conv1D، باستثناء طبقة الإخراج. إذا لم يتم تحديده، فسيتم اختيار الوحدات وفقًا لبنية النموذج. إذا لم تكن البنية معروفة، فسيتم رفع خطأ -- في هذه الحالة، يجب عليك تحديد الوحدات المستهدفة يدويًا.

exclude_modules (`Optional[Union[List[str], str]]`) : أسماء الوحدات التي لا يُطبَّق عليها المُكيّف. عند تمرير نص، يتم إجراء مطابقة باستخدام تعبير نمطي. عند تمرير قائمة من النصوص، يتم إما إجراء مطابقة دقيقة أو التحقق مما إذا كان اسم الوحدة ينتهي بأي من النصوص المُمرَّرة.

bias (`str`) : نوع الانحياز لـ DeLoRA. يمكن أن يكون 'none' أو 'all' أو 'delora_only'. إذا كان 'all' أو 'delora_only'، فسيتم تحديث الانحيازات المقابلة أثناء التدريب. انتبه إلى أن هذا يعني أنه حتى عند تعطيل المحوِّلات، لن ينتج النموذج نفس المخرجات التي كان سينتجها النموذج الأساسي دون تكيّف.

init_weights (`bool`) : ما إذا كان سيتم تنفيذ تهيئة أوزان المُكيّف. إذا كان `True` (الافتراضي): يتم تهيئة A باستخدام تهيئة kaiming uniform، بينما يتم تهيئة B باستخدام الأصفار. إذا كان `False`: يتم تهيئة كل من A و B باستخدام kaiming uniform، مما يساهم فورًا في دلتا غير صفرية. يُنصح عمومًا بعدم استخدام هذا النمط للاستخدام العادي.

layers_to_transform (`Union[List[int], int]`) : فهارس الطبقات المراد تحويلها. إذا تم تمرير قائمة من الأعداد الصحيحة، فسيتم تطبيق المُكيّف على فهارس الطبقات المحددة في هذه القائمة. أما إذا تم تمرير عدد صحيح واحد، فسيتم تطبيق التحويلات على الطبقة الموجودة عند هذا الفهرس.

layers_pattern (`Optional[Union[List[str], str]]`) : اسم نمط الطبقة، يُستخدم فقط إذا كان `layers_to_transform` مختلفًا عن `None`. يجب أن يستهدف هذا `nn.ModuleList` الخاص بالنموذج، والذي يُسمى غالبًا `'layers'` أو `'h'`.

rank_pattern (`dict`) : الترميز من أسماء الطبقات أو تعبيرات النمط المنتظم إلى الرتب التي تختلف عن الرتبة الافتراضية المحددة بواسطة `r`. على سبيل المثال، `{'^model.decoder.layers.0.encoder_attn.k_proj': 16}`.

lambda_pattern (`dict`) : الترميز من أسماء الطبقات أو تعبيرات regexp إلى دوال lambda التي تختلف عن دالة lambda الافتراضية المحددة بواسطة `delora_lambda`. على سبيل المثال، `{'^model.decoder.layers.0.encoder_attn.k_proj': 16}`.

modules_to_save (`Optional[List[str]]`) : قائمة الوحدات التي يجب ضبطها لتكون قابلة للتدريب وحفظها في نقطة الفحص النهائية، باستثناء طبقات المحوّل.

هذه هي فئة الإعدادات لتخزين إعدادات [DeloraModel](/docs/peft/main/ar/package_reference/delora#peft.DeloraModel).

## DeloraModel[[peft.DeloraModel]]

#### peft.DeloraModel[[peft.DeloraModel]]

```python
peft.DeloraModel(model, peft_config: Union[PeftConfig, dict[str, PeftConfig]], adapter_name: str, low_cpu_mem_usage: bool = False, state_dict: Optional[dict[str, torch.Tensor]] = None)
```

[المصدر](https://github.com/huggingface/peft/blob/main/src/peft/tuners/delora/model.py#L28)

**المعاملات:**

model (`torch.nn.Module`) : النموذج الذي سيتم تكييفه.

config ([DeloraConfig](/docs/peft/main/ar/package_reference/delora#peft.DeloraConfig)) : إعدادات نموذج DeLoRA.

adapter_name (`str`) : اسم المُكيِّف، القيمة الافتراضية هي `"default"`.

**يعيد:** `torch.nn.Module`

نموذج DeLoRA.

ينشئ نموذج DeLoRA من نموذج transformers مُدرَّب مسبقًا.

يُوصف هذا الأسلوب بالتفصيل في [DeLoRA: Decoupled Low-rank Adaptation](https://huggingface.co/papers/2503.18225).

**الخصائص**:
- **النموذج** ([PreTrainedModel](https://huggingface.co/docs/transformers/main/en/main_classes/model#transformers.PreTrainedModel)) -- النموذج الذي سيتم تكييفه.
- **peft_config** ([DeloraConfig](/docs/peft/main/ar/package_reference/delora#peft.DeloraConfig)): إعدادات نموذج DeLoRA.

