التحسين2011متوسط12 دقيقة قراءة
أساليب التدرّج الفرعي التكيُّفية للتعلّم عبر الإنترنت والأمثَلة العشوائية
Adaptive Subgradient Methods for Online Learning and Stochastic Optimization
Duchi, J. · Hazan, E. · Singer, Y. — JMLR
المشكلة
في النسخة التقليدية من SGD، جميع المعاملات تتشارك معدّل تعلّم واحد. المشكلة تظهر حين تكون السمات متفاوتة الظهور تفاوتاً كبيراً — وهذا هو الحال في معالجة اللغة وأنظمة التوصية والتنبؤ بالنقرات: بعض السمات تظهر في كل مثال تقريباً، وبعضها لا يظهر إلا مرة في المليون. إن ضبطتَ معدّل التعلّم ليناسب السمات المتكررة، فالسمات النادرة بالكاد تتحرّك. وإن رفعتَه ليناسب النادرة، فالمتكررة تتأرجح. النتيجة: كان المهندسون يقضون وقتاً هائلاً في ضبط جداول معدّلات تعلّم يدوية لكل مجموعة سمات على حدة، بلا أيّ سند نظري يرشدهم.
الإسهام
AdaGrad مُحسِّن يعطي كل معامل معدّل تعلّم خاصّاً يتكيّف تلقائياً. الفكرة بسيطة: يُراكم مربعات التدرّجات السابقة لكل معامل، فكلّما زاد المجموع المتراكم صغرت الخطوة، وكلّما قلّ كبرت الخطوة. رياضياً، هذا يُكافئ تهيئة التدرّج بالجذر التربيعي المعكوس لتقريب قُطري من مصفوفة فيشر التجريبية. والأسلوب يأتي بضمانات نظرية: حدود ندم مُبرهَنة تُضاهي أفضل معدّل تعلّم ثابت يمكن اختياره بأثرٍ رجعي، مع استغناء شبه كامل عن الضبط اليدوي.
الأثر
AdaGrad دشّن عصر المُحسِّنات التكيُّفية. جاء RMSProp وعالج مشكلة التناقص المستمر بمتوسط متحرك أُسّي، ثم جمع Adam بين ذلك الحل والعزم فصار المُحسِّن الافتراضي في التعلّم العميق. لاحقاً أحيا Shampoo النسخة الكاملة من AdaGrad بطريقة قابلة للتطبيق على النطاق الواسع. كل مُحسِّن تكيُّفي نستخدمه اليوم يرجع في أصله إلى فكرة AdaGrad المركزية: دَع تاريخ التدرّجات يُحدّد شكل خطوة التحديث.
تخيّل مدرّباً يصرخ بالتعليمة نفسها لكل لاعب في الملعب — «اركض أسرع!» — سواء أكان لاعب جناح يركض منذ بداية المباراة أم حارس مرمى لم يلمس الكرة إلا لحظة. هذا تماماً ما يفعله التقليدي: تعليمة واحدة لجميع .
AdaGrad يستبدل هذا الأسلوب بـدفتر شخصي لكل لاعب. لاعب الجناح دفتره مليء بالملاحظات، فيهمس له المدرب: «تعديلات دقيقة الآن.» أما حارس المرمى فدفتره شبه فارغ، فيصرخ له: «حركة كبيرة — استغلّها!»
النتيجة: كل لاعب يحصل على توجيه يتناسب مع تاريخه. المتكررة تتقارب بسلاسة، والسمات النادرة ذات الأثر الكبير تلحق بالركب بسرعة.
المشكلة: معدّل تعلّم واحد لا يخدم جميع المعاملات
في SGD التقليدي، كل معامل يحصل على نفسه . قاعدة التحديث مباشرة:
حيث هو عند الخطوة . هذا يعمل جيداً حين تتلقى جميع المعاملات تدرّجات متقاربة في الحجم والتكرار. لكن في الواقع، كل معامل يعيش حياة مختلفة تماماً.
لنأخذ مثالاً عملياً: لغوي يتعلّم الكلمات. كلمة مثل «في» تظهر في كل جملة تقريباً، فيُحدَّث تضمينها آلاف المرات. في المقابل، كلمة مثل «مصادفة» قد لا تظهر إلا مرة واحدة في كامل مجموعة البيانات. الآن تخيّل أنك تستخدم معدّل تعلّم واحداً للاثنتين: إن رفعت بما يكفي لتتعلم «مصادفة»، ستتأرجح «في» بعنف. وإن خفضته لتستقر «في»، فـ «مصادفة» بالكاد تتحرك.
هذه هي مشكلة : في معالجة اللغة وأنظمة التوصية والتنبؤ بالنقرات، القوة التنبُّئية الحقيقية تكمن في السمات النادرة — لكن معدّل التعلّم الموحّد يحرمها من التحديثات التي تحتاجها.
الفكرة المحورية: تاريخ التدرّجات يُحدّد حجم الخطوة
الفكرة المركزية في AdaGrad بسيطة بشكل مدهش: راكِم مربعات التدرّجات لكل معامل على حدة، ثم اقسم معدّل التعلّم على الجذر التربيعي لذلك المجموع.
تخيّل أن لكل معامل «عدّاد كيلومترات». المعامل الذي حُدِّث مرات كثيرة بتدرّجات كبيرة عدّاده مرتفع — يعني أنه قطع شوطاً طويلاً واقترب من وجهته، فنُصغّر خطواته. أما المعامل ذو العدّاد المنخفض فبالكاد بدأ رحلته — نمنحه خطوة أوسع ليعوّض تأخّره.
هذا هو جوهر معدّلات التعلّم التكيُّفية لكل معامل: بدلاً من واحد يُفرض على الجميع، يصبح لكل معامل خاصّ به، يتقلّص تلقائياً كلّما زادت إشارة التدرّج المتراكمة عنده.
الخوارزمية: ثلاثة أسطر غيَّرت عالم الأمثَلة
قبل أن ندخل في الرموز، لنفهم المنطق خطوة بخطوة. في كل خطوة من التدريب، يقوم AdaGrad بثلاثة أشياء:
الخطوة 1 — احسب التدرّج لكل معامل، بالطريقة المعتادة تماماً كما في SGD.
الخطوة 2 — راكِم: أضف مربع كل مركّبة من التدرّج إلى مجموع تراكمي. هذا المجموع يكبر باستمرار ولا «ينسى» أبداً.
الخطوة 3 — قيِّس التحديث: اقسم التدرّج على الجذر التربيعي للمجموع المتراكم، ثم اضرب الناتج في معدّل التعلّم العالمي. المعاملات التي تراكمت عندها تدرّجات كبيرة تحصل على خطوات أصغر، والمعاملات ذات التدرّجات القليلة أو النادرة تحصل على خطوات أوسع.
لاحظ ما حدث: بدأنا بـمعدّل تعلّم عالمي واحد ، وانتهينا بمعدّل تعلّم فعّال مختلف لكل معامل . التكيّف تلقائي بالكامل — لا جدول يدوي ولا ضبط منفصل لكل سمة. الوحيد المؤثّر هو الابتدائي، وAdaGrad أقل حساسية لاختياره بكثير مقارنةً بـ SGD التقليدي.
النظرة الهندسية: إعادة تشكيل سطح الخسارة
هناك زاوية أعمق لفهم ما يفعله AdaGrad. في SGD العادي، نأخذ التدرّج ونخطو في اتجاهه بخطوة ثابتة. هندسياً، هذا يعني أننا نفترض أن سطح ينحني بالتساوي في كل الاتجاهات — كأننا نستخدم مصفوفة الوحدة .
لكن أسطح الخسارة الحقيقية لا تتصرف هكذا: تنحني بحدّة في اتجاهات وبرفق في أخرى. تخيّل وادياً طويلاً وضيّقاً — الانحدار التدريجي يرتدّ بين الجدران الحادّة بينما يزحف ببطء شديد على أرض الوادي.
AdaGrad يبني ضمنياً تقريباً قُطرياً لانحناء السطح من تاريخ التدرّجات. المجموع المتراكم يقوم مقام قُطر مصفوفة : القيم الكبيرة تدلّ على انحناء حادّ (خطوات أقصر)، والقيم الصغيرة تدلّ على سطح مسطّح (خطوات أطول). الأثر الصافي: الوادي الضيق يتحوّل إلى وعاء أكثر استدارة يتقارب فيه الانحدار التدريجي بسلاسة.
النسخة الكاملة من AdaGrad تستخدم الجداء الخارجي كمُهيِّئ مسبق — وهو تقريب كامل من الدرجة الثانية. النسخة القُطرية تكتفي بالقُطر فقط، وتُقايض بعض الدقة مقابل ذاكرة بحجم بدلاً من .
أين يتألّق: السمات المتناثرة تنال حقّها
قوة AdaGrad تتجلّى بوضوح مع البيانات ذات التناثر العالي. تخيّل سمة لا تظهر إلا في 0.1% من أمثلة التدريب. تدرّجها يساوي صفراً 99.9% من الوقت، فيبقى مجموعها المتراكم صغيراً. حين تظهر هذه السمة أخيراً وتُنتج تدرّجاً غير صفري، يقسم AdaGrad على عدد صغير — فتحصل على معدّل تعلّم فعّال كبير. بهذا تنال السمة النادرة تحديثاً أكبر يعوّض غيابها المتكرر.
في المقابل، السمة الموجودة في كل مثال تُراكم كبيراً بسرعة، فينخفض معدّل تعلّمها الفعّال ويُمنع التأرجح الذي كان سيحصل مع معدّل تعلّم ثابت مرتفع.
هذا ما جعل AdaGrad نقلة نوعية في معالجة اللغة وأنظمة التوصية: هذه المجالات تتسم بفضاءات سمات متناثرة عالية الأبعاد، يتفاوت فيها تكرار ظهور السمات بأضعاف مضاعفة.
نقطة الضعف: معدّل تعلّم لا يسير إلا في اتجاه واحد
في AdaGrad عيب جوهري: المجموع المتراكم لا يتحرك إلا في اتجاه واحد — للأعلى. كل خطوة تضيف إليه قيمة غير سالبة، فـمعدّل التعلّم الفعّال لا يمكنه إلا أن يتناقص ولا يتعافى أبداً. في مسائل المحدّبة هذا ليس مشكلة: كلّما اقتربتَ من الحد الأدنى أردت خطوات أصغر وأصغر. لكن في حيث سطح الخسارة غير محدّب ومليء بالمناطق المسطّحة والمنحدرات، فمعدّل التعلّم الذي تآكل في منطقة مسطّحة لا يستطيع أن يتسارع مجدداً حين يدخل منحدراً حادّاً.
بعد تكرارات كثيرة، قد يصبح معدّل التعلّم الفعّال ضئيلاً لدرجة أن النموذج يتوقف عملياً عن التعلّم — التحديثات تصير مهملة. لذلك يُعاني AdaGrad وحده مع العميقة التي تتطلب آلاف التدريبية.
الفكرة ذاتها في شيفرة برمجية
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
class AdaGrad:
"""مُحسِّن بمعدّل تعلّم تكيُّفي لكل معامل."""
def __init__(self, lr=0.01, eps=1e-8):
self.lr = lr # معدّل التعلّم العالمي (المعامل الفائق الوحيد المهم)
self.eps = eps # ثابت صغير لمنع القسمة على صفر
self.cache = {} # مربعات التدرّجات المتراكمة لكل معامل
def step(self, params, grads):
"""حدِّث المعاملات باستخدام تدرّجاتها."""
for name in params:
g = grads[name]
# أول مرة نرى هذا المعامل؟ هيِّئ دفتره بأصفار
if name not in self.cache:
self.cache[name] = np.zeros_like(g)
# الخطوة 2: راكم مربعات التدرّجات (الدفتر ينمو ولا يتقلّص أبداً)
self.cache[name] += g ** 2
# الخطوة 3: قيِّس كل مركّبة بتاريخها المتراكم
params[name] -= self.lr * g / (np.sqrt(self.cache[name]) + self.eps)
# هذا كل شيء. ثلاثة أسطر رياضية، وفكرة واحدة قوية:
# معاملات بتدرجات شائعة ← ذاكرة كبيرة ← خطوة صغيرة
# معاملات بتدرجات نادرة ← ذاكرة صغيرة ← خطوة كبيرةAdaGrad بالمصفوفة الكاملة: الحالة المثالية التي نقرّبها
الورقة الأصلية تقترح في الواقع صيغة أعمّ: بدلاً من تتبّع القُطر وحده، نُراكم الجداء الخارجي الكامل لـالتدرّجات:
ثم نستخدم (الجذر التربيعي المصفوفي) كمُهيِّئ مسبق في التحديث:
هذا هو التهيئة المسبقة المثالية — لأنها تلتقط بين المعاملات وليس أحجامها الفردية فحسب. لكن عملياً، حساب وقلب مصفوفة في كل خطوة أمر غير واقعي حين يكون عدد المعاملات بالملايين. لذلك النسخة القُطرية هي الحلّ الوسط العملي الذي صار يُعرف بـ «AdaGrad» في الاستخدام اليومي.
فكرة المصفوفة الكاملة لم تندثر رغم ذلك — عادت بعد سنوات في Shampoo الذي وجد طرقاً كفؤة لتقريب المُهيِّئ الكامل في التدريب واسع النطاق.
الضمان النظري: أداء يُضاهي أفضل اختيار بأثرٍ رجعي
AdaGrad يأتي بضمان رسمي من نظرية . مفهوم الندم يقيس الفارق بين أداء وأفضل قرار ثابت كان يمكن اتخاذه بأثرٍ رجعي. في SGD بـمعدّل تعلّم ثابت، حدّ الندم يعتمد على معرفة حجم التدرّجات مسبقاً: إن اخترت معدّلاً مرتفعاً انفجر الندم، وإن اخترته منخفضاً تباطأ التقارب.
حدّ ندم AdaGrad هو:
حيث هو التراكمي لتدرّج المعامل . هذا الحدّ يعتمد على عدد الأبعاد لكنه يتكيّف مع طبيعة البيانات: إن كانت معظم المعاملات ذات تدرّجات صغيرة (بيانات متناثرة)، يظل الحدّ صغيراً حتى في أبعاد عالية جداً. في المسائل المتناثرة قد يتفوّق هذا الحدّ جذرياً على حدّ SGD التقليدي .
بتعبير مبسّط: AdaGrad مُبرهَن رياضياً أنه يؤدّي بجودة أفضل جدول معدّلات تعلّم كنت ستختاره لو كنت تعرف المستقبل مسبقاً.
شجرة العائلة: من AdaGrad إلى المُحسِّنات الحديثة
AdaGrad زرع البذرة، لكن أحفاده بنوا عليها وتجاوزوها:
RMSProp (هينتون، 2012) — استبدل المجموع الذي لا يتوقف عن النمو بمتوسط متحرك أُسّي لمربعات التدرّجات: . بهذا «ينسى» التدرّجات القديمة، فيستقرّ معدّل التعلّم بدلاً من أن ينحدر نحو الصفر. فكّر فيه على أنه AdaGrad بذاكرة مُسرِّبة.
AdaDelta (زيلر، 2012) — يشبه RMSProp لكنه يُكيّف البسط أيضاً عبر متوسط أُسّي لمربعات تحديثات المعاملات، فيستغني عن معدّل التعلّم العالمي كلياً.
Adam (كينغما وبا، 2014) — جمع بين العزم الثاني التكيُّفي من RMSProp والمتوسط المتحرك للعزم الأول ()، مع إضافة تصحيح للانحياز في الخطوات الأولى. سرعان ما أصبح الافتراضي في التعلّم العميق.
Shampoo (غوبتا وآخرون، 2018) — أحيا المُهيِّئ المسبق بالمصفوفة الكاملة من AdaGrad وجعله قابلاً للتطبيق في التدريب واسع النطاق عبر تقريبات جداء كرونيكر.
كل واحد من هؤلاء يُجيب عن السؤال نفسه الذي طرحه AdaGrad: كيف ينبغي لتاريخ التدرّجات أن يُحدّد شكل خطوة التحديث؟ الاختلاف بينهم في مقدار التاريخ الذي يحتفظون به وطريقة بناء المُهيِّئ المسبق.
الخطّ الزمني: كيف أعادت فكرة واحدة تشكيل الأمثَلة
2011
AdaGrad
قدّم Duchi وHazan وSinger معدّلات تعلّم تكيُّفية تُخصَّص لكل معامل استناداً إلى مربعات التدرّجات المتراكمة. حقّق تفوّقاً فورياً في مهام اللغة ذات السمات المتناثرة.
2012
RMSProp
اقترح هينتون استبدال المجموع التراكمي بمتوسط متحرك أُسّي، ممّا يمنع معدّل التعلّم من الانحدار نحو الصفر في الشبكات العميقة.
2012
AdaDelta
تخلّص زيلر من معدّل التعلّم العالمي كمعامل فائق بالكامل، مستخدماً نسبة بين متوسطات متحركة. لا حاجة لأيّ ضبط يدوي.
2014
Adam
جمع كينغما وبا بين العزم الثاني من RMSProp والعزم الأول، مع تصحيح الانحياز في البداية. سرعان ما صار المُحسِّن الأكثر استخداماً في التعلّم العميق.
2018
Shampoo
أعاد Gupta وآخرون إحياء المُهيِّئ المسبق بالمصفوفة الكاملة من AdaGrad، مستخدمين تحليلات جداء كرونيكر لجعله قابلاً للتطبيق في التدريب واسع النطاق.
دليل عملي: متى تستخدم AdaGrad اليوم
رغم مرور السنوات، لا يزال AdaGrad الخيار الأنسب في سياقات بعينها:
استخدم AdaGrad حين تكون سماتك متناثرة وعالية الأبعاد — كالتنبؤ بمعدّل النقرات، ومعالجة اللغة بمفردات كبيرة، وأنظمة التوصية بملايين العناصر. التكيّف التلقائي لكل سمة يتولّى معالجة التفاوت في التكرار تلقائياً، والتناقص الرتيب الذي يبدو عيباً هو في الواقع ميزة في المسائل المحدّبة لأنه يضمن التقارب.
استخدم أو بدلاً منه حين تُدرِّب شبكات عصبية عميقة على بيانات كثيفة (صور، صوت، إشارات مستمرة). السطح غير المحدّب يحتاج معدّل تعلّم قادراً على التعافي بعد المناطق المسطّحة.
القاعدة العملية: إن كانت مسألتك تتضمن سمات متفاوتة التكرار بشدة وخسارتك محدّبة أو شبه محدّبة، فـ AdaGrad لا يزال صعب المنافسة. أما إن كنت في عالم التعلّم العميق بتدرّجات كثيفة وخسارة غير محدّبة، فـ Adam هو خيارك الأوّل.
المرجعDuchi, Hazan, Singer. Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. JMLR, 2011.
مصطلحات هذه الورقة
- معدل التعلمLearning Rate
- الانحدار التدريجيGradient Descent
- الانحدار التدريجي العشوائيStochastic Gradient Descent (SGD)
- الـمُحسِّنOptimizer
- خوارزمية آدامAdam
- خوارزمية آر إم إس بروبRMSProp
- التقارب الحسابيConvergence
- التناثر البنيوي للمصفوفاتSparsity
- الضبط الهيكليRegularization
- اضمحلال الأوزانWeight Decay
- الفقدLoss
- التدرج التفاضليGradient
- المعلمة البنيويةParameter
- ميزة / سمةFeature
- التضمينEmbedding