الشبكات العصبية2014مبتدئ11 دقيقة قراءة
الإسقاط العشوائي: طريقة بسيطة لمنع الشبكات العصبية من فرط التخصيص
Dropout: A Simple Way to Prevent Neural Networks from Overfitting
Srivastava, N. · Hinton, G. · Krizhevsky, A. · Sutskever, I. · Salakhutdinov, R. — JMLR
المشكلة
الشبكات العصبية العميقة ذات الملايين من المعاملات قد تحفظ بيانات بدل أن تتعلّم أنماطاً عامة — وهذا ما نسمّيه . العلاج المثالي هو تدريب عدة نماذج منفصلة ثم حساب متوسط تنبؤاتها (نماذج تجميعية)، لكن هذا مُكلف جداً حسابياً حين يكون كل نموذج شبكة عميقة ضخمة. لم تكن هناك طريقة رخيصة تحقق فوائد النماذج التجميعية من تدريب واحد فقط.
الإسهام
الإسقاط العشوائي: في كل خطوة تدريب، أطفئ كل عصبون مخفي باحتمال 0.5 (أو كل مُدخل باحتمال ~0.2) بشكل مستقل. النتيجة أنك تسحب في كل دُفعة صغيرة شبكة «مُرقَّقة» مختلفة — أي عدد هائل أُسّي من البنى من مجموعة أوزان مشتركة واحدة. عند الاختبار، استخدم الشبكة كاملة واضرب كل وزن لتقريب متوسط النماذج التجميعية بتكلفة زهيدة. بدمجه مع تقييد الحد الأقصى للأوزان ومعدّلات تعلّم مرتفعة، قلّص الإسقاط العشوائي فرط التخصيص في مهام الرؤية والكلام والنص والأحياء الحاسوبية.
الأثر
أصبح الإسقاط العشوائي أداة الضبط الافتراضية للشبكات العصبية طوال العقد الثاني من الألفية، ولا يزال مكوّناً أساسياً في معظم أنظمة التعلم العميق. فكرته المحورية — أن حقن الضجيج أثناء التدريب يحسّن التعميم — ألهمت عائلة كاملة من أساليب الضبط العشوائي منها DropConnect والعمق العشوائي وDropBlock وCutout. حتى البنى الحديثة كالمحوِّلات لا تزال تستخدمه. وقد تجاوزت استشهادات الورقة 40,000 استشهاد.
تخيّل فريق كرة قدم خمسة لاعبين فيه يمرّرون الكرة لبعضهم فقط في كل مرة. أداؤهم في التمارين يبدو مثالياً — لكن بمجرد غياب لاعب واحد ينهار كل شيء.
هو المدرب الذي يُقصي عشوائياً نصف الفريق في كل حصة تدريبية. لا يستطيع أيّ لاعب أن يتّكل على شريك ثابت، فيضطر كل واحد لتعلّم التمرير والمراوغة والتسديد بنفسه. يوم المباراة يلعب الجميع، والفريق أقوى بكثير لأن كل لاعب بنى مهارته الفردية فعلاً.
هي الفريق. هي اللاعبون. التدريب بالإسقاط العشوائي هو التمرين بغيابات عشوائية. هو يوم المباراة — الجميع يلعب، والنتيجة أقوى مما يمكن لأي تشكيلة ثابتة أن تحققه.
المشكلة: الشبكات القوية تحفظ بدل أن تتعلّم
حين تملك شبكة عصبية عميقة ملايين ، تصبح لديها سعة كافية لحفظ كل مثال تدريبي حرفياً — لكن الحفظ نقيض التعلّم. الشبكة التي تحفظ بياناتها تؤدي أداءً ممتازاً على بيانات التدريب، لكنها تنهار أمام أي بيانات جديدة. هذه الفجوة بين أداء التدريب وأداء الاختبار هي ما نسمّيه فرط التخصيص، وقد كانت العقبة العملية الأبرز أمام تدريب الشبكات الكبيرة في مطلع عام 2010.
قبل ظهور الإسقاط العشوائي، كان لدى الممارسين أدوات محدودة: (أوقف التدريب قبل أن تبدأ الشبكة بالحفظ)، و (عاقب الأوزان الكبيرة لتبقى صغيرة)، و (اعرض على الشبكة نسخاً مشوّهة من أمثلة التدريب). أدوات مفيدة، لكن الأسلوب الأنجع بينها كان النماذج التجميعية — درّب 5 إلى 10 شبكات مستقلة ثم احسب متوسط تنبؤاتها. السر في نجاحها أن كل شبكة تخطئ في أماكن مختلفة، فيلغي المتوسط تلك الأخطاء.
المشكلة أن تدريب شبكة واحدة كبيرة قد يستغرق أسبوعاً، فتدريب عشرٍ منها يعني عشرة أسابيع. والاستدلال بعشر شبكات أبطأ بعشر مرات. بالنسبة للبنى الضخمة التي بدأ المجال يستكشفها، كانت تكلفة النماذج التجميعية تتجاوز الإمكانيات العملية.
الفكرة: أخمِد العصبونات عشوائياً أثناء التدريب
فكرة الإسقاط العشوائي بسيطة بشكل لافت. في كل خطوة تدريب، يُطفَأ كل عصبون في بشكل مستقل (يُضبط ناتجه على صفر) باحتمال $1 - p$، حيث هو احتمال الإبقاء. الإعداد المعتاد هو للطبقات الخفية و لطبقة الدخل — لأن المُدخلات تحمل إشارة خاماً فنُسقط عدداً أقل منها.
كل خطوة تدريب تستخدم إذن عشوائية مختلفة، أي شبكة فرعية لا تتضمن إلا العصبونات الناجية ووصلاتها. ولأن إدراج كل عصبون أو استبعاده يجري باستقلالية، فإن شبكة فيها عصبوناً تُنتج شبكة فرعية محتملة. تخيّل الأمر كأنك في كل تسحب بنية مختلفة من عائلة ضخمة أُسّياً، ثم تتشارك جميع هذه البنى تحديثات ذاتها.
الآلية تعتمد على بوابة عشوائية بسيطة هي تجربة برنولي: لكل عصبون، ارمِ عملة منحازة — إن ظهر الوجه (باحتمال ) يبقى العصبون، وإلا يُسكَت.
آلية العمل: التمرير الأمامي مع الإسقاط العشوائي
في الشبكة العادية، يُحسب ناتج من تنشيطات الطبقة السابقة. الإسقاط العشوائي يُضيف سطراً واحداً فقط: قبل تمرير التنشيطات إلى الطبقة التالية، اضربها عنصراً بعنصر في قناع ثنائي عشوائي. وإليك ما يحدث في كل خطوة من التمرير الأمامي المُعدَّل:
-
ولِّد القناع. لكل عصبون في الطبقة ، اسحب عيّنة مستقلة من توزيع برنولي باحتمال . تحصل على متجه ثنائي من آحاد وأصفار — الواحد يعني «أبقِ» والصفر يعني «أسقِط».
-
طبّق القناع. اضرب ناتج الطبقة عنصراً بعنصر في هذا القناع: . كل صفر في يُسكت العصبون المقابل له.
-
مرِّر للأمام. استخدم الناتج المُقنَّع مدخلاً للطبقة التالية. هكذا ترى كل طبقة مجموعة فرعية عشوائية مختلفة من مدخلاتها في كل خطوة تدريب.
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def dropout_forward(x, p=0.5, training=True):
"""طبّق الإسقاط العشوائي على التنشيطات x.
p = احتمال إبقاء كل عصبون."""
if not training:
return x # لا إسقاط عند الاستدلال
# قناع برنولي: 1 باحتمال p، و0 باحتمال 1-p
mask = (np.random.rand(*x.shape) < p).astype(np.float32)
# اقسم على p حتى يبقى المتوسط المتوقع ثابتاً (الإسقاط المقلوب)
return x * mask / pوقت الاختبار: تقييس الأوزان بدل الاختيار العشوائي
أثناء التدريب، كل عصبون يكون حاضراً بنسبة فقط من الوقت. عند الاختبار نستخدم جميع العصبونات — لكن الإشارة الكلية التي تصل لكل طبقة تصبح أكبر مما تدرّبت الشبكة على التعامل معه، فنحتاج لتعويض هذا الفرق.
الحل بسيط: اضرب كل وزن في عند الاختبار. إن كان العصبون حاضراً 50% من الوقت أثناء التدريب ()، فتقليص أوزانه الصادرة للنصف عند الاختبار يحافظ على المقدار المتوقع للإشارة. عملية الضرب هذه وحدها هي التي تتيح لنا تقريب متوسط شبكة مُرقَّقة دون تشغيلها فعلياً.
عملياً، تستخدم معظم أُطر العمل ما يُعرف بـ**** — وفيه نقسم التنشيطات على أثناء التدريب بدلاً من ضرب الأوزان عند الاختبار. الأثر الرياضي واحد، لكن الإسقاط المقلوب يجعل كود الاختبار أنظف: لا تقييس مطلوب، فقط أزل طبقة الإسقاط.
لماذا ينجح: ثلاث زوايا متكاملة
الزاوية الأولى — نموذج تجميعي ضمني. حين يكون لديك عصبوناً قابلاً للإسقاط، يزور التدريب في كل دُفعة صغيرة شبكة فرعية مختلفة من بين بنية ممكنة. كل شبكة فرعية تحصل على تحديث واحد وتتشارك الأوزان مع بقية الشبكات. عند الاختبار، يقرّب تقييس الأوزان عملية حساب المتوسط الهندسي عبر هذه المجموعة الأُسّية من النماذج. الفكرة تشبه أسلوب الـ bagging (التدريب على مجموعات فرعية مختلفة)، لكنها أرخص بكثير لأن جميع الشبكات الفرعية تتشارك المعاملات.
الزاوية الثانية — كسر . بدون الإسقاط العشوائي، تبني العصبونات شراكات هشة: العصبون أ يتعلّم الاعتماد على ناتج العصبون ب تحديداً. هذه المترابطة تعمل بلا خلل على بيانات التدريب، لكنها تتحطم أمام بيانات جديدة لأن تلك الشراكة رمّزت خصوصيات مجموعة التدريب لا أنماطها العامة. الإسقاط العشوائي يُجبر كل عصبون على أن يكون مفيداً بمفرده، مهما كانت المجموعة العشوائية من الزملاء الحاضرين معه — فتتشكل سمات متينة تنتقل إلى بيانات لم تُرَ من قبل.
الزاوية الثالثة — إلهام من البيولوجيا. استعار المؤلفون تشبيهاً من البيولوجيا التطورية: التكاثر الجنسي. في التكاثر اللاجنسي تُنسخ جينات الوالد كما هي، فتبقى مجموعات الجينات المتكيّفة معاً سليمة. أما في التكاثر الجنسي فتُخلط الجينات عشوائياً، فتتفكك التكيّفات المشتركة وتبقى فقط الجينات القوية بذاتها. على المدى التطوري، ينتج التكاثر الجنسي كائنات أمتن تحديداً لأن كل جين يجب أن يعمل جيداً ضمن خلفيات جينية متنوعة. الإسقاط العشوائي يفعل الشيء ذاته: كل عصبون يجب أن يؤدي دوره مهما كانت الشبكة الفرعية العشوائية المحيطة به.
توصيات عملية: المعاملات الفائقة والحيل
قدّمت الورقة إرشادات عملية مفصّلة أصبحت معرفة راسخة في المجال:
-
احتمال الإبقاء . في الطبقات الخفية، الأفضل هو لمعظم البنى — لأنه يُعظّم عدد الشبكات الفرعية الفريدة (المعامل ثنائي الحدّين يبلغ ذروته عند ). أما في طبقة الدخل، فالأفضل لأن المُدخلات الخام تحمل إشارة مهمة وإسقاط كثير منها يُضعف التعلّم.
-
تقييد الحد الأقصى للأوزان (max-norm). يعمل الإسقاط العشوائي بأفضل شكل حين يُقترن بتقييد طول متجه أوزان كل عصبون بحيث لا يتجاوز قيمة معيّنة: (عادة بين 3 و4). هذا يمنع الأوزان من النمو دون حدود استجابةً لضجيج الإسقاط. وعند الجمع بين الإسقاط العشوائي وتقييد الأوزان و مرتفعة، تحققت أقوى النتائج.
-
حجم الشبكة. مع الإسقاط العشوائي، الطبقات الأعرض (عصبونات أكثر في كل طبقة) تحسّن النتائج عموماً لأن السعة الفعلية لـالشبكة المُرقَّقة هي . طبقة فيها 2048 عصبوناً مع عرضها الفعلي 1024 أثناء التدريب — فإذا أردت مكافأة شبكة بدون إسقاط بعرض 1024، ستحتاج تقريباً لمضاعفة حجم الطبقة.
-
زمن التدريب. شبكات الإسقاط العشوائي تحتاج 2–3 أضعاف الوقت حتى تصل إلى . كل تحديث تدرُّج يكون أكثر ضجيجاً (لأنه محسوب على شبكة فرعية عشوائية)، فتحتاج الشبكة لخطوات أكثر. لكن هذه التكلفة أقل بكثير من تدريب نماذج تجميعية منفصلة.
النتائج التجريبية: الإسقاط العشوائي يحسّن كل شيء
اختبر المؤلفون الإسقاط العشوائي على طيف واسع من المهام. على MNIST (أرقام مكتوبة بخط اليد)، قلّص خطأ الاختبار لشبكة تمرير أمامي عادية. وعلى CIFAR-10 وCIFAR-100 (صور طبيعية)، حقق مع أرقاماً قياسية جديدة. وعلى ImageNet (1.2 مليون صورة و1000 صنف)، كان مكوّناً محورياً في البنية الفائزة.
ولم تقتصر الفائدة على الرؤية الحاسوبية، بل حسّن الإسقاط العشوائي النتائج في التعرف على الكلام (TIMIT) وتصنيف النصوص (Reuters) وحتى في الأحياء الحاسوبية (التنبؤ بأنماط القص البديل في الـ RNA). هذا الثبات في التحسّن عبر مجالات شديدة التنوع كان الحجة الأقوى في الورقة: الإسقاط العشوائي ليس أداة مخصصة لمجال بعينه — بل هو أداة عامة الأغراض.
وحين قارن المؤلفون أساليب الضبط المختلفة على بنية ثابتة، وجدوا أن الإسقاط العشوائي وحده تفوّق على اضمحلال الأوزان بنوعيه L2 وL1 وعلى ضبط التشتت KL. والجمع بين الإسقاط العشوائي وتقييد الحد الأقصى للأوزان أعطى أدنى خطأ بين جميع الأساليب المُختبرة.
أثر جانبي غير متوقع: تنشيطات متفرقة
اكتشف المؤلفون أثراً جانبياً لافتاً: شبكات الإسقاط العشوائي تُنتج تلقائياً — معظم العصبونات الخفية تُخرج صفراً حتى بعد إيقاف الإسقاط وقت الاختبار. دون فرض أي عقوبة تشجع التفرُّق، تتعلّم الشبكة من تلقاء نفسها أن تمثّل كل مُدخل بعدد صغير فقط من العصبونات.
السبب أن الإسقاط العشوائي يدرّب كل عصبون على أن يكون مفيداً بذاته. العصبون الذي لا ينشط إلا في سياقات محددة — حيث يساهم فعلاً — ويبقى صامتاً فيما عدا ذلك، هو بالضبط نوع السمة الذي ينجو من فوضى الإسقاط العشوائي. النتيجة أن الشبكة تكتشف تلقائياً تمثيلات مضغوطة وأسهل في التفسير.
الإرث: من الإسقاط العشوائي إلى الضبط الحديث
المبدأ الذي أرساه الإسقاط العشوائي — احقن ضجيجاً مُهيكلاً أثناء التدريب — أطلق عائلة كاملة من الأساليب اللاحقة. DropConnect (2013) يُسقط أوزاناً فردية بدل عصبونات كاملة. العمق العشوائي (2016) يُسقط كتلاً كاملة في شبكات ResNet. DropBlock (2018) يُسقط مناطق مكانية متجاورة من الالتفافية. Cutout (2017) يُسقط رقعاً مستطيلة من صور الدخل.
أظهرت ورقة (2015) أن التسوية ذاتها توفّر قدراً من الضبط الضمني، فحلّت جزئياً محل الإسقاط العشوائي في الشبكات الالتفافية. أما البنى الحديثة مثل فتطبّق الإسقاط العشوائي في نقاط محددة (بعد أوزان الانتباه وبعد طبقات التغذية الأمامية) وتحذفه في أماكن أخرى.
أساليب توسيع البيانات مثل Mixup (2018) يمكن اعتبارها امتداداً لفلسفة الإسقاط العشوائي إلى مستوى البيانات نفسها: بدلاً من تصفير العصبونات عشوائياً، امزج أمثلة التدريب عشوائياً لتمنع الشبكة من حفظ أي مثال بعينه.
اليوم، يكاد لا يخلو صندوق أدوات أي ممارس من الإسقاط العشوائي أو أحد أحفاده — وهذا خير دليل على الأثر الدائم لهذه الورقة في طريقة تدريب الشبكات العصبية.
2012
AlexNet يستخدم الإسقاط العشوائي
ظهر الإسقاط العشوائي في الطبقات المتصلة كلياً لشبكة AlexNet، وأسهم في الفوز بمسابقة ImageNet 2012 بفارق تاريخي. كان هذا أول ظهور عملي واسع للإسقاط العشوائي.
2013
DropConnect
يوسّع فكرة الإسقاط العشوائي بتصفير أوزان فردية بدل عصبونات كاملة، ما يوفر ضبطاً عشوائياً بدقة أعلى.
2014
هذه الورقة — التحليل الشامل
ينشر Srivastava وزملاؤه الدراسة الشاملة للإسقاط العشوائي في JMLR: الأسس النظرية والإرشادات العملية والتجارب عبر الرؤية والكلام والنص والأحياء.
2015
تسوية الدُّفعات
توفّر تسوية الدُّفعات ضبطاً ضمنياً، فتقلّل الحاجة للإسقاط العشوائي أو تحلّ محله في البنى الالتفافية.
2016
العمق العشوائي
يُسقط طبقات كاملة بدل عصبونات فردية، موسّعاً فكرة الإسقاط إلى محور العمق في الشبكات الاستبقائية.
2017
المحوِّلات تتبنى الإسقاط العشوائي
تطبّق ورقة «Attention Is All You Need» الإسقاط العشوائي بعد أوزان الانتباه وبعد كل طبقة فرعية، فيصبح جزءاً أساسياً في كل أشكال المحوِّلات منذ ذلك الحين.
2018
Mixup
يمدّ فلسفة حقن الضجيج إلى مستوى البيانات: امزج أزواجاً من أمثلة التدريب مع تسمياتها. ضبط بدون إسقاط أي عصبون.
المرجعSrivastava, Hinton, Krizhevsky, Sutskever, Salakhutdinov. Dropout: A Simple Way to Prevent Neural Networks from Overfitting. JMLR, 2014.
مصطلحات هذه الورقة
- الإسقاط العشوائي للعصبوناتDropout
- التكيّف المشتركCo-adaptation
- الشبكة المُرقَّقةThinned Network
- احتمال الإبقاءKeep Probability
- الإسقاط المقلوبInverted Dropout
- ضبط الحد الأقصى للأوزانMax-Norm Regularization
- التنشيط المتفرّقSparse Activation