Dropout Layer
تصفّر طبقة الإسقاط عشوائيًا نسبة من التنشيطات أثناء التدريب، كيلا تعتمد الشبكة على وحدة واحدة بعينها، ما يقلل فرط التكيّف.
طبقة الإسقاط العشوائي مكوّن من مكوّنات التنظيم في الشبكة العصبية، وتُصفّر عشوائيًا نسبة p من مدخلاتها في كل خطوة تدريب، وتمرّر جميع القيم دون تغيير أثناء الاستدلال. ولأن أي وحدة قد تختفي في أي خطوة، لا تستطيع الشبكة الاعتماد على عدد قليل من العصبونات المحددة أو على التكيّفات المشتركة الهشة فيما بينها؛ لذلك تتعلم سمات زائدة عن الحاجة تعمم على نحو أفضل، وتقلّل فرط التكيّف مع بيانات التدريب. قدّم جيفري هينتون وزملاؤه هذه التقنية في عام 2012، وشرحها سريفاستافا وهينتون وآخرون بالتفصيل في عام 2014. وهي طبقة مدمجة في PyTorch وTensorFlow ومعظم أطر التعلّم العميق الأخرى، وتُستخدم في بُنى تمتد من رؤوس المصنّفات كاملة الاتصال إلى المحوّلات.
آلية عمل الإسقاط العشوائي#
أثناء التدريب، تسحب الطبقة قناعًا عشوائيًا جديدًا في كل تمريرة أمامية، وتُبقي كل عنصر باحتمال 1 − p وتصفّره باحتمال p. لذلك تدرّب كل خطوة شبكة فرعية مختلفة ومخفّفة، بينما تقارب الشبكة الكاملة المستخدمة وقت الاختبار متوسطًا على الشبكات الفرعية العديدة أُسيًا التي تتشارك أوزانها، ولهذا يوصف الإسقاط العشوائي كثيرًا بأنه تدريب تجميعي منخفض الكلفة. وللحفاظ على القيمة المتوقعة للتنشيط نفسها في المرحلتين، تستخدم أطر العمل الحديثة الإسقاط العكسي: تُضرب القيم المتبقية في 1 / (1 − p) أثناء التدريب، فلا تفعل الطبقة شيئًا في الاستدلال. تتبع nn.Dropout في PyTorch وضع التدريب أو التقييم الخاص بالوحدة:
import torch
from torch import nn
torch.manual_seed(0)
dropout = nn.Dropout(p=0.5)
x = torch.ones(10)
# وضع التدريب: تُصفّر نحو نصف القيم، وتُضرب القيم المتبقية في 1 / (1 - p) = 2
dropout.train()
print("Train:", dropout(x))
# وضع التقييم: تمرر الطبقة كل قيمة دون تغيير
dropout.eval()
print("Eval: ", dropout(x))في وضع التدريب، تُسقط ست قيم من أصل عشر، وتصبح القيم الأربع المتبقية 2.0، ما يحافظ على القيمة المتوقعة عند 1.0؛ أما في وضع التقييم، فتبقى القيم العشر كلها عند 1.0.
أنواع الإسقاط العشوائي الشائعة#
- الإسقاط المكاني: تصفّر
nn.Dropout2dفي PyTorch قنوات خرائط السمات كاملة، وهو ما يلائم الشبكات الالتفافية لأن وحدات البكسل المتجاورة داخل القناة مترابطة بقوة، وإسقاط بكسلات منفردة لا يحقق إلا قدرًا ضئيلًا من التنظيم. - العمق العشوائي (DropPath): بدلًا من التنشيطات الفردية، تُتخطى فروع متبقية كاملة عشوائيًا لكل عينة، وهو مكوّن أساسي في تدريب المحوّلات البصرية وشبكات CNN الحديثة.
- الإسقاط العشوائي بطريقة مونت كارلو: يظل الإسقاط العشوائي نشطًا أثناء الاستدلال، ويُجري النموذج عدة تمريرات أمامية على المدخل نفسه. ويوفر تشتت التنبؤات تقديرًا منخفض الكلفة لعدم يقين النموذج في الأنظمة الحرجة للسلامة، وهي طريقة فسّرها Gal وGhahramani على أنها استدلال بايزي تقريبي.
- DropConnect: تُصفّر أوزان فردية عشوائيًا بدلًا من التنشيطات، بحيث يكون لكل وصلة قناعها الخاص.
الإسقاط العشوائي عمليًا#
تُضبط معدلات الإسقاط العشوائي مثل أي معلمة فائقة أخرى. ووجد Srivastava وآخرون أن إسقاط الوحدات المخفية باحتمال 0.5 ينجح عبر نطاق واسع من الشبكات والمهام، بينما تحقق وحدات الإدخال أفضل أداء عند معدل إبقاء أقرب إلى 1، واستخدم Transformer الأصلي p = 0.1. يبطئ المعدل المرتفع جدًا التقارب وقد يؤدي إلى نقص التكيّف، كما قد يضر وضع الإسقاط العشوائي مباشرة قبل تطبيع الدفعات بالدقة بسبب انزياح التباين بين التدريب والاختبار. تعتمد كثير من الشبكات العصبية الالتفافية أساسًا على تطبيع الدفعات وزيادة البيانات واضمحلال الأوزان، مع الإبقاء على الإسقاط العشوائي لرأس المصنف. تتبع نماذج التصنيف في Ultralytics YOLO26 هذا النمط: تحتوي على طبقة إسقاط عشوائي واحدة بين سمات القنوات الـ1,280 بعد التجميع والمصنف الخطي النهائي، وتحدد وسيطة التدريب dropout معدلها (0.0 افتراضيًا).
from ultralytics import YOLO
# تحميل نموذج تصنيف YOLO26، الذي يحتوي رأسه على طبقة الإسقاط العشوائي
model = YOLO("yolo26n-cls.pt")
# التدريب بإسقاط عشوائي بنسبة 10% في رأس التصنيف على مجموعة فرعية صغيرة من MNIST
results = model.train(data="mnist160", epochs=10, imgsz=64, dropout=0.1)تطبيقات عملية#
- تحليل الصور الطبية: يصعب الحصول على صور ممسوحة موسومة، لذا غالبًا ما تُضبط المصنفات التشخيصية ضبطًا دقيقًا انطلاقًا من عمود فقري مُدرَّب مسبقًا على بضعة آلاف من الصور. ويحد الإسقاط العشوائي في رأس المصنف من مقدار حفظ الرأس لحالات فردية من مجموعة صغيرة كهذه.
- معالجة اللغة الطبيعية: تطبق مشفّرات Transformer مثل BERT الإسقاط العشوائي باحتمال 0.1 على جميع الطبقات، بما فيها أوزان الانتباه، أثناء التدريب المسبق والضبط الدقيق.
الإسقاط العشوائي مقارنةً بالتقنيات ذات الصلة#
- تطبيع الدفعات: يوحّد تطبيع الدفعات مدخلات كل طبقة لتثبيت التدريب، ولا يضيف سوى ضوضاء طفيفة مصدرها إحصاءات الدفعة، دون إزالة أي وحدات.
- تنعيم التسميات: ينظّم تنعيم التسميات عبر أهداف التدريب بتليين التسميات أحادية الترميز، مع الإبقاء على جميع التنشيطات.
- التقليم: يزيل التقليم الأوزان ذات الأهمية المنخفضة نهائيًا لتصغير النموذج، بينما يستمر تصفير الإسقاط العشوائي خطوة تدريب واحدة فقط ولا يغيّر عدد المعلمات.










