تخطَّ إلى المحتوى

Optimizers

محسنات التعلّم العميق (Optimizers) Optimizers

المُحسّن يحدّث أوزان الشبكة باستخدام التدرّجات. SGD البسيط، Adam الأشهر للتطبيقات الحديثة، AdamW يضيف التنظيم الصحيح.

المُحسّن هو الخوارزمية التي تأخذ التدرّجات (من backpropagation) وتعدّل أوزان الشبكة لتقليل الخسارة. SGD (Stochastic Gradient Descent) الأبسط: weight -= lr × gradient. لكن SGD وحده بطيء ويعلق في saddle points. Adam (Adaptive Moment Estimation) يجمع بين momentum (متوسط التدرّجات) و RMSProp (تطبيع التدرج بمربعه) — يتكيّف مع كل وزن على حدة ويتقارب أسرع في معظم الحالات.

AdamW تعديل مهم: يفصل weight_decay (التنظيم) عن تحديث التدرّج، فيعطي تنظيمًا صحيحًا بدلاً من العقوبة المختلطة في Adam الأصلي. المدرب الافتراضي في Transformers الحديثة (BERT، GPT، ViT) وفي أغلب مهام التعلّم العميق.

اختيار المُحسّن: Adam/AdamW نقطة بداية ممتازة لمشاكل التعلّم العميق العصرية. SGD+momentum ما يزال قويًا لـ CNNs في رؤية الحاسوب وفي ResNets. جدول learning rate (scheduler) مثل CosineAnnealingLR أو Warmup يحسّن الاستقرار بشكل ملحوظ.

الصياغة

# PyTorch
optimizer = torch.optim.AdamW(
    model.parameters(),
    lr=1e-3,
    weight_decay=1e-2
)

for epoch in range(num_epochs):
    loss = compute_loss(model(x), y)
    loss.backward()
    optimizer.step()
    optimizer.zero_grad()

📄 مثال

import torch
import torch.nn as nn

model = nn.Sequential(nn.Linear(10, 5), nn.ReLU(), nn.Linear(5, 1))

# Adam — الافتراضي العملي
optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)

# AdamW — تنظيم منفصل (أفضل عمليًا)
optimizer_w = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=1e-2)

# SGD + momentum — لا يزال قويًا لـ CNNs
optimizer_sgd = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

# جدول learning rate
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=50)

print(f"عدد المعاملات: {sum(p.numel() for p in model.parameters())}")

أهم النقاط

النقطةالوظيفة
lr (learning rate)حجم الخطوة — الأكثر أهمية بين المعلمات التشعبية
momentumتسارع في اتجاه المتوسط — يساعد في تجاوز المحلي plateaux
weight_decayقوة التنظيم (L2) — مع AdamW، تنظيم صحيح دون التأثير على تدرّج الخسارة
betasمعاملات Adam لانسيابية التدرّجات (افتراضي 0.9 و 0.999)

💡 نصائح عملية

  • ابدأ بـ Adam/AdamW ولـ lr=1e-3 (أو 1e-4 للنماذج الكبيرة)، ثم عدّل حسب منحنى الخسارة
  • أضف scheduler مثل CosineAnnealingLR حين التدريب طويل (>10 epochs) — يحسّن التقارب والاستقرار

⚠️ أخطاء شائعة

  • استخدام lr مرتفع جدًا (>0.1) مع Adam — ينفجر التدريب (loss=NaN). Adam يعمل جيدًا مع lr صغير
  • إضافة weight_decay مع Adam (وليس AdamW) — التنظيم يكون غير فعّال ومختلطًا مع التدرّج

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار AI-ML الكامل بالعربي.

📚 للتعمق التقني الكامل بالإنجليزية: PyTorch Documentation