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

التعمّق في الالتفافات

Going Deeper with Convolutions

Szegedy, C. · Liu, W. · Jia, Y. · Sermanet, P. · Reed, S. · Anguelov, D. · Erhan, D. · Vanhoucke, V. · Rabinovich, A. — CVPR

المشكلة

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

الإسهام

الفكرة الأساسية هي : بدلاً من اختيار حجم مرشّح واحد في كل طبقة، تعمل عدة التفافات بأحجام مختلفة (1×1 و3×3 و5×5) إلى جانب تجميع أقصى، كلها بالتوازي، ثم تُدمج مخرجاتها على محور القنوات. وقبل الالتفافات المكلفة، تُضاف التفافات 1×1 تعمل كعنق زجاجة لتقليص الأبعاد وخفض الحوسبة بشكل كبير. بَنَت GoogLeNet تسع وحدات من هذا النوع في شبكة بعمق 22 طبقة لا تتجاوز معاملاتها 5 ملايين — أقل بـ12 مرة من AlexNet — وحققت خطأ 6.67% على ILSVRC 2014، أي تحسّن نسبي بمقدار 56.5% مقارنة بفائز 2012. كما أُضيفت مصنِّفات مساعدة في منتصف الشبكة لتسهيل تدفّق التدرُّجات أثناء .

الأثر

أثبتت GoogLeNet أن التصميم الذكي يتفوّق على مجرد تكبير الشبكة. الفكرة المحورية — معالجة متوازية على مقاييس متعددة مع ضغط الأبعاد — تحوّلت إلى قالب تصميمي تكرّر في Inception v2/v3/v4 وXception، وأثّرت مباشرة في تصميم كتل في ResNet. كما أن تركيز الورقة على الكفاءة الحوسبية فتح الباب لاحقاً أمام شبكات مصمَّمة خصيصاً للأجهزة المحمولة مثل MobileNet وEfficientNet. وامتد تأثيرها إلى مجالات متعددة: فهم الفيديو (I3D)، وتوليد وصف الصور (Show and Tell)، وآليات انتباه القنوات (SENet).

تخيّل أنك محقّق يفحص صورة لمسرح جريمة. لن تكتفي بعدسة مكبّرة واحدة — ستحتاج طقم عدسات: واحدة دقيقة لبصمات الأصابع، ومتوسطة لآثار الأقدام، وواسعة لرؤية تخطيط الغرفة كاملاً.

هذا بالضبط ما كان ينقص الشبكات التقليدية مثل AlexNet: كانت تستخدم حجم واحداً في كل على أمل أنه مناسب. وحدة Inception غيّرت هذا المنطق تماماً — تُعطي الشبكة طقم أدوات كاملاً في كل طبقة وتقول لها: «استخدميها كلها، ثم أخبريني بما وجدتِ.»

وأين الحيلة؟ قبل استخدام العدسات الكبيرة المكلفة، تمرّ البيانات بخطوة ضغط سريعة عبر 1×1 — كأنك تكتب ملخصاً من صفحة واحدة قبل أن تقرأ الملف الكامل. هذا ما يُبقي المحقّق سريعاً حتى وهو يتعامل مع قضية من 22 طبقة.

المشكلة: شبكات أكبر وعوائد متناقصة

بعد أن فازت AlexNet بمسابقة ImageNet عام 2012، بدا المنطق واضحاً: أضف مزيداً من الطبقات ومزيداً من المرشّحات تحصل على نتائج أفضل. لكن هذا النهج القائم على التكبير بالقوة اصطدم بثلاث عقبات أساسية:

  • انفجار حوسبي تربيعي. حين تُضاعف عدد المرشّحات في طبقتين التفافيتين متتاليتين، لا تتضاعف التكلفة مرتين بل أربع مرات. التفاف 5×5 على 256 يكلّف 25 ضعف على نفس القنوات.

  • فرط التخصيص. كلما زادت ، زادت الحاجة إلى بيانات أكثر. مجموعة ImageNet كانت تضم 1.2 مليون صورة معنونة — رقم كبير بمقاييس 2014، لكنه لا يكفي لشبكة بمعاملات غير محدودة.

  • التكلفة العملية. يحتاج مليارات عمليات الضرب والجمع عند لا يمكن تشغيله على هاتف محمول ولا توسيعه اقتصادياً على خوادم الإنتاج. لذلك وضع المؤلفون ميزانية حوسبية صريحة: 1.5 مليار عملية ضرب وجمع كحدٍّ أقصى.

افتح في المختبر
بدِّل بين وحدة Inception الأصلية والنسخة المُحسَّنة، ولاحظ كيف ينخفض عدد العمليات بشكل كبير بمجرد إضافة التفافات عنق الزجاجة 1×1.
تستيقظ التجربة عند وصولك…

الفكرة المحورية: المعالجة المتوازية متعددة المقاييس

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

من الناحية النظرية، استند المؤلفون إلى عمل أرورا وآخرين (2013) الذي أظهر أنه إذا كان البيانات قابلاً للتمثيل بشبكة عميقة ذات بنية متناثرة، فيمكن بناء البنية المثلى طبقةً بطبقة من خلال تجميع المترابطة في عناقيد. عملياً، هذه العناقيد تتوافق مع مقاييس مكانية مختلفة — بعض التنشيطات يترابط على مستوى الواحد (1×1)، وبعضها على رقعة صغيرة (3×3)، وبعضها على منطقة أوسع (5×5). ما تفعله وحدة Inception هو تقريب هذه المثالية باستخدام مكوّنات كثيفة يمكن تنفيذها بكفاءة على .

تخيّل الأمر كـطاولة عمل يجلس حولها ثلاثة محللين يعملون بالتوازي: الأول يقرأ كلمات مفردة (1×1)، والثاني يقرأ جُملاً كاملة (3×3)، والثالث يتصفّح فقرات بأكملها (5×5). كلٌّ منهم يكتب ما وجده في تقرير، ثم تُجمع التقارير الثلاثة وتُسلَّم للفريق التالي.

افتح في المختبر
انقر على كل فرع لتعرف أي نوع من السمات يلتقطه، وكيف تُجمع المخرجات في النهاية.
تستيقظ التجربة عند وصولك…

التفاف 1×1: عنق الزجاجة الذي جعل العمق ممكناً

لو شغّلنا وحدة Inception بشكلها الأولي — التفافات 1×1 و3×3 و5×5 مع كلها بالتوازي — لانفجرت التكلفة الحوسبية. التفاف 5×5 على 256 قناة مدخلة بـ64 مرشحاً يكلّف نحو 25 ضعف التفاف 1×1 على نفس المدخلات. وفوق ذلك، التجميع الأقصى يُمرّر جميع قنوات المدخل كما هي، فيتراكم عدد القنوات مع كل مرحلة.

الحل الذي اقترحه المؤلفون: التفافات 1×1 لضغط الأبعاد قبل العمليات المكلفة. التفاف 1×1 بـ32 مرشحاً يأخذ 256 قناة ويختصرها إلى 32 فقط — أي تقليص بمعامل 8 — وبعدها يعمل التفاف 5×5 على هذه القنوات الـ32 المضغوطة بدلاً من الـ256 الأصلية. النتيجة: فرع الـ5×5 ينخفض من نحو 120 مليون عملية إلى نحو 12 مليوناً فقط.

لكن التفافات 1×1 ليست مجرد أداة ضغط. كل واحدة منها تتضمّن تنشيط ، ما يعني أنها تُضيف تحويلاً لاخطياً أيضاً. يمكن اعتبارها طبقات «تلخيص» صغيرة قابلة للتعلّم — وهي تطبيق عملي لفكرة الشبكة داخل الشبكة (Network-in-Network) من عمل لين وآخرين (2013).

تخيّل بوابة رسوم على طريق سريع: قبل أن تدخل السيارات الطريق السريع متعدد المسارات المكلف (التفاف 3×3 أو 5×5)، تمرّ بنقطة تفتيش ضيّقة (التفاف 1×1) تُرشّح حركة المرور وتُقلّصها. سيارات أقل تدخل الطريق فلا يحدث ازدحام — لكن المهم منها يصل كله.

Costnaive=H×W×Cin×Cout×k2\text{Cost}_{\text{naive}} = H \times W \times C_{\text{in}} \times C_{\text{out}} \times k^2
تكلفة الحوسبة لالتفاف k×k بدون تقليصH×W = الأبعاد المكانية · C_in = عدد قنوات المدخل · C_out = عدد مرشّحات المخرج · k² = مساحة النواة. حين نُدخل طبقة تقليص 1×1 قبل الالتفاف k×k، نستبدل C_in بعدد أصغر بكثير، فينخفض حاصل الضرب بشكل حاد.
افتح في المختبر
حرّك شريط نسبة التقليص وراقب كيف تنخفض عمليات فرع الـ5×5 مع تغيّر عدد القنوات بعد التفاف 1×1.
تستيقظ التجربة عند وصولك…

GoogLeNet: 22 طبقة، 5 ملايين معامل، بنية واحدة متكاملة

GoogLeNet هي الشبكة التي قدّمها المؤلفون فعلياً في مسابقة ILSVRC 2014. تتكون من 22 طبقة (27 إذا حسبنا طبقات )، ولا تتجاوز معاملاتها 5 ملايين — أقل بـ12 مرة من 60 مليوناً في AlexNet. البنية تتبع تصميماً واضحاً من ثلاث مراحل:

  • الساق (الطبقات 1–5): التفافات تقليدية مع تجميع أقصى تُقلّص المدخل من 224×224 إلى 28×28. في هذه المرحلة المبكرة لا حاجة لوحدات Inception — مرشّحات 7×7 و3×3 عادية تكفي لالتقاط الحواف والأنسجة البسيطة.

  • رصّة Inception (الطبقات 6–22): تسع وحدات Inception (3a و3b و4a إلى 4e و5a و5b)، يفصل بينها تجميع أقصى لتنصيف الدقة المكانية. ملاحظة مهمة: كلما تعمّقنا في الشبكة، زادت نسبة مرشّحات 3×3 و5×5 لأن في الطبقات العميقة تكون أكثر انتشاراً مكانياً.

  • رأس : بدلاً من التي اعتمدتها AlexNet وVGG، تستخدم GoogLeNet . الفكرة بسيطة: بدلاً من تسطيح بأبعاد 7×7×1024 إلى من 50,000 عنصر وربطه بطبقة كثيفة تُضيف ملايين المعاملات، نحسب متوسط كل قناة مكانياً فنحصل على متجه مضغوط من 1024 بُعداً فقط. بعدها تأتي طبقة بنسبة 40% وطبقة خطية واحدة للتنبؤ بـ1000 فئة.

أما التسمية «GoogLeNet» فهي تحية مقصودة لشبكة LeNet-5 ليان لوكون، اعترافاً بأن القالب الذي ابتكره عام 1998 — التفاف ثم تجميع ثم تصنيف — لا يزال العمود الفقري، لكنه يُنفَّذ هنا على نطاق مختلف تماماً.

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

المصنِّفات المساعدة: مكافحة تلاشي التدرُّجات من الوسط

في شبكة بعمق 22 طبقة، تواجهنا مشكلة معروفة: قد تتلاشى قبل أن تصل إلى الطبقات المبكرة أثناء — وهي نفس المشكلة التي ناقشناها في فصل الشبكات الالتفافية. الحل الذي ابتكره المؤلفون: مصنِّفات مساعدة تتفرّع من وحدتي Inception الوسيطتين (4a و4d).

كل هو عملياً شبكة مصغّرة مستقلة: تجميع بالمتوسط ← التفاف 1×1 بـ128 مرشحاً ← طبقة كاملة الاتصال بـ1024 وحدة ← تسريب بنسبة 70% ← على 1000 فئة. أثناء التدريب، تُضاف كل مصنِّف مساعد إلى الخسارة الإجمالية بوزن 0.3. وعند الاستدلال، تُحذف تماماً ولا تدخل في الحساب.

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

فكّر فيها كـاختبارات نصفية خلال مقرر دراسي: الطلاب (الطبقات) لا يمكنهم تأجيل كل شيء للامتحان النهائي — عليهم أن يُثبتوا أنهم يمتلكون فهماً مفيداً في كل مرحلة.

التجميع بالمتوسط الشامل: استبدال ملايين المعاملات بمتوسط حسابي

في شبكتي AlexNet وVGG، تنتهي البنية بـطبقات كاملة الاتصال: تُسطَّح خريطة السمات الأخيرة إلى متجه طويل ثم تُضرب بـ أوزان ضخمة. في VGG-16 مثلاً، هاتان الطبقتان وحدهما تحتويان على 123 مليون معامل من أصل 138 مليوناً — أي أن 89% من أوزان الشبكة بأكملها مكدّسة في طبقتين فقط!

GoogLeNet تخلّصت من هذا كله واستبدلته بـالتجميع بالمتوسط الشامل: نأخذ خريطة السمات الأخيرة بأبعاد 7×7×1024 ونحسب متوسط كل قناة من القنوات الـ1024 عبر شبكتها المكانية 7×7، فنحصل على متجه واحد من 1024 بُعداً. لا أوزان ولا معاملات إضافية — عملية حسابية بحتة.

الفكرة بديهية: إذا كانت القناة cc تستجيب بقوة لسمة معينة مثل «آذان القطط»، فإن متوسط تنشيطها عبر الصورة كلها يُعطينا مقداراً إجمالياً لوجود هذه السمة — بصرف النظر عن مكان ظهور الآذان في الصورة. هذا يمنح الشبكة ثبات الإزاحة على مستوى التصنيف.

النتيجة: تغيير واحد حذف أكثر من 100 مليون معامل، وحسّن الدقة بنحو 0.6% في الوقت ذاته. فرط تخصيص أقل، واستدلال أسرع، ونموذج أصغر حجماً.

افتح في المختبر
شاهد كيف يختصر التجميع بالمتوسط الشامل كل قناة في خريطة السمات إلى رقم واحد، مستغنياً عن ملايين المعاملات في الطبقات كاملة الاتصال.
تستيقظ التجربة عند وصولك…

وحدة Inception في شيفرة برمجية

وحدة Inception مع تقليص الأبعادpython

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

import numpy as np

def relu(x):
    return np.maximum(0, x)

def conv2d(x, W, stride=1, pad=0):
    """التفاف ثنائي الأبعاد مبسَّط للتوضيح."""
    # x: (H, W, C_in), W: (k, k, C_in, C_out) → (H', W', C_out)
    # عملياً: أُطر العمل تنفّذ هذا بنوى GPU محسَّنة
    pass  # عنصر نائب — ركّز على المعمارية وليس الرياضيات

def inception_module(x, ch_1x1, ch_3x3_reduce, ch_3x3,
                     ch_5x5_reduce, ch_5x5, ch_pool_proj):
    """وحدة Inception واحدة مع تقليص الأبعاد.

    أربعة فروع متوازية تُدمج على محور القنوات:
      1) التفاف 1×1                       → يلتقط أنماط مستوى البكسل
      2) تقليص 1×1 ← التفاف 3×3           → يلتقط أنماطاً محلية
      3) تقليص 1×1 ← التفاف 5×5           → يلتقط أنماطاً أوسع
      4) تجميع أقصى 3×3 ← إسقاط 1×1       → يحفظ السمات المُجمَّعة
    """
    # الفرع 1: التفاف 1×1
    b1 = relu(conv2d(x, W_1x1))          # الشكل: (H, W, ch_1x1)

    # الفرع 2: تقليص 1×1 ثم التفاف 3×3
    b2 = relu(conv2d(x, W_3x3_reduce))   # (H, W, ch_3x3_reduce)
    b2 = relu(conv2d(b2, W_3x3))         # (H, W, ch_3x3)

    # الفرع 3: تقليص 1×1 ثم التفاف 5×5
    b3 = relu(conv2d(x, W_5x5_reduce))   # (H, W, ch_5x5_reduce)
    b3 = relu(conv2d(b3, W_5x5))         # (H, W, ch_5x5)

    # الفرع 4: تجميع أقصى 3×3 ثم إسقاط 1×1
    b4 = max_pool_3x3(x)                  # (H, W, C_in) — نفس القنوات
    b4 = relu(conv2d(b4, W_pool_proj))    # (H, W, ch_pool_proj)

    # دمج كل الفروع على محور القنوات
    return np.concatenate([b1, b2, b3, b4], axis=-1)
    # قنوات المخرج = ch_1x1 + ch_3x3 + ch_5x5 + ch_pool_proj

# مثال: وحدة Inception 3a من GoogLeNet
# المدخل: 28×28×192
# output = inception_module(x,
#     ch_1x1=64,
#     ch_3x3_reduce=96,  ch_3x3=128,
#     ch_5x5_reduce=16,  ch_5x5=32,
#     ch_pool_proj=32)
# المخرج: 28×28×256  (64+128+32+32 = 256 قناة)

النتائج: المركز الأول بمعاملات أقل 12 مرة

حققت GoogLeNet خطأ 6.67% في أفضل خمسة تنبؤات على مسابقة ILSVRC 2014 وفازت بالمركز الأول. للمقارنة: AlexNet، فائزة 2012، سجّلت 16.4% — أي أن GoogLeNet حققت تحسّناً نسبياً قدره 56.5%. أما الوصيفة VGG فسجّلت 7.32% لكنها احتاجت 138 مليون معامل، بينما اكتفت GoogLeNet بنحو 5 ملايين فقط.

النتيجة النهائية 6.67% جاءت من تجميع 7 نماذج GoogLeNet مع 144 اقتصاصاً لكل صورة. لكن اللافت أن نموذجاً واحداً مع اقتصاص واحد وصل إلى 10.07% — وهو رقم ينافس مجموعات نماذج متعددة من العام السابق. كل تقنية إضافية (اقتصاصات أكثر، نماذج أكثر) أضافت تحسيناً حقيقياً وإن كان متناقصاً.

وفي مهمة ، فازت GoogLeNet أيضاً بالمركز الأول بنتيجة 43.9% mAP، مما يُثبت أن بنية Inception تتعمّم لمهام تتجاوز التصنيف. والأبرز أنها حققت ذلك دون استخدام تراجع — وهي تقنية اعتمد عليها المنافسون — مكتفيةً بقوة السمات المُتعلَّمة وحدها.

افتح في المختبر
قارن بين عدد المعاملات ومعدّل الخطأ في GoogLeNet وAlexNet وVGG. لاحظ أن زيادة المعاملات لا تعني بالضرورة دقة أعلى.
تستيقظ التجربة عند وصولك…

لماذا تهمّنا هذه الورقة

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

  • التفافات 1×1 كأعناق زجاجة: تبنّتها ResNet كنواة كتل عنق الزجاجة فيها، واعتمدتها عملياً كل بنية كفؤة جاءت بعدها.

  • المعالجة المتوازية متعددة المقاييس: فكرة أن أحجام مرشّحات مختلفة يمكن أن تتعايش داخل طبقة واحدة أثّرت في شبكات هرم السمات، وآليات متعدد المقاييس، وحتى استراتيجيات التدريب بدقّات مكانية متعددة.

  • التجميع بالمتوسط الشامل: اليوم، تكاد كل حديثة وكل نموذج يستخدم هذا الأسلوب بدلاً من الطبقات كاملة الاتصال في مرحلة التصنيف، مما يوفّر المعاملات ويحسّن .

  1. 2014

    GoogLeNet / Inception v1

    فازت بمسابقة ILSVRC 2014 بنسبة خطأ 6.67% ضمن أفضل خمسة تنبؤات، باستخدام 22 طبقة و5 ملايين معامل فقط. قدّمت وحدة Inception القائمة على التفافات متوازية بأحجام مختلفة.

  2. 2015

    Inception v2 / تسوية الدُفعات

    أضاف آيوفي وزيجيدي تسوية الدُفعات، مما أتاح استخدام معدّلات تعلّم أعلى وقلّل الاعتماد على التسريب. كما فُكّكت التفافات 5×5 إلى طبقتين متتاليتين من 3×3.

  3. 2015

    Show and Tell — Inception يلتقي بوصف الصور

    استخدمت Inception كمرمِّز بصري يُغذّي فاكّ ترميز LSTM لتوليد عبارات تصف الصور تلقائياً. فازت بتحدّي COCO لوصف الصور.

  4. 2015

    ResNet — الاتصالات التجاوزية تحل محل المصنِّفات المساعدة

    حلّ He وزملاؤه مشكلة تدفق التدرُّجات معمارياً عبر الوصلات التجاوزية، فوصلوا إلى 152 طبقة. اقتبسوا فكرة التفافات عنق الزجاجة 1×1 مباشرةً من Inception.

  5. 2016

    Inception v3

    واصلت تفكيك الالتفافات (n×n إلى 1×n ثم n×1)، وأضافت تنعيم التسميات، وقدّمت بنية المساعد المدعومة بتسوية الدُفعات. وصلت إلى نسبة خطأ 3.58% ضمن أفضل خمسة تنبؤات.

  6. 2017

    Inception v4 / Inception-ResNet

    جمعت بين وحدات Inception والاتصالات التجاوزية في بنية واحدة. أثبتت أن المبدأين متكاملان وليسا متنافسين.

  7. 2017

    I3D — Inception يتمدد إلى الفيديو

    وسّع كاريرا وزيسرمان مرشّحات Inception ثنائية الأبعاد إلى ثلاثية الأبعاد بمدّها عبر البعد الزمني لتصنيف الفيديو. أظهرا أن البنى الناجحة في الصور يمكن نقلها إلى الفيديو.

  8. 2018

    SENet — انتباه القنوات يرث من Inception

    شبكات الضغط والإثارة تتعلّم إعادة ترجيح القنوات تلقائياً حسب أهميتها — وهي امتداد طبيعي للفكرة التي طرحتها Inception ضمنياً: ليست كل القنوات بنفس الأهمية.

المرجعSzegedy, Liu, Jia, Sermanet, Reed, Anguelov, Erhan, Vanhoucke, Rabinovich. Going Deeper with Convolutions. CVPR, 2015.

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