التحسين2019متوسط11 دقيقة قراءة
فصل اضمحلال الأوزان عن التحديث التكيُّفي
Decoupled Weight Decay Regularization
Loshchilov, I. · Hutter, F. — ICLR
المشكلة
كان آدام يُعطي نتائج أضعف من النزول التدريجي العشوائي مع في مهام تصنيف الصور، فاضطرّ الممارسون للتبديل بين المُحسِّنَين بحسب المهمة. تبيّن لاحقاً أن السبب خلل دقيق لكنه جوهري: مكتبات كانت تُطبّق تنظيم L2 وتُسمّيه «اضمحلال أوزان»، لكنهما ليسا متكافئَين في المُحسِّنات التكيُّفية. تنظيم L2 يُقسَم على معدلات التعلم التكيُّفية الخاصة بكل معامل، فتحصل الأوزان ذات التدرجات الكبيرة على تنظيم أقل — عكس المطلوب تماماً.
الإسهام
إصلاح من سطر واحد لكن أثره عميق: افصل خطوة عن التحديث التكيُّفي للتدرجات. في AdamW تتقلّص الأوزان بنسبة ثابتة λ كل خطوة — بغضّ النظر عن حجم التدرج — ثم يُطبَّق التحديث التكيُّفي بشكل مستقل. النتيجة: (1) اضمحلال الأوزان يؤثّر بالتساوي على جميع المعاملات، (2) القيمة المُثلى ومُعامِل الاضمحلال تصبحان مستقلتين إلى حدٍّ كبير ما يُسهّل ضبط المعاملات الفائقة، (3) آدام يصبح منافساً للنزول التدريجي مع الزخم في مهام كان يتخلّف فيها سابقاً، مع تحسّن نسبي بنسبة 15% في خطأ الاختبار على CIFAR-10.
الأثر
أصبح AdamW المُحسِّن الافتراضي المُحوِّلات والنماذج اللغوية الكبيرة. يستخدمه GPT-2 وGPT-3 وBERT ومُحوِّلات الرؤية وعملياً كل نموذج أساسي حديث. الاكتشاف بأن اضمحلال الأوزان وتنظيم L2 يختلفان جذرياً تحت المُحسِّنات التكيُّفية غيّر نظرة المجتمع البحثي للتنظيم بأكمله. واليوم يُعدّ torch.optim.AdamW في PyTorch المُحسِّن الأكثر استخداماً في أبحاث التعلم العميق.
تخيّل صالة رياضية فيها مدرّب شخصي، مهمّته أن يُطبّق حمية واحدة على كل المجموعات العضلية: الجميع يخسر الوزن بالتساوي. لكن في الصالة نظام ذكي () يُلاحظ أن بعض العضلات تتمرّن بجهد أكبر، فيُقرّر من تلقاء نفسه تخفيف حميتها — ظنّاً منه أنه يُساعدها.
النتيجة؟ العضلات التي تحتاج أشدّ انضباط تحصل على أقلّه. الخطة تبدو سليمة على الورق، لكن النظام الذكي أعاد صياغتها بصمت.
AdamW يعزل النظام الذكي عن قسم الحمية تماماً. القاعدة: خطة إنقاص الوزن (اضمحلال الأوزان) تسير في مسار مستقل — لا تدخّل من النظام التكيُّفي. النظام التكيُّفي يظلّ مسؤولاً عن شدّة التمرين (معدَّل التعلُّم)، لكن ليس له علاقة بـالحمية ().
الخلط: تنظيم L2 ≠ اضمحلال الأوزان
لعقود طويلة، عُومِلت تقنيتا تنظيم وكأنهما شيء واحد:
يُضيف حدّ عقوبة إلى يتناسب مع مربع قيم الأوزان: . تدرُّج هذه العقوبة هو ويُضاف إلى تدرُّج الخسارة الأصلي.
اضمحلال الأوزان يُقلّص الأوزان مباشرةً بنسبة ثابتة في كل خطوة: .
في القياسي، الاثنان متكافئان رياضياً (حيث ). لكن هذا التكافؤ ينهار عند استخدام تكيُّفي مثل آدام — وهذا الانهيار كان السبب الخفيّ وراء ضعف تعميم آدام.
لماذا يفترقان داخل آدام
جوهر المشكلة بسيط. آدام يقسم كل تدرُّج على الجذر التربيعي للمتوسط المتحرّك لمربعات التدرجات — وهذا ما يُنتِج معدَّل التعلُّم التكيُّفي. حين نستخدم تنظيم L2، فإن تدرُّج العقوبة يمرّ هو أيضاً عبر هذا التقييس التكيُّفي.
لنأخذ وزناً تدرجاته كانت كبيرة تاريخياً: مقام آدام سيكون كبيراً لهذا الوزن، فيصير معدل التعلم الفعلي صغيراً. لكن المقام الكبير نفسه يُقلّص إشارة التنظيم أيضاً — أي أن الأوزان ذات التدرجات الكبيرة تحصل على تنظيم أقل. الآلية التكيُّفية التي صُمِّمت لتسريع تُقوّض التنظيم من دون أن يلاحظ أحد.
والعكس صحيح: وزن ذو تدرجات صغيرة يُقسَم على مقام صغير فيتضخّم التحديث والتنظيم معاً — أي أن الأوزان الهادئة تُعاقَب أكثر من اللازم. هذا عكس التنظيم المنتظم الذي نريده تماماً.
الإصلاح: سطر واحد يُغيّر كل شيء
إصلاح AdamW بسيط لدرجة مُحرجة. بدلاً من إضافة حدّ التنظيم إلى (حيث يتشابك مع المعدلات التكيُّفية)، نُطبّق اضمحلال الأوزان مباشرةً على المعاملات كخطوة منفصلة بعد التحديث التكيُّفي:
- نحسب دالة الخسارة فقط (بلا حدّ L2)
- نُحدّث العزمَين التكيُّفيَّين و بهذا التدرُّج النظيف
- نحسب الخطوة التكيُّفية بعد :
- بشكل منفصل نُقلّص الأوزان:
حدّ اضمحلال الأوزان لا يمسّ الآلية التكيُّفية مطلقاً. كل وزن يضمحلّ بالمعدل نفسه بصرف النظر عن تاريخ تدرجاته.
خوارزمية AdamW كاملة
خوارزمية AdamW الكاملة تكاد تكون نسخة طبق الأصل من آدام — كل سطر هو نفسه ما عدا السطرين 6 و12. السطر 6 يحسب تدرُّج دالة الخسارة من دون إضافة حدّ التنظيم. والسطر 12 يطرح حدّ اضمحلال الأوزان خارج النسبة التكيُّفية ليبقى مستقلاً عنها. انقر على كل خطوة أدناه لفهم دورها:
لماذا يُحدث فرقاً: معاملات فائقة قابلة للفصل
من أبرز الفوائد العملية لفصل اضمحلال الأوزان أنه يجعل القيمة المُثلى لكلٍّ من معدَّل التعلُّم ومُعامِل اضمحلال الأوزان مستقلة عن الأخرى إلى حدٍّ كبير. في آدام القياسي مع تنظيم L2، هذان مترابطان بإحكام: تغيير أحدهما يستلزم إعادة ضبط الآخر. أفضل الإعدادات تقع على قطر في شبكة — لا يمكنك تحسين أحدهما مع تثبيت الآخر.
في AdamW الوضع مختلف: أفضل الإعدادات تشكّل منطقة مستطيلة. يمكنك إيجاد جيّد و جيّد كلٌّ على حدة، والجمع بينهما سيظلّ قريباً من الأمثل. هذا يختصر تكلفة البحث عن المعاملات الفائقة من شبكة ثنائية الأبعاد إلى مسحَين مستقلَّين أحاديَّي البعد.
التخفيض بجيب التمام وإعادة التشغيل الدافئة
يُبيّن البحث أيضاً أن آدام يستفيد كثيراً من — رغم أنه مُحسِّن تكيُّفي. يقترح المؤلفان AdamWR: وهو AdamW مُقترناً بالتخفيض بجيب التمام من بحثهم السابق SGDR. مُضاعِف معدَّل التعلُّم يتبع المعادلة:
يبدأ معدَّل التعلُّم مرتفعاً ويتراجع بسلاسة نحو الصفر وفق منحنى جيب التمام، ثم «يُعاد تشغيله» — أي يقفز عائداً إلى القمة ويتكرر. كل فترة إعادة تشغيل يمكن أن تنمو بمُعامِل (مثلاً 100 ← 200 ← 400 حقبة تدريبية). الفائدة أن هذا يمنح المُحسِّن فرصة للإفلات من واستكشاف مناطق جديدة في فضاء دالة الخسارة.
الفكرة الجوهرية هنا أن معدلات التعلُّم التكيُّفية (الخاصة بكل معامل) وجداول معدَّل التعلُّم الشاملة تخدم أغراضاً مختلفة وتتكامل بامتياز. المعدلات التكيُّفية تتولّى الاتجاه، بينما الجدول الشامل يتولّى التوازن بين الاستكشاف والاستغلال.
اضمحلال الأوزان على أرض الواقع
لبناء حدس عن دور اضمحلال الأوزان، تخيّل كل وزن نابضاً مربوطاً بالصفر. في كل خطوة تدريب، التدرُّج يسحب الوزن نحو النقطة التي تُقلّل الخسارة، لكن النابض يجذبه عائداً نحو الصفر. التوازن بين هاتين القوتين يُحدّد الحجم النهائي للوزن.
حين نستخدم تنظيم L2 داخل آدام، تتفاوت شدّة النابض من وزن لآخر (لأن المعدلات التكيُّفية تُعدّلها). أمّا مع ، فشدّة النابض واحدة — كل وزن يشعر بالسحب نفسه نحو الصفر. هذا الانتظام يُشجّع على قيم أوزان أصغر وأكثر توزُّعاً، وهي التي تُعمّم بشكل أفضل عادةً.
الفكرة نفسها في الكود
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def adam_step(theta, grad, m, v, t, lr=0.001, beta1=0.9, beta2=0.999, eps=1e-8, wd=0.01):
"""آدام القياسي مع تنظيم L2 (الاضمحلال مخلوط بالتدرج)."""
grad = grad + wd * theta # ← L2: تدرُّج العقوبة يُضاف إلى تدرُّج الخسارة
m = beta1 * m + (1 - beta1) * grad
v = beta2 * v + (1 - beta2) * grad ** 2
m_hat = m / (1 - beta1 ** t)
v_hat = v / (1 - beta2 ** t)
theta = theta - lr * m_hat / (np.sqrt(v_hat) + eps)
return theta, m, v # الاضمحلال قُيّس بـ 1/sqrt(v_hat) — مُشوَّه!
def adamw_step(theta, grad, m, v, t, lr=0.001, beta1=0.9, beta2=0.999, eps=1e-8, wd=0.01):
"""AdamW: اضمحلال الأوزان مفصول عن تحديث التدرج."""
# التدرج نظيف — بلا حدّ L2
m = beta1 * m + (1 - beta1) * grad
v = beta2 * v + (1 - beta2) * grad ** 2
m_hat = m / (1 - beta1 ** t)
v_hat = v / (1 - beta2 ** t)
theta = theta - lr * (m_hat / (np.sqrt(v_hat) + eps) + wd * theta) # ← الاضمحلال مفصول
return theta, m, v # الاضمحلال مُطبَّق بانتظام — كما هو المطلوب!
# هذا كل شيء. سطر واحد تغيّر مكانه. GPT وBERT وكل مُحوِّل حديث يستخدم هذا الإصلاح.ماذا أظهرت التجارب
اختبر المؤلفان AdamW مقابل آدام القياسي (مع تنظيم L2) عبر إعدادات متعددة على CIFAR-10 وImageNet32x32. وجاءت النتائج متّسقة:
- حقّق AdamW تحسّناً نسبياً بنسبة 15% في خطأ الاختبار على CIFAR-10 مقارنةً بآدام مع تنظيم L2.
- التخفيض بجيب التمام مع إعادة التشغيل الدافئة (AdamWR) سرّع التقارب بمعدّل يصل إلى 10 أضعاف في المراحل المبكرة من التدريب.
- المُعاملات الفائقة المُثلى لـ AdamW كانت أسهل في الفصل بكثير: يمكن ضبط معدَّل التعلُّم واضمحلال الأوزان بشكل مستقل، ما يختصر وقت الضبط بشكل كبير.
- عند قيم خسارة تدريب متقاربة، أظهر AdamW باستمرار خطأ اختبار أفضل — وهذا دليل على تحسُّن حقيقي في التعميم وليس مجرد تقارب أسرع.
- أغلق AdamW معظم الفجوة بين آدام والنزول التدريجي العشوائي مع الزَّخم، فأصبح اختيار المُحسِّن أقل عشوائية.
اضمحلال الأوزان المُقيَّس: إعداد واحد لكل ميزانيات التدريب
لاحظ المؤلفان أن القيمة المُثلى لـاضمحلال الأوزان تعتمد على ميزانية التدريب الإجمالية — كلما طال التدريب احتجنا أصغر. فاقترحا لتقليل هذا الاعتماد: ، حيث هو و حجم مجموعة البيانات و عدد . بهذه الطريقة يبقى ثابتاً تقريباً مهما تغيّرت مدة التدريب أو تغيّرت مجموعة البيانات.
هذا التقييس ليس اكتشافاً نظرياً عميقاً — التقييس بالجذر التربيعي حُدِّد تجريبياً. لكن فائدته العملية كبيرة: قيمة جيدة تُكتشَف في تجارب قصيرة تنتقل بسلاسة إلى التجارب الطويلة.
لماذا كان مهمّاً
2014
ظهور مُحسِّن آدام
قدّم Kingma وBa خوارزمية آدام التي تجمع بين الزخم ومعدلات التعلم التكيُّفية. انتشرت سريعاً كمُحسِّن افتراضي، لكنها أظهرت تعميماً أضعف من SGD في بعض المهام.
2017
اقتراح AdamW (مسوّدة على arXiv)
اكتشف Loshchilov وHutter أن تنظيم L2 واضمحلال الأوزان غير متكافئين في المُحسِّنات التكيُّفية، واقترحا فصل اضمحلال الأوزان. عنوان المسوّدة كان «إصلاح تنظيم اضمحلال الأوزان في آدام».
2018
GPT-1 يتبنّى AdamW
استخدم Radford وفريقه AdamW لتدريب أول مُحوِّل GPT، فترسّخ كمُحسِّن أساسي للتدريب المسبق للنماذج اللغوية.
2019
نشر AdamW رسمياً في ICLR
نُشر البحث رسمياً في ICLR 2019. أضافت PyTorch وTensorFlow تطبيقات رسمية لـ AdamW. وكان BERT قد اعتمد عليه منذ 2018.
2020
LAMB — توسيع AdamW للدفعات الكبيرة
طوّر You وفريقه AdamW بإضافة تقييس تكيُّفي لكل طبقة، فأصبح بالإمكان تدريب BERT بدفعات تصل إلى 64 ألف عيّنة، وانخفض وقت التدريب من 3 أيام إلى 76 دقيقة.
2023
Lion — تطوُّر ما بعد AdamW
استخدم Chen وفريقه البحث البرمجي لاكتشاف Lion، مُحسِّن أبسط يعتمد على عمليات الإشارة فقط. ورغم ذلك لا يزال يستخدم اضمحلال أوزان مفصولاً — المبدأ يصمد حتى مع تطوُّر الخوارزمية الأساسية.
العنوان الأصلي للورقة على arXiv كان «إصلاح تنظيم اضمحلال الأوزان في آدام» — عنوان صادق ومُنعش. إعادة تسميته لاحقاً بالعنوان الأكاديمي «فصل تنظيم اضمحلال الأوزان» أخفت الروح الحقيقية: كان هذا إصلاح خلل برمجي. أهمّ إصلاح خلل في تاريخ تحسين التعلُّم العميق.
المرجعLoshchilov, Hutter. Decoupled Weight Decay Regularization. ICLR, 2019.
مصطلحات هذه الورقة
- آدَم مع اضمحلال أوزان مفصولAdamW
- اضمحلال الأوزان المفصولDecoupled Weight Decay
- اضمحلال الأوزانWeight Decay
- الضبط الهيكلي L2L2 Regularization
- اضمحلال الأوزان المُقيَّسNormalized Weight Decay
- فصل المعاملات الفائقةHyperparameter Decoupling
- التلدين الجيبيCosine Annealing
- إعادة التشغيل الدافئةWarm Restarts