التعلم العميق متوسط · Intermediate 12 دقيقة

المحسّنات

Optimizers

من SGD إلى الزخم وRMSProp وAdam وAdamW: كيف تتكيف خطوات التحديث.

تقدّمك في المسار0%

SGD مع الزخم

$$\mathbf{v}_{t} = \beta\,\mathbf{v}_{t-1} + \nabla L(\boldsymbol{\theta}_t), \qquad \boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t – \eta\,\mathbf{v}_t$$

Adam

$$\mathbf{m}_t = \beta_1 \mathbf{m}_{t-1} + (1-\beta_1)\mathbf{g}_t, \qquad \mathbf{v}_t = \beta_2 \mathbf{v}_{t-1} + (1-\beta_2)\mathbf{g}_t^2$$

$$\hat{\mathbf{m}}_t = \frac{\mathbf{m}_t}{1-\beta_1^t}, \quad \hat{\mathbf{v}}_t = \frac{\mathbf{v}_t}{1-\beta_2^t}, \quad \boldsymbol{\theta}_{t+1} = \boldsymbol{\theta}_t – \eta\,\frac{\hat{\mathbf{m}}_t}{\sqrt{\hat{\mathbf{v}}_t} + \epsilon}$$

في PyTorch

import torch
model = torch.nn.Linear(10, 2)
sgd   = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9, weight_decay=5e-4)
adam  = torch.optim.Adam(model.parameters(), lr=1e-3)
adamw = torch.optim.AdamW(model.parameters(), lr=3e-4, weight_decay=0.01)

sched = torch.optim.lr_scheduler.CosineAnnealingLR(adamw, T_max=50)
# في كل خطوة: opt.zero_grad(); loss.backward(); opt.step()
# وفي نهاية كل حقبة: sched.step()

مقارنة

المحسّنالميزةملاحظة
SGD + Momentumتعميم جيد في الرؤيةيحتاج إلى ضبط معدل التعلم وجدولته
RMSPropتكيف لكل معاملشائع تاريخياً في الشبكات التكرارية
Adamسريع التقارب وقليل الحساسية للضبطقد يعمم أقل من SGD في بعض المسائل
AdamWتنظيم أصحشائع في تدريب المحوّلات

نصائح

  • ابدأ بـ AdamW أو Adam مع معدل تعلم بين \(10^{-4}\) و\(10^{-3}\).
  • راقب منحنى الخسارة؛ التذبذب الشديد يعني معدلاً كبيراً.
  • استخدم الإحماء (warm-up) مع المحوّلات والدفعات الكبيرة.
  • قص التدرج (clip_grad_norm_) مع الشبكات التكرارية.

مصطلحات الدرس

Adam Adaptive Moment Estimation
محسّن يستخدم تقديرات متحركة للعزم الأول والثاني للتدرجات لتكييف حجم الخطوة لكل معامل.
الزخم Momentum
تقنية تضيف إلى التحديث الحالي جزءاً من التحديث السابق، فتسرّع الحركة في الاتجاهات الثابتة وتخفف التذبذب.
تضاؤل الأوزان Weight Decay
تنظيم يقلص الأوزان نحو الصفر في كل تحديث للحد من فرط التخصيص.

الملخص

المحسّنات تحدد كيف تُستخدم التدرجات لتحديث الأوزان. يضيف الزخم (Momentum) متوسطاً متحركاً للتدرجات لتسريع الحركة في الاتجاهات الثابتة، ويكيّف RMSProp معدل التعلم لكل معامل بحسب حجم تدرجاته، ويجمع Adam بين الفكرتين مع تصحيح الانحياز. AdamW يفصل تضاؤل الأوزان عن التحديث التكيفي وهو شائع في المحوّلات. لا يوجد محسّن أفضل دائماً، وSGD مع الزخم ما يزال منافساً في الرؤية الحاسوبية.

أسئلة مراجعة

  1. ما الفكرة الأساسية في Adam؟

    تكييف معدل التعلم لكل معامل باستخدام متوسطات متحركة للتدرج ولمربعه، مع تصحيح انحياز التقديرات في البداية.

  2. ما الفرق بين Adam مع weight_decay وAdamW؟

    في AdamW يُطبق تضاؤل الأوزان منفصلاً عن التحديث التكيفي، وهذا أقرب إلى تنظيم L2 المقصود وأفضل عملياً في كثير من الحالات.

المصادر والمراجع

  1. Kingma & Ba (2014) Adam: A Method for Stochastic Optimization — arXiv
  2. Loshchilov & Hutter (2017) Decoupled Weight Decay Regularization — arXiv
  3. PyTorch — torch.optim

إكمال الدرس