# التحسين

يوفر وحدة `.optimization`:

- مُحسِّن بانهيار وزن ثابت يمكن استخدامه لضبط النماذج، و
- عدة جداول على شكل كائنات جدول ترث من `_LRSchedule`:
- فئة لتجميع التدرجات من أجل تجميع تدرجات عدة دفعات

## AdaFactor[[transformers.Adafactor]]

#### transformers.Adafactor[[transformers.Adafactor]]

```python
transformers.Adafactor(params, lr = None, eps = (1e-30, 0.001), clip_threshold = 1.0, decay_rate = -0.8, beta1 = None, weight_decay = 0.0, scale_parameter = True, relative_step = True, warmup_init = False)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L1057)

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

params (`Iterable[nn.parameter.Parameter]`) : متسلسلة من المعاملات المراد تحسينها أو قواميس تعرّف مجموعات المعاملات.

lr (`float`، *اختياري*) : معدل التعلم الخارجي.

eps (`tuple[float, float]`، *اختياري*، القيمة الافتراضية `(1e-30, 0.001)`) : ثوابت التنظيم للتدرج المربع ومقياس المعامل على التوالي

clip_threshold (`float`، *اختياري*، القيمة الافتراضية 1.0) : عتبة الجذر التربيعي لمتوسط مربع التحديث النهائي للتدرج

decay_rate (`float`، *اختياري*، القيمة الافتراضية -0.8) : المعامل المستخدم لحساب المتوسطات المتحركة للمربعات

beta1 (`float`، *اختياري*) : المعامل المستخدم لحساب المتوسطات المتحركة للتدرج

weight_decay (`float`، *اختياري*، القيمة الافتراضية 0.0) : تضاؤل الوزن (عقوبة L2)

scale_parameter (`bool`، *اختياري*، القيمة الافتراضية `True`) : إذا كانت القيمة True، يتم توسيع معدل التعلم بواسطة الجذر التربيعي للمتوسط

relative_step (`bool`، *اختياري*، القيمة الافتراضية `True`) : إذا كانت True، يتم حساب معدل تعلم يعتمد على الوقت بدلاً من معدل التعلم الخارجي

warmup_init (`bool`، *اختياري*، القيمة الافتراضية `False`) : يعتمد حساب معدل التعلم المعتمد على الوقت على ما إذا كان يتم استخدام تهيئة الإحماء

يمكن استخدام التنفيذ الخاص بـ AdaFactor في PyTorch كبديل مباشر لـ Adam في كود fairseq الأصلي: https://github.com/pytorch/fairseq/blob/master/fairseq/optim/adafactor.py

الورقة: *Adafactor: Adaptive Learning Rates with Sublinear Memory Cost* https://huggingface.co/papers/1804.04235 لاحظ أن هذا المُحسِّن يضبط معدل التعلم داخلياً بناءً على خيارات `scale_parameter` و`relative_step` و`warmup_init`. لاستخدام جدول معدل تعلم يدوي (خارجي)، يجب عليك تعيين `scale_parameter=False` و`relative_step=False`.

تعتمد هذه النسخة على التعامل مع قيم الدقة المنخفضة (FP16، bfloat)، لكننا لم نجرِ اختبارات شاملة لها.

إعدادات الضبط الدقيق الموصى بها لـ T5 (https://discuss.huggingface.co/t/t5-finetuning-tips/684/3):

- لا يُوصى بالتدريب دون استخدام LR warmup أو clip_threshold.

  - استخدام التسخين المجدول لمعدل التعلم للانتقال إلى معدل تعلم ثابت
  - استخدم clip_threshold=1.0 (https://huggingface.co/papers/1804.04235)
- تعطيل التحديثات النسبية
- استخدم scale_parameter=False
- يجب عدم استخدام عمليات المُحسِّن الإضافية مثل قص التدرّجات بالتزامن مع Adafactor

مثال:

```python
Adafactor(model.parameters(), scale_parameter=False, relative_step=False, warmup_init=False, lr=1e-3)
```

أفاد آخرون بأنّ التوليف التالي يعمل بشكل جيد:

```python
Adafactor(model.parameters(), scale_parameter=True, relative_step=True, warmup_init=True, lr=None)
```

عند استخدام `lr=None` مع [Trainer](/docs/transformers/main/ar/main_classes/trainer#transformers.Trainer)، ستحتاج على الأرجح إلى استخدام `AdafactorSchedule`

المجدول على النحو التالي:

```python
from transformers.optimization import Adafactor, AdafactorSchedule

optimizer = Adafactor(model.parameters(), scale_parameter=True, relative_step=True, warmup_init=True, lr=None)
lr_scheduler = AdafactorSchedule(optimizer)
trainer = Trainer(..., optimizers=(optimizer, lr_scheduler))
```

طريقة الاستخدام:

```python
# replace AdamW with Adafactor
optimizer = Adafactor(
    model.parameters(),
    lr=1e-3,
    eps=(1e-30, 1e-3),
    clip_threshold=1.0,
    decay_rate=-0.8,
    beta1=None,
    weight_decay=0.0,
    relative_step=False,
    scale_parameter=False,
    warmup_init=False,
)
```

#### خطوة[[transformers.Adafactor.step]]

```python
step(closure = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L1202)

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

closure (callable، اختياري): دالة إغلاق تعيد تقييم النموذج وتعيد الخسارة.

يُنفّذ خطوة تحسين واحدة

## الجدول

### SchedulerType[[transformers.SchedulerType]]

#### transformers.SchedulerType[[transformers.SchedulerType]]

```python
transformers.SchedulerType(value, names = None, module = None, qualname = None, type = None, start = 1, boundary = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/trainer_utils.py#L561)

أسماء المجدولات (Schedulers) للمعامل `lr_scheduler_type` في [TrainingArguments](/docs/transformers/main/ar/main_classes/trainer#transformers.TrainingArguments). افتراضياً، يستخدم "linear". داخلياً، يسترجع هذا المجدول `get_linear_schedule_with_warmup` من [Trainer](/docs/transformers/main/ar/main_classes/trainer#transformers.Trainer). أنواع المجدول:
- "linear" = [get_linear_schedule_with_warmup()](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.get_linear_schedule_with_warmup)
- "cosine" = [get_cosine_schedule_with_warmup()](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.get_cosine_schedule_with_warmup)
- "cosine_with_restarts" = [get_cosine_with_hard_restarts_schedule_with_warmup()](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.get_cosine_with_hard_restarts_schedule_with_warmup)
- "polynomial" = [get_polynomial_decay_schedule_with_warmup()](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.get_polynomial_decay_schedule_with_warmup)
- "constant" =  [get_constant_schedule()](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.get_constant_schedule)
- "constant_with_warmup" = [get_constant_schedule_with_warmup()](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.get_constant_schedule_with_warmup)
- "inverse_sqrt" = [get_inverse_sqrt_schedule()](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.get_inverse_sqrt_schedule)
- "reduce_lr_on_plateau" = [get_reduce_on_plateau_schedule()](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.get_reduce_on_plateau_schedule)
- "cosine_with_min_lr" = [get_cosine_with_min_lr_schedule_with_warmup()](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.get_cosine_with_min_lr_schedule_with_warmup)
- "cosine_warmup_with_min_lr" = [get_cosine_with_min_lr_schedule_with_warmup_lr_rate()](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.get_cosine_with_min_lr_schedule_with_warmup_lr_rate)
- "warmup_stable_decay" = [get_wsd_schedule()](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.get_wsd_schedule)
- "greedy" = [get_greedy_schedule()](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.get_greedy_schedule)

### get_scheduler[[transformers.get_scheduler]]

#### transformers.get_scheduler[[transformers.get_scheduler]]

```python
transformers.get_scheduler(name: str | SchedulerType, optimizer: Optimizer, num_warmup_steps: int | None = None, num_training_steps: int | None = None, scheduler_specific_kwargs: dict | None = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L960)

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

name (`str` أو `SchedulerType`) : اسم المجدول (scheduler) المراد استخدامه.

optimizer (`torch.optim.Optimizer`) : المُحسِّن الذي سيُستخدم أثناء التدريب.

num_warmup_steps (`int`، *اختياري*) : عدد خطوات الإحماء التي يجب تنفيذها. لا تتطلب جميع مجدولات التعلم هذا المعامل (ولهذا السبب يكون المعامل اختياريًا)، وستُطلق الدالة خطأً إذا لم يُضبط وكان نوع المجدول يتطلبه.

num_training_steps (`int`، *اختياري*) : عدد خطوات التدريب المطلوب تنفيذها. لا تتطلب جميع مجدولات التعلم هذا المعامل (ولهذا السبب يكون المعامل اختياريًا)، وسيُطلق الدالة خطأً إذا لم يتم تعيينه وكان نوع المجدول يتطلبه.

scheduler_specific_kwargs (`dict`، *اختياري*) : معاملات إضافية لمجدولات مثل cosine with restarts. سيؤدي عدم تطابق أنواع المجدول ومعاملات المجدول إلى قيام دالة المجدول برفع TypeError.

واجهة موحدة للحصول على أي مجدول من اسمه.

### get_constant_schedule[[transformers.get_constant_schedule]]

#### transformers.get_constant_schedule[[transformers.get_constant_schedule]]

```python
transformers.get_constant_schedule(optimizer: Optimizer, last_epoch: int = -1)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L39)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

last_epoch (`int`، *اختياري*، القيمة الافتراضية -1) : فهرس آخر حقبة عند استئناف التدريب.

**يعيد:**

`torch.optim.lr_scheduler.LambdaLR` مع الجدولة المناسبة.

أنشئ جدولاً بمعدل تعلّم ثابت، باستخدام معدل التعلّم المُعيَّن في المُحسِّن.

### get_constant_schedule_with_warmup[[transformers.get_constant_schedule_with_warmup]]

#### transformers.get_constant_schedule_with_warmup[[transformers.get_constant_schedule_with_warmup]]

```python
transformers.get_constant_schedule_with_warmup(optimizer: Optimizer, num_warmup_steps: int, last_epoch: int = -1)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L80)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

num_warmup_steps (`int`) : عدد الخطوات لمرحلة الإحماء.

last_epoch (`int`، *اختياري*، القيمة الافتراضية -1) : فهرس آخر حقبة عند استئناف التدريب.

**يعيد:**

`torch.optim.lr_scheduler.LambdaLR` مع الجدولة المناسبة.

أنشئ جدولاً بمعدل تعلّم ثابت يسبقه فترة إحماء يتزايد فيها معدل التعلّم خطياً بين 0 ومعدل التعلّم الأولي المُعيَّن في المُحسِّن.

### get_cosine_schedule_with_warmup[[transformers.get_cosine_schedule_with_warmup]]

#### transformers.get_cosine_schedule_with_warmup[[transformers.get_cosine_schedule_with_warmup]]

```python
transformers.get_cosine_schedule_with_warmup(optimizer: Optimizer, num_warmup_steps: int, num_training_steps: int, num_cycles: float = 0.5, last_epoch: int = -1)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L143)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

num_warmup_steps (`int`) : عدد الخطوات لمرحلة الإحماء.

num_training_steps (`int`) : إجمالي عدد خطوات التدريب.

num_cycles (`float`، *اختياري*، القيمة الافتراضية 0.5) : عدد الموجات في جدول جيب التمام (القيمة الافتراضية هي الانخفاض من القيمة القصوى إلى 0 وفق نصف جيب التمام).

last_epoch (`int`، *اختياري*، القيمة الافتراضية -1) : فهرس آخر حقبة عند استئناف التدريب.

**يعيد:**

`torch.optim.lr_scheduler.LambdaLR` مع الجدولة المناسبة.

أنشئ جدولاً لمعدل التعلم ينخفض وفق قيم دالة جيب التمام (cosine) بين قيمة معدل التعلم الأولية المُعيّنة في المُحسِّن (optimizer) وقيمة صفر، وذلك بعد فترة إحماء (warmup) يزداد فيها المعدل خطياً بين صفر وقيمة معدل التعلم الأولية المُعيّنة في المُحسِّن.

### get_cosine_with_hard_restarts_schedule_with_warmup[[transformers.get_cosine_with_hard_restarts_schedule_with_warmup]]

#### transformers.get_cosine_with_hard_restarts_schedule_with_warmup[[transformers.get_cosine_with_hard_restarts_schedule_with_warmup]]

```python
transformers.get_cosine_with_hard_restarts_schedule_with_warmup(optimizer: Optimizer, num_warmup_steps: int, num_training_steps: int, num_cycles: int = 1, last_epoch: int = -1)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L188)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

num_warmup_steps (`int`) : عدد الخطوات لمرحلة الإحماء.

num_training_steps (`int`) : إجمالي عدد خطوات التدريب.

num_cycles (`int`، *اختياري*، القيمة الافتراضية 1) : عدد إعادة التشغيل الصارمة التي سيتم استخدامها.

last_epoch (`int`، *اختياري*، القيمة الافتراضية -1) : فهرس آخر حقبة عند استئناف التدريب.

**يعيد:**

`torch.optim.lr_scheduler.LambdaLR` مع الجدولة المناسبة.

أنشئ جدولاً بمعدل تعلّم يتناقص وفق قيم دالة جيب التمام (cosine) بين قيمة معدل التعلّم الابتدائي المُعيّنة في المُحسِّن (optimizer) وقيمة صفر، مع عدة إعادة تشغيلات قسرية (hard restarts)، وذلك بعد فترة إحماء (warmup) يتزايد فيها المعدل خطياً بين صفر وقيمة معدل التعلّم الابتدائي المُعيّنة في المُحسِّن.

### get_cosine_with_min_lr_schedule_with_warmup[[transformers.get_cosine_with_min_lr_schedule_with_warmup]]

#### transformers.get_cosine_with_min_lr_schedule_with_warmup[[transformers.get_cosine_with_min_lr_schedule_with_warmup]]

```python
transformers.get_cosine_with_min_lr_schedule_with_warmup(optimizer: Optimizer, num_warmup_steps: int, num_training_steps: int, num_cycles: float = 0.5, last_epoch: int = -1, min_lr: float | None = None, min_lr_rate: float | None = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L337)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

num_warmup_steps (`int`) : عدد الخطوات لمرحلة الإحماء.

num_training_steps (`int`) : إجمالي عدد خطوات التدريب.

num_cycles (`float`، *اختياري*، القيمة الافتراضية 0.5) : عدد الموجات في جدول جيب التمام (القيمة الافتراضية هي الانخفاض من القيمة القصوى إلى 0 وفق نصف جيب التمام).

last_epoch (`int`، *اختياري*، القيمة الافتراضية -1) : فهرس آخر حقبة عند استئناف التدريب.

min_lr (`float`، *اختياري*) : معدل التعلم الأدنى الذي يجب الوصول إليه بعد جدول جيب التمام.

min_lr_rate (`float`، *اختياري*) : معدل التعلم الأدنى كنسبة من معدل التعلم الأولي. إذا تم ضبطه، فلا ينبغي ضبط `min_lr`.

**يعيد:**

`torch.optim.lr_scheduler.LambdaLR` مع الجدولة المناسبة.

أنشئ جدولاً بمعدل تعلّم يتناقص وفق قيم دالة جيب التمام (cosine) بين قيمة معدل التعلّم الابتدائي المُعيّنة في المُحسِّن (optimizer) وقيمة min_lr، وذلك بعد فترة إحماء (warmup) يتزايد فيها المعدل خطياً بين 0 وقيمة معدل التعلّم الابتدائي المُعيّنة في المُحسِّن.

### get_cosine_with_min_lr_schedule_with_warmup_lr_rate[[transformers.get_cosine_with_min_lr_schedule_with_warmup_lr_rate]]

#### transformers.get_cosine_with_min_lr_schedule_with_warmup_lr_rate[[transformers.get_cosine_with_min_lr_schedule_with_warmup_lr_rate]]

```python
transformers.get_cosine_with_min_lr_schedule_with_warmup_lr_rate(optimizer: Optimizer, num_warmup_steps: int, num_training_steps: int, num_cycles: float = 0.5, last_epoch: int = -1, min_lr: float | None = None, min_lr_rate: float | None = None, warmup_lr_rate: float | None = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L414)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

num_warmup_steps (`int`) : عدد الخطوات لمرحلة الإحماء.

num_training_steps (`int`) : إجمالي عدد خطوات التدريب.

num_cycles (`float`، *اختياري*، القيمة الافتراضية 0.5) : عدد الموجات في جدول جيب التمام (القيمة الافتراضية هي الانخفاض من القيمة القصوى إلى 0 وفق نصف جيب التمام).

last_epoch (`int`، *اختياري*، القيمة الافتراضية -1) : فهرس آخر حقبة عند استئناف التدريب.

min_lr (`float`، *اختياري*) : معدل التعلم الأدنى الذي يجب الوصول إليه بعد جدول جيب التمام.

min_lr_rate (`float`، *اختياري*) : معدل التعلم الأدنى كنسبة من معدل التعلم الأولي. إذا تم ضبطه، فلا ينبغي ضبط `min_lr`.

warmup_lr_rate (`float`، *اختياري*) : معدل التعلم الأدنى كنسبة من معدل التعلم الابتدائي. إذا لم يُضبط، فسيُعامل `warmup_lr_rate` على أنه float(1/num_warmup_steps).

**يعيد:**

`torch.optim.lr_scheduler.LambdaLR` مع الجدولة المناسبة.

أنشئ جدولاً بمعدل تعلّم يتناقص وفق قيم دالة جيب التمام (cosine) بين قيمة معدل التعلّم الابتدائي المُعيّنة في المُحسِّن (optimizer) وقيمة min_lr، وذلك بعد فترة إحماء (warmup) يتزايد فيها المعدل خطياً بين 0 وقيمة معدل التعلّم الابتدائي المُعيّنة في المُحسِّن.

### GreedyLR[[transformers.GreedyLR]]

#### transformers.GreedyLR[[transformers.GreedyLR]]

```python
transformers.GreedyLR(optimizer: Optimizer, mode: str = 'min', factor: float = 0.95, patience: int = 10, threshold: float = 1e-06, threshold_mode: str = 'abs', cooldown: int = 0, warmup: int = 0, min_lr: float | list[float] = 0.001, max_lr: float | list[float] = 1.0, eps: float = 1e-08, verbose: bool = False, smooth: bool = False, window_size: int = 50, reset_start: int = 500)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L621)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

mode (`str`، *اختياري*، القيمة الافتراضية `"min"`) : أحد الخيارين 'min' أو 'max'. في وضع 'min'، يتم تقليل معدل التعلم عندما يتوقف المقياس عن الانخفاض؛ وفي وضع 'max' عندما يتوقف عن الارتفاع.

factor (`float`، *اختياري*، القيمة الافتراضية 0.95) : العامل الذي يُضبط به معدل التعلم. يُضرب معدل التعلم في العامل عند الوصول إلى حالة الركود، ويُقسم على العامل عند حدوث تحسّن. يجب أن يكون أقل من 1.0.

patience (`int`، *اختياري*، القيمة الافتراضية 10) : عدد الفترات (epochs) التي لا يتحقق فيها أي تحسن، وبعد انقضائها يتم ضبط معدل التعلم.

threshold (`float`، *اختياري*، القيمة الافتراضية 1e-06) : العتبة المستخدمة لقياس القيمة المثلى الجديدة.

threshold_mode (`str`، *اختياري*، القيمة الافتراضية `"abs"`) : أحد القيم 'rel' أو 'abs'.

cooldown (`int`، *اختياري*، القيمة الافتراضية 0) : عدد الفترات التي يجب الانتظار قبل استئناف العمل الطبيعي بعد خفض معدل التعلم.

warmup (`int`، *اختياري*، القيمة الافتراضية 0) : عدد الفترات (epochs) التي يجب انتظارها قبل استئناف العمل الطبيعي بعد زيادة معدل التعلم.

min_lr (`float` أو `list[float]`، *اختياري*، القيمة الافتراضية 0.001) : حد أدنى لمعدل التعلم.

max_lr (`float` أو `list[float]`، *اختياري*، القيمة الافتراضية 1.0) : حد أعلى لمعدل التعلم.

eps (`float`، *اختياري*، القيمة الافتراضية 1e-08) : الحد الأدنى للتلاشي المطبَّق على معدل التعلم.

verbose (`bool`، *اختياري*، القيمة الافتراضية `False`) : إذا كانت القيمة True، يتم طباعة رسالة إلى stdout عند كل تحديث.

smooth (`bool`، *اختياري*، القيمة الافتراضية `False`) : إذا كانت القيمة True، يتم تطبيق تنعيم متوسط التدفق على المقاييس.

window_size (`int`، *اختياري*، القيمة الافتراضية 50) : حجم النافذة للمتوسط المتدفق عندما تكون smooth=True.

reset_start (`int`، *اختياري*، القيمة الافتراضية 500) : عدد الخطوات التي يجب الانتظار عند min_lr قبل إعادة التعيين إلى الحالة الأولية.

جدول معدل تعلّم تكيفي يستجيب لمقاييس التدريب.

يُعدّل GreedyLR معدل التعلم ديناميكيًا بناءً على أداء التدريب:
- يزيد معدل التعلم عندما تتحسن المقاييس بشكل متسق (يقسم على عامل)
- يُقلّل معدل التعلم عندما تستقر المقاييس (يُضرب في عامل)

يختلف هذا عن مجدولات التعلم التقليدية مثل التبريد الجيبوي (cosine annealing) من خلال الاستجابة لديناميكيات التدريب الفعلية بدلاً من اتباع جدول زمني محدد مسبقاً.

مرجع: `GreedyLR: A Novel Adaptive Learning Rate Scheduler <https://arxiv.org/abs/2512.14527>`_

مثال:
```python
>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1)
>>> scheduler = GreedyLR(optimizer, mode="min", patience=10)
>>> for epoch in range(100):
...     train(...)
...     val_loss = validate(...)
...     scheduler.step(val_loss)
```

#### get_last_lr[[transformers.GreedyLR.get_last_lr]]

```python
get_last_lr()
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L855)

إرجاع معدل التعلم المحسوب أخيرًا بواسطة المجدول الحالي.

#### load_state_dict[[transformers.GreedyLR.load_state_dict]]

```python
load_state_dict(state_dict: dict[str, Any])
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L892)

تحميل الحالة من قاموس.

#### state_dict[[transformers.GreedyLR.state_dict]]

```python
state_dict()
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L859)

إرجاع حالة المجدول على شكل قاموس.

#### خطوة[[transformers.GreedyLR.step]]

```python
step(metrics: float, epoch: int | None = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L749)

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

metrics (`float`) : قيمة المقياس المستخدمة لاتخاذ قرارات تعديل معدل التعلم.

epoch (`int`، *اختياري*) : رقم الحقبة الحالية. إذا كانت القيمة None، يتم استخدام العدّاد الداخلي.

أداء خطوة المجدول بناءً على المقاييس المعطاة.

### get_greedy_schedule[[transformers.get_greedy_schedule]]

#### transformers.get_greedy_schedule[[transformers.get_greedy_schedule]]

```python
transformers.get_greedy_schedule(optimizer: Optimizer, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L928)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

kwargs (`dict`، *اختياري*) : معاملات إضافية تُمرَّر إلى المجدول. راجع [GreedyLR](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.GreedyLR) لمعرفة المعاملات الممكنة.

**يعيد:**

[GreedyLR](/docs/transformers/main/ar/main_classes/optimizer_schedules#transformers.GreedyLR) مع الجدولة المناسبة.

أنشئ جدولة معدل تعلّم تكيفية تُعدّل LR بناءً على مقاييس التدريب.

### get_linear_schedule_with_warmup[[transformers.get_linear_schedule_with_warmup]]

#### transformers.get_linear_schedule_with_warmup[[transformers.get_linear_schedule_with_warmup]]

```python
transformers.get_linear_schedule_with_warmup(optimizer, num_warmup_steps, num_training_steps, last_epoch = -1)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L107)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

num_warmup_steps (`int`) : عدد الخطوات لمرحلة الإحماء.

num_training_steps (`int`) : إجمالي عدد خطوات التدريب.

last_epoch (`int`، *اختياري*، القيمة الافتراضية -1) : فهرس آخر حقبة عند استئناف التدريب.

**يعيد:**

`torch.optim.lr_scheduler.LambdaLR` مع الجدولة المناسبة.

أنشئ جدولاً بمعدل تعلّم ينخفض خطياً من قيمة lr الأولية المُعيّنة في المُحسِّن إلى 0، بعد فترة إحماء تزداد فيها القيمة خطياً من 0 إلى قيمة lr الأولية المُعيّنة في المُحسِّن.

### get_polynomial_decay_schedule_with_warmup[[transformers.get_polynomial_decay_schedule_with_warmup]]

#### transformers.get_polynomial_decay_schedule_with_warmup[[transformers.get_polynomial_decay_schedule_with_warmup]]

```python
transformers.get_polynomial_decay_schedule_with_warmup(optimizer, num_warmup_steps, num_training_steps, lr_end = 1e-07, power = 1.0, last_epoch = -1)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L242)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

num_warmup_steps (`int`) : عدد الخطوات لمرحلة الإحماء.

num_training_steps (`int`) : إجمالي عدد خطوات التدريب.

lr_end (`float`، *اختياري*، القيمة الافتراضية 1e-7) : معدل التعلم النهائي.

power (`float`، *اختياري*، القيمة الافتراضية 1.0) : معامل القوة.

last_epoch (`int`، *اختياري*، القيمة الافتراضية -1) : فهرس آخر حقبة عند استئناف التدريب.

**يعيد:**

`torch.optim.lr_scheduler.LambdaLR` مع الجدولة المناسبة.

أنشئ جدولاً بمعدل تعلّم يتناقص بتلاشي متعدد الحدود من معدل التعلّم الأولي المُعيَّن في المُحسِّن إلى معدل التعلّم النهائي المُعرَّف بواسطة *lr_end*، وذلك بعد فترة إحماء يتزايد فيها المعدل خطياً من 0 إلى معدل التعلّم الأولي المُعيَّن في المُحسِّن.

ملاحظة: القيمة الافتراضية لـ *power* هي 1.0 كما في تطبيق fairseq، والذي يعتمد بدوره على تطبيق BERT الأصلي الموجود في https://github.com/google-research/bert/blob/f39e881b169b9d53bea03d2d341b31707a6c052b/optimization.py#L37

### get_inverse_sqrt_schedule[[transformers.get_inverse_sqrt_schedule]]

#### transformers.get_inverse_sqrt_schedule[[transformers.get_inverse_sqrt_schedule]]

```python
transformers.get_inverse_sqrt_schedule(optimizer: Optimizer, num_warmup_steps: int, timescale: int | None = None, last_epoch: int = -1)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L296)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

num_warmup_steps (`int`) : عدد الخطوات لمرحلة الإحماء.

timescale (`int`، *اختياري*، القيمة الافتراضية هي `num_warmup_steps`) : مقياس الزمن.

last_epoch (`int`، *اختياري*، القيمة الافتراضية -1) : فهرس آخر حقبة عند استئناف التدريب.

**يعيد:**

`torch.optim.lr_scheduler.LambdaLR` مع الجدولة المناسبة.

أنشئ جدولاً بمعدل تعلّم يتناسب عكسياً مع الجذر التربيعي، بدءاً من معدل التعلّم الأولي المُعيَّن في المُحسِّن، بعد فترة إحماء يزداد فيها معدل التعلّم خطياً من 0 حتى معدل التعلّم الأولي المُعيَّن في المُحسِّن.

### get_reduce_on_plateau_schedule[[transformers.get_reduce_on_plateau_schedule]]

#### transformers.get_reduce_on_plateau_schedule[[transformers.get_reduce_on_plateau_schedule]]

```python
transformers.get_reduce_on_plateau_schedule(optimizer: Optimizer, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L56)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

kwargs (`dict`، *اختياري*) : معاملات إضافية تُمرَّر إلى المجدول. راجع `torch.optim.lr_scheduler.ReduceLROnPlateau` لمعرفة المعاملات الممكنة.

**يعيد:**

`torch.optim.lr_scheduler.ReduceLROnPlateau` مع الجدولة المناسبة.

أنشئ جدولاً بمعدل تعلّم ثابت ينخفض عندما يتوقف أحد المقاييس عن التحسّن.

### get_wsd_schedule[[transformers.get_wsd_schedule]]

#### transformers.get_wsd_schedule[[transformers.get_wsd_schedule]]

```python
transformers.get_wsd_schedule(optimizer: Optimizer, num_warmup_steps: int, num_decay_steps: int, num_training_steps: int | None = None, num_stable_steps: int | None = None, warmup_type: str = 'linear', decay_type: str = 'cosine', min_lr_ratio: float = 0, num_cycles: float = 0.5, last_epoch: int = -1)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/optimization.py#L508)

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

optimizer (`~torch.optim.Optimizer`) : المُحسِّن الذي يتم جدولة معدل التعلم له.

num_warmup_steps (`int`) : عدد الخطوات لمرحلة الإحماء.

num_decay_steps (`int`) : عدد الخطوات لمرحلة التلاشي.

num_training_steps (`int`، *اختياري*) : إجمالي عدد خطوات التدريب. وهو مجموع خطوات الإحماء والاستقرار والتلاشي. إذا لم يُقدَّم `num_stable_steps`، فستكون مرحلة الاستقرار `num_training_steps - num_warmup_steps - num_decay_steps`.

num_stable_steps (`int`، *اختياري*) : عدد الخطوات للمرحلة المستقرة. يرجى التأكد من أن `num_warmup_steps + num_stable_steps + num_decay_steps` يساوي `num_training_steps`، وإلا فإن الخطوات الأخرى ستتخذ معدل التعلم الأدنى كقيمة افتراضية.

warmup_type (`str`، *اختياري*، القيمة الافتراضية "linear") : نوع الإحماء المستخدم. يمكن أن يكون 'linear' أو 'cosine' أو '1-sqrt'.

decay_type (`str`، *اختياري*، القيمة الافتراضية "cosine") : نوع التلاشي المستخدم. يمكن أن يكون 'linear' أو 'cosine' أو '1-sqrt'.

min_lr_ratio (`float`، *اختياري*، القيمة الافتراضية 0) : معدل التعلم الأدنى كنسبة من معدل التعلم الأولي.

num_cycles (`float`، *اختياري*، القيمة الافتراضية 0.5) : عدد الموجات في جدول جيب التمام (القيمة الافتراضية هي الانخفاض من القيمة القصوى إلى 0 وفق نصف جيب التمام).

last_epoch (`int`، *اختياري*، القيمة الافتراضية -1) : فهرس آخر حقبة عند استئناف التدريب.

**يعيد:**

`torch.optim.lr_scheduler.LambdaLR` مع الجدولة المناسبة.

أنشئ جدولاً بمعدل تعلّم يتكوّن من ثلاث مراحل:
1. warmup: زيادة من min_lr_ratio مضروباً في معدل التعلم الأولي إلى معدل التعلم الأولي وفقاً لـ warmup_type.
2. stable: معدل تعلّم ثابت.
3. decay: انخفاض من معدل التعلم الأولي إلى min_lr_ratio من معدل التعلم الأولي وفقاً لنوع الاضمحلال decay_type.

