المحسّنات
Optimizers
من SGD إلى الزخم وRMSProp وAdam وAdamW: كيف تتكيف خطوات التحديث.
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 مع الزخم ما يزال منافساً في الرؤية الحاسوبية.
أسئلة مراجعة
-
ما الفكرة الأساسية في Adam؟
تكييف معدل التعلم لكل معامل باستخدام متوسطات متحركة للتدرج ولمربعه، مع تصحيح انحياز التقديرات في البداية.
-
ما الفرق بين Adam مع weight_decay وAdamW؟
في AdamW يُطبق تضاؤل الأوزان منفصلاً عن التحديث التكيفي، وهذا أقرب إلى تنظيم L2 المقصود وأفضل عملياً في كثير من الحالات.
المصادر والمراجع
إكمال الدرس
أكملت كل دروس المسار! يمكنك الآن طلب شهادة إكمال المسار.
اطلب الشهادة