التحسين2014متوسط9 دقيقة قراءة
آدَم: خوارزمية للأمثَلَة العشوائية
Adam: A Method for Stochastic Optimization
Kingma, D. P. · Ba, J. — ICLR
المشكلة
بحلول 2014، كان الشبكات العصبية العميقة يتطلب اختيار المُحسِّن المناسب — لكن كل خوارزمية متاحة كانت تحلّ جزءاً من المشكلة وتُخفق في الباقي. (SGD) كان يحتاج ضبطاً يدوياً دقيقاً ، وكان يتأرجح ذهاباً وإياباً عبر الأودية الضيقة في سطح دالة بدلاً من التقدّم نحو النقطة الدنيا. إضافة حسّنت الاتجاه العام، لكنها ظلّت تستخدم معدل تعلم واحداً لجميع المعاملات — كأنك تعطي كل موظفي الشركة الراتب نفسه بصرف النظر عن دورهم. خوارزمية AdaGrad كيَّفت المعدل لكل معلمة على حدة، لكنها أنقصته بلا رجعة حتى توقَّف التعلم تماماً في المسائل غير المحدبة. خوارزمية RMSProp عالجت مشكلة الانكماش باستخدام المتوسط المتحرك الأُسِّي بدل المجموع التراكمي، لكنها افتقرت إلى الزخم ولم تصحّح انحياز التهيئة الصفرية. ما كان يحتاجه الممارسون هو مُحسِّن يجمع بين معدل تعلم تكيُّفي لكل معلمة والزخم الاتجاهي، ويعمل فوراً بقيم افتراضية معقولة، ويتوسَّع لملايين المعاملات دون انهيار.
الإسهام
آدَم (تقدير العزوم التكيُّفية، Adaptive Moment Estimation): مُحسِّن يحتفظ بمتوسطَين مُتحرِّكَين أُسِّيَّين لكل معلمة على حدة. يحسب متوسط التدرجات الأخيرة — فيعمل كبوصلة تحدّد الاتجاه السائد (أي الزخم). يحسب متوسط مربعات التدرجات — فيعمل كمقياس لشدة الإشارة. ثم تقسم الخوارزمية خطوة الزخم على جذر العزم الثاني، فيحصل كل وزن على معدل تعلم تكيُّفي خاصّ به. الابتكار الجوهري هو : بما أن المتوسطات المتحركة تبدأ من الصفر، تنحاز التقديرات الأولى نحو الصفر بشدة، فتقسم آدَم على المعامل (1 − βᵗ) للتعويض. النتيجة مُحسِّن لا يحتاج سوى ثلاث معلمات فائقة (α وβ₁ وβ₂) تعمل قيمها الافتراضية (0.001 و0.9 و0.999) بكفاءة عبر معظم مهام . تقدّم الورقة أيضاً (AdaMax)، وهي صيغة بديلة تستخدم معيار اللانهاية بدل الجذر التربيعي.
الأثر
أصبحت آدَم المُحسِّن الافتراضي للتعلم العميق بلا منازع. تُستخدم اليوم في تدريب GPT وBERT ومحوِّلات الرؤية ونماذج الانتشار التوليدي، وعملياً كل بنية رئيسية ظهرت منذ 2015. تكيُّف آدَم التلقائي لكل معلمة ألغى الحاجة إلى ضبط معدل التعلم يدوياً — وهي العملية التي كانت تستهلك أياماً من وقت الباحثين. أتاح هذا التركيز على تصميم البنى المعمارية بدلاً من مصارعة إعدادات الأمثَلَة. خوارزميات لاحقة مثل AdamW (التي فصلت اضمحلال الأوزان عن التدرج) وLAMB وAdaFactor تنحدر مباشرة من آدَم. بأكثر من 200,000 اقتباس أكاديمي، تُعدّ من أكثر الأوراق البحثية استشهاداً في تاريخ علوم الحاسوب.
تخيَّل أنك تنزل جبلاً في ضباب كثيف لا تستطيع معه رؤية القاع.
الانحدار التدريجي العشوائي يخطو خطوات متساوية الحجم في كل اتجاه — مقبول على السفوح الممهَّدة، لكنه يتأرجح كالبندول عبر الأودية الضيقة: خطوة يمين ثم خطوة يسار بلا تقدّم حقيقي نحو الأسفل.
الزخم يحوّل المتسلق إلى كرة ثقيلة تتدحرج: تكتسب سرعة حين يتّسق المنحدر، فتتجاوز التذبذبات الصغيرة. لكن هذه الكرة تتدحرج بالسرعة نفسها سواء كانت الأرض هضبة مستوية أم حافة صخرية حادة — فلا تُميّز التضاريس.
هي متسلّق ذكي يحمل أداتين: بوصلة ومقياس انحدار. البوصلة هي العزم الأول — أي الزخم — تُخبره: «ما الاتجاه السائد الذي كنتَ تسير فيه؟» فتمنعه من التأرجح. مقياس الانحدار هو العزم الثاني — يُخبره: «ما شدة الانحدار تحت قدميك الآن؟» فوق الهضاب المستوية يقرأ المقياس قراءة منخفضة، فيخطو خطوات واسعة واثقة. على الحوافّ الحادة المضطربة يقرأ قراءة مرتفعة، فيبطّئ ويخطو بحذر. البوصلة تصون الاتجاه، ومقياس الانحدار يصون الإيقاع — وبهما معاً يصل المتسلق إلى القاع بأسرع مسار وأقلّ تذبذب.
المشكلة: معدل تعلم واحد لا يناسب الجميع
لنبدأ بجوهر المشكلة. كل في تعيش في منطقة مختلفة من سطح دالة الفقد. تخيَّل تضاريس جبلية: بعض المعاملات تقف فوق حوافّ حادّة حيث كبير وأيّ تحديث ولو صغير يُحدث تذبذباً، بينما معاملات أخرى تقف وسط هضاب مستوية يكاد فيها التدرج المتلاشي يوقف التعلم تماماً. معدل تعلم واحد شامل لا يمكنه خدمة الحالتين — كأنك تفرض سرعة واحدة على جميع السيارات في طريق سريع وشارع سكني في آنٍ معاً.
ثلاث أفكار سبقت آدَم حلّت كلٌّ منها جزءاً من هذا اللغز:
-
الزخم (Polyak, 1964) — بدلاً من الاعتماد على التدرج اللحظي وحده (المشوَّش وغير المستقر)، نراكم للتدرجات السابقة. هذا يُنعّم الضجيج ويبني سرعة في الاتجاهات المتسقة — كالكرة التي تكتسب عجلة حين تتدحرج نزولاً في اتجاه ثابت. المشكلة: يظلّ يستخدم معدل تعلم واحداً لكل المعاملات بلا تمييز.
-
AdaGrad (Duchi وآخرون, 2011) — أعطِ كل معلمة معدل تعلم خاصاً بها عبر قسمة تحديثها على الجذر التربيعي لمجموع مربعات تدرجاتها السابقة كلها. المعاملات التي تُحدَّث كثيراً تحصل تلقائياً على خطوات أصغر، بينما المعاملات النادرة التحديث تحصل على خطوات أكبر. مثالية للتدرجات المتناثرة كما في طبقات . المشكلة: المقام لا يفعل سوى النمو لأنه مجموع تراكمي — فيتضاءل معدل التعلم حتى يموت التعلم تماماً في المسائل غير المحدبة.
-
(Hinton, 2012) — أصلِح المجموع التراكمي في AdaGrad باستبداله بالمتوسط المتحرك الأُسِّي لمربعات التدرجات. الآن المقام يمكن أن يتقلّص كما يتمدد، فيبقى التعلم حياً. المشكلة: لا زخم اتجاهي ولا آلية لتصحيح الانحياز.
السؤال الجوهري: ماذا لو أمكن الجمع بين تنعيم الاتجاه الذي يوفره الزخم وبين التقييس لكل معلمة الذي توفره RMSProp — ثم إصلاح انحياز التهيئة الصفرية الذي يعاني منه كلا المتوسطَين المتحركَين؟ هذا تحديداً ما فعلته آدَم.
الفكرة: متوسطان متحركان وتصحيح للانحياز
لنفهم الفكرة الحدسية أولاً قبل أي رمز رياضي. تخيَّل أن كل معلمة في الشبكة لديها دفتر ملاحظات من صفحتَين:
الصفحة الأولى: البوصلة (العزم الأول, m) — تسجّل الاتجاه السائد لـلتدرج خلال الخطوات الأخيرة. هذه هي فكرة الزخم بالضبط: بدلاً من الاعتماد على التدرج اللحظي المشوَّش، نبني متوسطاً متحركاً أُسِّياً ينعّم الاضطراب ويحتفظ بالاتجاه المتسق. القيم الحديثة تأخذ وزناً أكبر والقديمة تتلاشى تدريجياً — كأثر خطوات على الرمل تمحوه الرياح ببطء.
الصفحة الثانية: مقياس الانحدار (العزم الثاني, v) — تسجّل حجم التدرج مؤخراً بصرف النظر عن اتجاهه. لماذا المربّع؟ لأن التربيع يُلغي الإشارة (+ أو −) فنقيس «الطاقة» الخالصة لإشارة التدرج. هذا يُخبرنا هل هذه المعلمة تعيش على منحدر شديد (v كبير) أم على هضبة مستوية (v صغير).
الآن يأتي التحديث الفعلي — وهو القسمة الحاسمة. نأخذ اتجاه البوصلة (الزخم المصحَّح) ونقسمه على جذر قراءة مقياس الانحدار (المصحَّح). رمز القبعة يعني أن القيمة خضعت لـتصحيح الانحياز — وسنشرحه بعد قليل.
هذه القسمة هي المفتاح: حين يكون v صغيراً (هضبة مستوية) يصغر المقام فتكبر الخطوة — تتقدّم بسرعة حيث التضاريس آمنة. وحين يكون v كبيراً (منحدر حاد) يكبر المقام فتصغر الخطوة — تتباطأ حيث التضاريس خطرة. بذلك تحصل كل معلمة على خاص بها تلقائياً.
لماذا يُعدُّ تصحيح الانحياز ضرورياً
لنبدأ بالمشكلة قبل الحل. يُهيَّأ كلٌّ من m وv بالقيمة صفر عند بدء التدريب. تخيَّل أنك تبني متوسطاً متحركاً لدرجة الحرارة اليومية وبدأت عدّادك من الصفر: في اليوم الأول تكون قراءتك 10% فقط من الحرارة الفعلية (لأن β₁ = 0.9 تعني الاحتفاظ بـ90% من القيمة القديمة التي هي صفر). في الخطوات الأولى، المتوسط المتحرك الأُسِّي لم يتراكم بعد تاريخ كافٍ، فتكون تقديراته منحازة بشدة نحو الصفر.
هذا ليس تفصيلة نظرية هامشية — بل له أثر عملي خطير. حين يكون العزم الثاني v قريباً من الصفر زيفاً (بسبب الانحياز)، يصغر مقام القسمة فينتفخ معدل التعلم الفعّال إلى عشرة أضعاف أو أكثر مما هو مقصود، فتندفع الأوزان في الخطوات الأولى اندفاعاً جامحاً قد يُفسد التدريب من بدايته. تصحيح الانحياز يعالج هذا بقسمة بسيطة وأنيقة:
كيف يعمل هذا؟ عند الخطوة الأولى، يكون المقام (1 − 0.9¹) = 0.1، فالقسمة على 0.1 تضخّم m بمقدار عشرة أضعاف — وهذا يعوّض تماماً الانحياز الذي أنقصه بالقدر نفسه. مع تقدّم الخطوات، يقترب المقام من 1 ويتلاشى التصحيح تدريجياً لأنه لم يعد ضرورياً. هذه الحيلة الرياضية الأنيقة هي أحد أهم إسهامات آدَم مقارنة بـRMSProp التي كانت تفتقر إليها.
معدل التعلم التكيُّفي: لماذا تحصل كل معلمة على إيقاعها الخاص
لنفهم الحكمة الهندسية خلف هذه القسمة (البوصلة ÷ مقياس الانحدار) عبر ثلاثة سيناريوهات:
-
المعلمة «أ» — تدرجاتها كبيرة وثابتة الاتجاه. العزم الأول m مرتفع (بوصلة واضحة)، والعزم الثاني v مرتفع أيضاً (إشارة قوية). حاصل القسمة m/√v يبقى معتدلاً — فتتقدّم بخطوات ثابتة ومتّزنة.
-
المعلمة «ب» — تدرجاتها ضئيلة لكنها متسقة. m منخفض وv منخفض. النسبة m/√v تظل معتدلة أيضاً — أي أنها تتقدّم بإيقاع فعّال مقارب رغم صغر إشارتها الخام. هذا جوهري: آدَم ترفع صوت الإشارة الخافتة المتسقة بدلاً من تجاهلها.
-
المعلمة «ج» — تدرجاتها مضطربة تتقلّب بين الموجب والسالب. العزم الأول m ≈ 0 (الإشارات المتعاكسة تلاشت في المتوسط)، لكن العزم الثاني v كبير (لأن التربيع يلغي الإشارة فتتراكم الطاقة). النسبة m/√v ≈ 0 — فتقرر آدَم بحقّ عدم تحريك هذه المعلمة لأنه لا يوجد اتجاه واضح.
هذا التقييس التلقائي لكل معلمة هو سرّ متانة آدَم عبر البنى المختلفة. في الشبكة الواحدة قد تجد: طبقات التضمين ذات التدرجات المتناثرة، وطبقات ذات التدرجات الضئيلة، وطبقات المخرجات ذات التدرجات الكبيرة — وآدَم تمنح كلاً منها حجم خطوة مناسباً تلقائياً دون أي ضبط يدوي.
الخوارزمية الكاملة
بعد أن فهمنا الحدس والغاية من كل مكوّن، ها هي خوارزمية آدَم كاملة في ستة أسطر رياضية فقط — وهي الأسطر التي تدرّب معظم أنظمة الذكاء الاصطناعي الحديثة:
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def adam(params, grads, m, v, t, lr=0.001, beta1=0.9, beta2=0.999, eps=1e-8):
"""خطوة واحدة من آدَم. تحدّث المعاملات وتعيد m وv وt المحدَّثة."""
t += 1
for i in range(len(params)):
# تحديث العزم الأول — البوصلة (الزخم)
m[i] = beta1 * m[i] + (1 - beta1) * grads[i]
# تحديث العزم الثاني — مقياس الانحدار (مربعات التدرجات)
v[i] = beta2 * v[i] + (1 - beta2) * grads[i]**2
# تصحيح الانحياز الناتج عن التهيئة الصفرية
m_hat = m[i] / (1 - beta1**t)
v_hat = v[i] / (1 - beta2**t)
# تحديث المعلمة: البوصلة ÷ مقياس الانحدار
params[i] -= lr * m_hat / (np.sqrt(v_hat) + eps)
return m, v, t
# هذا كل شيء. الأمر torch.optim.Adam في PyTorch يفعل هذا بالضبط
# (مع تحسينات هندسية طفيفة) لكل معلمة في شبكات بمليارات الأوزان.آدَم مقارنةً بالبقية: شجرة عائلة خوارزميات الأمثَلَة
تطوّرت خوارزميات الأمثَلَة عبر تقليدَين منفصلَين: تقليد الزخم (تنعيم الاتجاه) وتقليد المعدلات التكيُّفية (تقييس حجم الخطوة لكل معلمة). آدَم هي أول من جمع بين التقليدَين وأضاف تصحيح الانحياز:
| الزخم (العزم الأول)؟ | معدل تعلم تكيُّفي (العزم الثاني)؟ | تصحيح الانحياز؟ | |
|---|---|---|---|
| الانحدار التدريجي العشوائي (SGD) | ✗ | ✗ | — |
| SGD + الزخم | ✓ | ✗ | — |
| AdaGrad | ✗ | ✓ (مجموع تراكمي) | — |
| RMSProp | ✗ | ✓ (المتوسط المتحرك الأُسِّي) | ✗ |
| آدَم (Adam) | ✓ | ✓ (المتوسط المتحرك الأُسِّي) | ✓ |
لهذا يرمز اسم الخوارزمية إلى «تقدير العزوم التكيُّفية» (Adaptive Moment estimation) — فهي تقدّر عزمَين إحصائيَّين (المتوسط والتباين) للتدرج بشكل تكيُّفي لكل معلمة على حدة.
أداماكس (AdaMax): صيغة القيمة القصوى
تقدّم الورقة أيضاً صيغة بديلة تُسمّى أداماكس (AdaMax). الفكرة بسيطة: بدلاً من أن يسأل مقياس الانحدار «ما متوسط حجم التدرج مؤخراً؟» (باستخدام متوسط المربعات ثم الجذر التربيعي)، يسأل سؤالاً أبسط: «ما أقصى حجم للتدرج شهدناه مؤخراً؟» — أي يستبدل المعيار L² في العزم الثاني بمعيار اللانهاية L∞:
لهذا فائدتان عمليتان. أولاً: لا حاجة لحساب الجذر التربيعي لأن uₜ حجم فعلي وليس كمية مربعة. ثانياً: القيمة القصوى أقل حساسية للتدرجات الشاذة مقارنة بمتوسط المربعات، فيكون المقام أكثر استقراراً. تُفضَّل أداماكس أحياناً في التطبيقات التي تتفاوت فيها أحجام التدرجات بشدة من خطوة لأخرى.
المعلمات الفائقة: لماذا تعمل القيم الافتراضية بدون ضبط
لـآدَم ثلاث فقط، وميزتها أن لكل واحدة تفسيراً حدسياً واضحاً:
-
α = 0.001 (معدل التعلم) — حجم الخطوة الكلّي. بما أن آدَم تتكيّف تلقائياً لكل معلمة عبر القسمة على √v̂، فهذا المعدل يحتاج ضبطاً أقل بكثير مما يحتاجه الانحدار التدريجي العشوائي العادي.
-
β₁ = 0.9 (معامل اضمحلال العزم الأول — الزخم) — يتحكّم في سعة «ذاكرة البوصلة». القيمة 0.9 تعني «تذكَّر 90% من الاتجاه السابق وامزج 10% من التدرج الجديد.» عملياً، نافذة الذاكرة الفعّالة نحو 10 خطوات. قيم أقل (مثل 0.5) تستجيب أسرع لتقلبات التدرج لكنها أقل تنعيماً، وقيم أعلى (مثل 0.95) تنعّم بقوة أكبر لكنها أبطأ استجابة.
-
β₂ = 0.999 (معامل اضمحلال العزم الثاني — مقياس الانحدار) — يتحكّم في سعة «ذاكرة مقياس الانحدار». القيمة 0.999 تعني ذاكرة طويلة تقارب 1000 خطوة. لماذا أطول من β₁؟ لأن مقياس حجم التدرج يحتاج استقراراً أكبر — التذبذب السريع في المقام ينتج تحديثات غير مستقرة.
-
ε = 10⁻⁸ — ثابت ضئيل يمنع القسمة على صفر. نادراً ما يحتاج تغييراً.
أظهرت الورقة أن هذه القيم الافتراضية تعمل بكفاءة على الشبكات الالتفافية والشبكات التكرارية والانحدار اللوجستي — وهو ادّعاء واسع النطاق صمد أمام التطبيق العملي لعقد كامل. هذه الشمولية هي السبب الرئيسي لأن آدَم أصبحت الخيار الافتراضي الذي يبدأ به كل ممارس في التعلم العميق.
الأثر: لماذا غيّرت آدَم مجرى الحقل
الإرث: ذرّية آدَم من خوارزميات الأمثَلَة
2014
آدَم (هذه الورقة)
جمعت بين الزخم والمعدلات التكيُّفية مع تصحيح الانحياز في خوارزمية واحدة. أصبحت المُحسِّن الافتراضي في التعلم العميق.
2017
AMSGrad
عالجت مشكلة نظرية في التقارب بالاحتفاظ بالقيمة القصوى لتاريخ العزم الثاني v، مما يضمن ألا يتقلص المقام أبداً.
2017
AdamW (اضمحلال الأوزان المفصول)
بيَّن Loshchilov وHutter أن تنظيم L2 داخل آدَم لا يكافئ اضمحلال الأوزان الحقيقي. تطبّق AdamW اضمحلال الأوزان مباشرة على المعاملات مفصولاً عن التدرج، مما يحسّن التعميم. أصبحت المعيار لتدريب المحوِّلات.
2019
LAMB
عزوم تكيُّفية على مستوى الطبقة مصمَّمة للتدريب بدُفعات ضخمة. أتاحت تدريب BERT في 76 دقيقة عبر توسعة آدَم لتتعامل مع حجم دفعة يبلغ 64 ألف عينة.
2020
AdaFactor
صيغة فعّالة في استهلاك الذاكرة تُحلِّل مصفوفة العزم الثاني إلى عوامل أبسط، فتقلّص ذاكرة المُحسِّن من O(mn) إلى O(m+n). استُخدمت في T5 وPaLM.
2024
آدَم لا تزال مهيمنة
كلٌّ من GPT-4 وClaude وGemini وLlama وDeepSeek تستخدم صيغاً مشتقة من آدَم. بعد عقد كامل، لم يظهر مُحسِّن مختلف جذرياً ينتزع مكانتها في التدريب واسع النطاق.
المرجعKingma, D. P. and Ba, J.. Adam: A Method for Stochastic Optimization. ICLR, 2015.
مصطلحات هذه الورقة
- خوارزمية آدامAdam
- معدل التعلم التكيُّفيAdaptive Learning Rate
- العزم الأولFirst Moment
- العزم الثانيSecond Moment
- تصحيح الانحيازBias Correction
- أداماكسAdaMax