الرؤية الحاسوبية2015متوسط8 دقيقة قراءة

التعلُّم المتبقّي العميق للتعرّف على الصور

Deep Residual Learning for Image Recognition

He, K. · Zhang, X. · Ren, S. · Sun, J. — CVPR

المشكلة

من المفترض أن الشبكات الأعمق أقوى — سعتها أكبر وقادرة على تمثيل دوال أعقد. لكن التجارب كشفت عن «مشكلة تدهور» محيّرة: إضافة مزيد من الطبقات إلى شبكة التفافية عادية رفع خطأ التدريب والاختبار معاً. المشكلة لم تكن فرط تخصيص (لأن خطأ التدريب نفسه ارتفع). هناك شيء في سطح التحسين لهذه الشبكات العميقة جداً يمنع النزول التدريجي من الوصول إلى حلول جيدة، بل حتى حلول بمستوى ما تجده شبكة أقل عمقاً.

الإسهام

التعلّم المتبقّي: بدلاً من أن نتوقع من كل مجموعة طبقات أن تتعلم التحويل المطلوب H(x) مباشرة، نجعلها تتعلم الفرق فقط F(x) = H(x) − x ثم نُعيد جمع x عبر وصلة تخطّي. إذا كان التحويل الأمثل قريباً من دالة الهوية، فتعلّم فرق قريب من الصفر أسهل بكثير من تعلّم دالة الهوية من الصفر. هذا التعديل الواحد أتاح تدريب شبكات بـ152 طبقة — أعمق من VGG بـ8 مرات — بخطأ أقل وتكلفة حوسبية أقل. كتل عنق الزجاجة (التفافات 1×1 ثم 3×3 ثم 1×1) جعلت هذا العمق الشديد ممكناً عملياً. فازت ResNet بجميع المسارات في ILSVRC وCOCO 2015.

الأثر

جعلت ResNet العمق محوراً موثوقاً للتوسعة — أضف طبقات ويتحسن الأداء بدل أن ينهار. تكاد كل بنية رؤية حاسوبية حديثة (وكثير من النماذج خارج مجال الرؤية) تستخدم الوصلات المتبقّية: DenseNet وEfficientNet ومحوِّلات الرؤية، بل حتى كتل المرمِّز وفاكّ الترميز في نفسه. أصبحت وصلة التخطّي ركيزة في لا تقل أهمية عن الالتفاف ذاته.

تخيّل أنك تصعد ناطحة سحاب عبر الدرج. عند الطابق العشرين الأمور على ما يرام. لكن عند الطابق 56 يصبح الدرج معقّداً لدرجة أنك تجد نفسك أخفض مما لو توقفت عند الطابق 20 — المزيد من الدرج جعلك تخسر ارتفاعاً بدل أن تكسبه.

الحل: عمود مصعد بجانب الدرج. في كل طابق، المصعد ينقلك للأعلى مجاناً ()، ولا يحتاج الدرج إلا لتعلّم الفرق الصغير بين طابق وآخر. الآن 152 طابقاً أمر سهل — كل طابق يستطيع الاعتماد على المصعد إن لم يكن للدرج ما يضيفه.

ذلك المصعد هو . والدرج هو المتبقّي F(x). معاً يعطيانك H(x) = F(x) + x.

المشكلة: الأعمق ليس دائماً الأفضل

بحلول 2015 كانت الوصفة السائدة في مجتمع التعلم العميق واضحة: زِد الطبقات تحصل على نتائج أفضل. شبكتا VGG-16 وVGG-19 تفوّقتا على AlexNet ذات الطبقات الثماني، وGoogLeNet بلغت 22 طبقة. الخطوة المنطقية التالية كانت 50 ثم 100 ثم 150 طبقة.

لكن حدث شيء غير متوقع. عادية من 56 طبقة دُرِّبت على CIFAR-10 سجّلت خطأ تدريب أعلى من نظيرتها ذات العشرين طبقة. ليس خطأ اختبار فقط — بل خطأ تدريب. هذا يعني أن المشكلة ليست ، بل إن الشبكة الأعمق عجزت عن التعلّم بنفس الفعالية.

هذه هي : بعد عمق معيّن، تصبح طبوغرافيا سطح التحسين صعبة لدرجة أن الشبكة لا تستطيع حتى نسخ حل الشبكة الأقل عمقاً — رغم أنها نظرياً قادرة على ذلك، لأن الطبقات الإضافية يمكنها ببساطة أن تتعلم تحويلات هوية لا تفعل شيئاً.

افتح في المختبر
شاهد كيف يتجاوز خطأ تدريب شبكة عادية من 56 طبقة نظيرتها ذات 20 طبقة — مشكلة التدهور أمام عينيك.
تستيقظ التجربة عند وصولك…

الفكرة: تعلَّم الفرق فقط، لا التحويل الكامل

الملاحظة المركزية التي قدّمها He وفريقه بسيطة لكنها عميقة الأثر: إذا كانت الدالة المثلى لكتلة ما قريبة من تحويل الهوية (أي أن المطلوب هو تمرير البيانات كما هي تقريباً)، فإن تعلّم H(x) = x من الصفر صعب على حزمة طبقات غير خطية. في المقابل، تعلّم F(x) = 0 أمر سهل — يكفي دفع الأوزان جميعها نحو الصفر.

تعيد صياغة المهمة بالكامل. بدلاً من تعلّم التحويل H(x) مباشرة، تتعلم الطبقات الفرقَ فقط F(x) = H(x) − x، ثم تأتي وصلة التخطّي لتعيد جمع المدخل الأصلي x:

المخرج = F(x) + x

إن لم يكن للكتلة ما تضيفه يصبح F(x) = 0 وتمر البيانات دون تغيير. وإن احتاجت الكتلة إلى تعديل البيانات، فإنها تتعلم الفرق عن الهوية فحسب. في كلتا الحالتين التحسين أسهل بكثير.

y=F(x,{Wi})+xy = \mathcal{F}(x, \{W_i\}) + x
معادلة الكتلة المتبقّيةF(x, {Wᵢ}) هي دالة المتبقّي التي تتعلّمها الطبقات المتراكبة (مثلاً التفافتان 3×3 مع ReLU وتسوية الدُفعة). أما x فهي مسار الهوية المختصر، وتُجمع عنصراً بعنصر دون أي معاملات إضافية.
افتح في المختبر
انقر على كل جزء من الكتلة المتبقّية لفهم دوره. وصلة التخطّي هي الابتكار الجوهري.
تستيقظ التجربة عند وصولك…

كيف تُصلح وصلات التخطّي تدفّق التدرّجات

عند حساب دالة الفقد بالنسبة لطبقة مبكرة x_l نحصل على:

Lxl=LxL(1+xli=lL1Fi)\frac{\partial L}{\partial x_l} = \frac{\partial L}{\partial x_L}\left(1 +\frac{\partial}{\partial x_l}\sum_{i=l}^{L-1}\mathcal{F}_i\right)
مشتقّة الفقد بالنسبة لطبقة مبكرةمشتقّة دالة الفقد بالنسبة لمدخل الطبقة x باستخدام قاعدة السلسلة. لاحظ وجود الحد «1 +» الذي يضمن مساراً مباشراً للتدرّج.

ذلك الحد «1 +» هو مسار الهوية. حتى لو كانت تدرّجات الدوال المتبقّية ضئيلة، يظل التدرّج قادراً على الرجوع عبر وصلات التخطّي بلا أي نقصان. أما في الشبكات العادية فالتدرّجات مضطرّة للمرور عبر أوزان كل طبقة واحدة تلو الأخرى، وكل عملية ضرب قد تُقلّص الإشارة () أو تُضخّمها (). وصلة التخطّي تمنح التدرّجات طريقاً سريعاً يعود مباشرة إلى أي طبقة دون المرور بسلسلة الأوزان.

افتح في المختبر
قارن حجم التدرّج عبر شبكة عادية مقابل شبكة متبقّية مع ازدياد العمق.
تستيقظ التجربة عند وصولك…

تصميم عنق الزجاجة: الوصول إلى أعماق حقيقية

حين يتجاوز عدد الطبقات 50، تصبح الكتلة المتبقّية الأساسية (التفافتان 3×3) مكلفة حوسبياً. هنا تأتي : الفكرة أن التفاف 1×1 يضغط الأبعاد أولاً (مثلاً من 256 إلى 64 قناة)، ثم التفاف 3×3 يؤدي العمل المكاني الثقيل على هذا التمثيل المصغّر، وأخيراً التفاف 1×1 يوسّع الأبعاد مجدداً (من 64 إلى 256).

بهذا التصميم يعمل الالتفاف 3×3 على 64 قناة بدل 256، فتنخفض التكلفة الحوسبية نحو 4 أضعاف. هذا ما جعل شبكات ResNet بـ101 و152 طبقة ممكنة عملياً بعمليات حسابية أقل حتى من VGG-16.

افتح في المختبر
قارن الكتلة الأساسية بطبقتين مع كتلة عنق الزجاجة بثلاث طبقات — القوة التمثيلية ذاتها لكن بعمليات حسابية أقل بكثير.
تستيقظ التجربة عند وصولك…

العائلة: من ResNet-18 إلى ResNet-152

ResNet ليست نموذجاً واحداً بل عائلة بنيات تتشارك نفس مبدأ التصميم المتبقّي. النسخ الضحلة — ResNet-18 (11.7 مليون ) وResNet-34 (21.8 مليون) — تستخدم كتلاً متبقّية أساسية بطبقتين. أما النسخ الأعمق — ResNet-50 (25.6 مليون) وResNet-101 (44.5 مليون) وResNet-152 (60.2 مليون) — فتستخدم كتل عنق الزجاجة. الرسم التفاعلي أدناه يعرض معدلات خطأ أعلى 5 على ImageNet: من %10.92 في ResNet-18 نزولاً إلى %5.71 في ResNet-152.

جميع النسخ تتبع النمط ذاته: التفاف 7×7 أولي + ، ثم أربع مراحل من الكتل المتبقّية مع مضاعفة القنوات (64 ثم 128 ثم 256 ثم 512)، وأخيراً يليه .

افتح في المختبر
شاهد كيف ينخفض الخطأ مع ازدياد العمق — عكس ما يحدث في الشبكات العادية.
تستيقظ التجربة عند وصولك…

تسوية الدُفعة: الشريك الصامت

كل طبقة التفافية في ResNet تعقبها (BN)، وهي تقنية تُسوّي تنشيطات كل قناة إلى متوسط صفري وتباين واحدي ضمن كل دفعة صغيرة. تؤدي تسوية الدُفعة ثلاثة أدوار محورية:

  • تثبيت التدريب عبر منع الانزياح التوزيعي الداخلي، بحيث تستقبل كل طبقة مدخلات ذات إحصاءات مستقرة.
  • السماح بمعدلات تعلم أعلى لأن التنشيطات المسوّاة تبقى في النطاق الفعّال لـReLU، فلا تتشبّع ولا تصبح .
  • تنظيم خفيف لأن الإحصاءات المحسوبة على كل دفعة تُدخل قدراً من الضوضاء، ما يحدّ من فرط التخصيص.

بدون تسوية الدُفعة يصبح تدريب 152 طبقة غير عملي حتى مع وصلات التخطّي. نجاح ResNet يعتمد على تكامل عنصرين: التعلّم المتبقّي (لحل مشكلة التحسين) وتسوية الدُفعة (لتثبيت التنشيطات) — كلاهما ضروري.

كتلة متبقّية في نحو 20 سطراًpython

مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.

import numpy as np
def batch_norm(x, eps=1e-5):
    """تسوية كل قناة إلى متوسط صفري وتباين واحدي."""
    mean = x.mean(axis=(0, 2, 3), keepdims=True)
    var  = x.var(axis=(0, 2, 3), keepdims=True)
    return (x - mean) / np.sqrt(var + eps)

def conv3x3(x, W):
    """بديل مبسّط لالتفاف 3×3."""
    return x  # مبسّط

def residual_block(x, W1, W2):
    """جوهر ResNet: F(x) + x."""
    identity = x                       # احفظ المدخل

    out = conv3x3(x, W1)               # التفاف 3×3 أول
    out = batch_norm(out)               # تسوية
    out = np.maximum(0, out)            # ReLU

    out = conv3x3(out, W2)              # التفاف 3×3 ثانٍ
    out = batch_norm(out)               # تسوية

    out = out + identity                # وصلة التخطّي
    out = np.maximum(0, out)            # ReLU بعد الجمع
    return out

# هذا كل شيء. `out + identity` هو الابتكار بأكمله. # بدونه: 56 طبقة أسوأ من 20 طبقة. # معه: 152 طبقة تحطّم أرقاماً قياسية.

لماذا كانت هذه الورقة مفصلية

  1. 2015

    ResNet — وصلات التخطّي تتغلّب على مشكلة العمق

    درّب He وفريقه شبكات من 152 طبقة بخطأ وتكلفة حوسبية أقل من VGG-16/19 عبر إضافة مسارات هوية مختصرة. فازوا بجميع المسارات في ILSVRC وCOCO 2015.

  2. 2016

    تحويلات الهوية في الشبكات المتبقّية العميقة

    أظهر He وSun أن نقل تسوية الدُفعة وReLU إلى ما قبل الالتفاف (ما يُعرف بالتفعيل المسبق) يُحسّن تدفق التدرّجات أكثر، مما أتاح تدريب شبكات ResNet بـ1001 طبقة على CIFAR.

  3. 2016

    ResNeXt — مسارات متبقّية أوسع

    استبدل Xie وفريقه مسار عنق الزجاجة الواحد بالتفافات مجمّعة متوازية، وأظهروا أن العرض داخل الكتل المتبقّية لا يقل أهمية عن العمق.

  4. 2017

    DenseNet — كل طبقة تتصل بجميع الطبقات

    وسّع Huang وفريقه فكرة وصلات التخطّي بحيث تستقبل كل طبقة خرائط السمات من جميع الطبقات السابقة لها، مما يزيد إعادة استخدام السمات ويحسّن تدفق التدرّجات.

  5. 2017

    Mask R-CNN — بنية ResNet الأساسية لتجزئة المثيلات

    استخدم He وفريقه ResNet بنيةً أساسية لكشف الأجسام والتجزئة على مستوى البكسل، مرسين النموذج المعتمد في بنيات الكشف الحديثة.

  6. 2019

    EfficientNet — توسعة العمق والعرض والدقة معاً

    أثبت Tan وLe أن توسعة العمق (على طريقة ResNet) والعرض ودقة المدخلات بنسبة متوازنة يتفوق على توسعة أي بُعد بمعزل عن البقية.

  7. 2020

    محوِّل الرؤية — وصلات متبقّية في كل كتلة

    استبدل ViT الالتفافات بالانتباه الذاتي لمعالجة الصور، لكنه أبقى على الوصلات المتبقّية في كل كتلة مرمِّز — وصلة التخطّي تجاوزت البنية التي نشأت فيها.

وصلة التخطّي اليوم في كل مكان. كل كتلة محوِّل — في GPT وClaude وGemini وBERT — هي في جوهرها كتلة متبقّية. فكرة أن التدرّجات تحتاج دائماً إلى مسار حرّ للرجوع أصبحت بديهية من بديهيات تصميم البنيات العصبية.

المرجعHe, Zhang, Ren, Sun. Deep Residual Learning for Image Recognition. CVPR, 2016.

مصطلحات هذه الورقة