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

Grad-CAM: تحديد المناطق المؤثّرة في قرارات الشبكات العميقة باستخدام التدرُّجات

Grad-CAM: Visual Explanations from Deep Networks via Gradient-Based Localization

Selvaraju, R. R. · Cogswell, M. · Das, A. · Vedantam, R. · Parikh, D. · Batra, D. — ICCV

المشكلة

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

الإسهام

تقنية Grad-CAM تأخذ التدرُّجات العائدة إلى آخر طبقة التفافية وتستخدمها لبناء خريطة تبيّن أي مناطق الصورة أثّرت فعلاً في قرار تجاه فئة بعينها. الفكرة تعمِّم أسلوب CAM ليشمل أي بنية التفافية قابلة للاشتقاق — دون تعديل في البنية أو إعادة تدريب. ولمن يريد تفاصيل أدق، دمج Grad-CAM مع الانتشار الخلفي الموجَّه يعطي Guided Grad-CAM: خرائط عالية الدقة تميّز بين الفئات. التقنية تعمل مع التصنيف والتعليق على الصور والإجابة البصرية والتعلم المعزَّز.

الأثر

تحوّل Grad-CAM إلى الأداة شبه المعيارية لتفسير نماذج الرؤية الحاسوبية. المبدأ الذي أرساه بسيط وعميق في آن: أي مخرج قابل للاشتقاق يمكن استجوابه عن المناطق التي اعتمد عليها. انتقل أثره إلى التصوير الطبي والقيادة الذاتية وكل مجال يتطلب تفسير قرارات النماذج. وفتح الباب أمام أعمال لاحقة مثل Grad-CAM++ وScore-CAM، ودفع حقل الذكاء الاصطناعي القابل للتفسير إلى الأمام. بأكثر من 15,000 اقتباس، يُعدّ من أكثر الأوراق البحثية استشهاداً في أدبيات التفسيرية.

تخيّل طبيباً يفحص صورة أشعة سينية ويقول: «التهاب رئوي». تسأله: «أرني أين ترى ذلك بالضبط؟» فيرسم دائرة حول منطقة ضبابية في أسفل الرئة اليسرى.

هذه الدائرة هي بالضبط ما يفعله Grad-CAM مع . الشبكة تصنّف الصورة، ثم يأتي Grad-CAM ويسأل آخر : «أيّ عندك كانت الأهم لهذه الفئة؟» كل خريطة سمات تُوزَن بحسب تأثيرها على درجة الفئة المستهدفة، ثم يُحسب المتوسط الموزون ويُعرض فوق الصورة على شكل خريطة حرارية — المناطق الساخنة هي حيث يكمن الدليل، والمناطق الباردة هي ما تجاهلته الشبكة.

لا تعديل في البنية ولا إعادة تدريب — مجرد تمريرة خلفية واحدة لطرح السؤال الصحيح.

المشكلة: نماذج تتفوّق في الأداء لكنها عاجزة عن تفسير قراراتها

بحلول عام 2016، كانت قد تجاوزت أداء البشر على ImageNet، وباتت تولّد تعليقات على الصور وتجيب عن أسئلة بصرية. لكن لو سألت شبكة VGG أو ResNet لماذا صنّفت الصورة على أنها «مسترد ذهبي»، فلن تحصل على أي تفسير. وهذا الصمت لم يكن مجرد فضول أكاديمي، بل كان مشكلة عملية حقيقية:

  • الثقة. لا يمكن نشر نموذج في مجال طبي أو في القيادة الذاتية دون القدرة على التحقق من أنه ينظر إلى الآفة فعلاً وليس إلى المسطرة في زاوية الصورة.

  • تنقيح الأخطاء. قد يصنّف النموذج بشكل صحيح لكن لأسباب خاطئة — كأن يتعلم ربط «خلفية العشب» بفئة «الحصان» بدلاً من تعلّم ملامح الحصان نفسه. بدون أداة تصوُّر بصري، يبقى هذا مخفياً حتى مرحلة النشر.

  • التنظيم القانوني. قانون حماية البيانات الأوروبي (GDPR) أقرّ «حق التفسير» للقرارات الآلية، ما يعني أن الصناديق السوداء أصبحت عبئاً قانونياً.

طرق التفسير المتاحة آنذاك كانت تنقسم إلى معسكرين، وكل معسكر يعاني من نقطة ضعف جوهرية:

CAM () كان ينتج خرائط حرارية تميّز بين الفئات، لكنه مقيّد ببنيات تستخدم الشامل مباشرة قبل طبقة المخرجات. أي شبكة فيها — مثل VGG وAlexNet — كانت خارج نطاقه.

في المقابل، الموجَّه وفك الالتفاف كانا ينتجان تفاصيل على مستوى البكسل — ترى الحواف والنسيج بوضوح — لكنهما لا يميّزان بين الفئات: الخريطة الناتجة واحدة سواء سألت «أين القطة؟» أو «أين الكلب؟» في صورة تحتوي الاثنين.

المجال كان بحاجة إلى طريقة تحقق الشرطين معاً: تمييز بين الفئات وعمل مع أي بنية.

افتح في المختبر
CAM يشترط وجود تجميع متوسط شامل قبل المخرجات. أما Grad-CAM فيعمل مع أي شبكة التفافية — انقر للمقارنة.
تستيقظ التجربة عند وصولك…

الفكرة: دع التدرُّجات تدلّك على مكان الدليل

الفكرة الجوهرية أنيقة في بساطتها: درجة فئة معينة بالنسبة لـخريطة سمات يخبرك بمقدار أهمية تلك الخريطة لتلك الفئة. لو أن زيادة طفيفة في قيم خريطة سمات ما أدّت إلى قفزة كبيرة في درجة «قطة»، فهذا يعني أن تلك الخريطة تُشفِّر شيئاً له علاقة بالقطط.

تخيّل آخر طبقة التفافية كمجموعة من الكواشف — كاشف يلتقط «أذنين مدببتين»، وآخر يلتقط «شوارب»، وثالث يلتقط «نسيج فراء». Grad-CAM يسأل كل كاشف: «لو رفعتُ إشارتك، هل ترتفع درجة ‹قطة›؟» الكواشف التي تجيب «نعم، بقوة» تحصل على عالٍ. المجموع الموزون لخرائط هذه الكواشف يُمرَّر عبر — لإلغاء الدليل السلبي والإبقاء على الإيجابي فقط — فتخرج الخريطة الحرارية.

هذا في جوهره تعميم لأسلوب CAM. في CAM الأصلي، تُستخدم الأوزان الفعلية التي تربط طبقة بفئة المخرجات — وهذه الأوزان لا توجد إلا في بنيات بعينها. Grad-CAM يستبدل تلك الأوزان بالتدرُّجات، والتدرُّجات متاحة لأي مخرج قابل للاشتقاق. هذا الاستبدال الوحيد هو ما حوّل التقنية من حيلة خاصة ببنية واحدة إلى أداة عامة.

افتح في المختبر
تتبّع مراحل Grad-CAM واحدة تلو الأخرى: تمريرة أمامية ← اختيار الفئة ← تمريرة خلفية ← توزين خرائط السمات ← دمج ← ReLU ← خريطة حرارية.
تستيقظ التجربة عند وصولك…

الصياغة الرياضية: ثلاث معادلات تكفي لتفسير الشبكة

يبني Grad-CAM خريطته في ثلاث خطوات مباشرة. أولاً يحسب وزن أهمية كل خريطة سمات بالنسبة للفئة المستهدفة. ثم يحسب المجموع الموزون لجميع الخرائط. وأخيراً يُمرّر الناتج عبر ReLU لحذف أي منطقة تؤثر سلباً على درجة الفئة، فلا يبقى إلا الدليل الإيجابي.

αkc=1ZijycAijk\alpha_k^c = \frac{1}{Z} \sum_i \sum_j \frac{\partial y^c}{\partial A^k_{ij}}
الخطوة 1: وزن الأهمية — ما مقدار أهمية خريطة السمات k للفئة c؟نأخذ تدرُّج درجة الفئة yᶜ بالنسبة لتنشيطات خريطة السمات k ‏(أي Aᵏ)، ثم نحسب متوسطه على جميع المواقع المكانية. القيمة الناتجة α تعبّر عن مدى مساهمة هذه الخريطة في قرار الفئة c. بتعبير أبسط: نحن نسأل «لو غيّرنا قيم هذه الخريطة قليلاً، كم ستتأثر درجة الفئة؟»
LGrad-CAMc=ReLU ⁣(kαkcAk)L^c_{\text{Grad-CAM}} = \text{ReLU}\!\left(\sum_k \alpha_k^c \, A^k\right)
الخطوة 2: المزيج الموزون + ReLU — الخريطة الحراريةكل خريطة سمات تُضرب في وزن أهميتها α، ثم تُجمع كل الخرائط الموزونة معاً. الناتج يُمرّر عبر ReLU لحذف القيم السالبة — لأن المناطق السالبة تدعم فئات أخرى ولا نريدها في خريطة الفئة المستهدفة. ما يخرج هو خريطة حرارية خشنة بحجم خرائط السمات (مثلاً 14×14)، تُكبَّر لاحقاً لتُطابق حجم الصورة الأصلية.
افتح في المختبر
مرّر المؤشر فوق كل جزء من المعادلة لترى وظيفته. غيّر الفئة لترى كيف تتغيّر الأوزان.
تستيقظ التجربة عند وصولك…

الجمع بين المزيّتين: Guided Grad-CAM

Grad-CAM يعطيك خريطة حرارية خشنة — تعرف أين نظرت الشبكة، لكن الدقة منخفضة (عادة 14×14 في VGG). في المقابل، الانتشار الخلفي الموجَّه يعطيك تفاصيل حادة على مستوى البكسل — كل حافة وكل نسيج واضحان — لكنه لا يميّز بين الفئات.

الحل بسيط وذكي: اضرب أحدهما بالآخر. خذ خريطة الانتشار الخلفي الموجَّه (التفاصيل الحادة) واضربها نقطة بنقطة في خريطة Grad-CAM بعد تكبيرها (المنطقة التي تميّز الفئة). الناتج — Guided Grad-CAM — يحمل الدقة العالية والتمييز بين الفئات معاً.

تخيّلها كعدسة مكبِّرة: Grad-CAM يحدد لك أي جزء من الصورة تكبّره (الـ«أين»)، والانتشار الخلفي الموجَّه يكشف التفاصيل الدقيقة داخل ذلك الجزء (الـ«ماذا»). حاصل الضرب يجمع لك الاثنين: ماذا رأت الشبكة وأين رأته بالضبط.

افتح في المختبر
شاهد كيف أن الانتشار الخلفي الموجَّه (التفاصيل) × Grad-CAM (المنطقة) = Guided Grad-CAM (الاثنان معاً).
تستيقظ التجربة عند وصولك…

لماذا آخر طبقة التفافية؟

الشبكات الالتفافية تبني بشكل هرمي متدرّج. الطبقات المبكرة تلتقط أنماطاً بسيطة كالحواف والزوايا — أشياء محلية بـ صغيرة. الطبقات الوسطى تركّب هذه الأنماط لتُشكّل نسيجاً وأجزاء. أما آخر طبقة التفافية فتلتقط سمات مكانية عالية المستوى مثل «وجه كلب» أو «عجلة» أو «شكل جناح» — وهي بذلك أفضل نقطة توازن بين الفهم الدلالي العميق والاحتفاظ بالمعلومات المكانية.

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

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

ما بعد التصنيف: من التعليق على الصور إلى كشف الانحياز وبناء الثقة

بما أن Grad-CAM لا يحتاج سوى درجة قابلة للاشتقاق وطبقة التفافية، فهو يمتد بسلاسة إلى مهام متنوعة:

  • التعليق على الصور: يمكن نشر التدرُّج عكسياً من كل كلمة مولَّدة لمعرفة أي منطقة في الصورة أطلقتها. نموذج يولّد عبارة «كلب على أريكة» سيُبرز منطقة الكلب عند كلمة «كلب» ومنطقة الأريكة عند كلمة «أريكة».

  • الإجابة البصرية عن الأسئلة (VQA): لو أعطيت الشبكة صورة وسألتها «ما لون صنبور الحريق؟»، يُظهر Grad-CAM أن النموذج وجّه انتباهه إلى الصنبور تحديداً — حتى بدون طبقات صريحة في البنية.

  • كشف الانحياز في البيانات: كشف Grad-CAM أن مصنّف «ممرضة» كان يركّز على الوجوه والشعر — أي أنه تعلّم صوراً نمطية جنسانية من بيانات منحازة — بدلاً من الانتباه إلى المعدات الطبية. بهذا أصبح الانحياز الخفي مرئياً وقابلاً للمعالجة.

  • بناء الثقة: في تجارب محكَمة، ساعد Grad-CAM مستخدمين عاديين على تمييز النموذج الأدق بنسبة 61.2% حين كان النموذجان يعطيان ذاته — التفسير البصري كشف أيّ النموذجين ينظر إلى الدليل الصحيح فعلاً.

افتح في المختبر
بدّل بين التصنيف والتعليق والإجابة البصرية لترى كيف يتكيّف Grad-CAM مع المهام المختلفة.
تستيقظ التجربة عند وصولك…

الفكرة نفسها مترجَمة إلى شيفرة

Grad-CAM في نحو 20 سطراً من PyTorchpython

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

import torch
import torch.nn.functional as F

def grad_cam(model, image, target_class, target_layer):
    """حساب خريطة Grad-CAM الحرارية لفئة مستهدفة عند طبقة التفافية."""
    # 1. تسجيل خطافات لالتقاط التنشيطات والتدرُّجات
    activations, gradients = {}, {}
    def fwd_hook(m, inp, out): activations['value'] = out
    def bwd_hook(m, inp, grad_out): gradients['value'] = grad_out[0]
    h1 = target_layer.register_forward_hook(fwd_hook)
    h2 = target_layer.register_full_backward_hook(bwd_hook)

    # 2. تمريرة أمامية — الحصول على درجة الفئة
    output = model(image)                    # (1, عدد_الفئات)
    score = output[0, target_class]          # قيمة مفردة

    # 3. تمريرة خلفية — التدرُّجات تتدفق إلى الطبقة المستهدفة
    model.zero_grad()
    score.backward()

    # 4. تجميع متوسط شامل للتدرُّجات → أوزان الأهمية α
    alpha = gradients['value'].mean(dim=(2, 3), keepdim=True)  # (1, K, 1, 1)

    # 5. المزيج الموزون + ReLU
    cam = F.relu((alpha * activations['value']).sum(dim=1, keepdim=True))

    # 6. تكبير إلى حجم الصورة الأصلية وتسوية القيم
    cam = F.interpolate(cam, size=image.shape[2:], mode='bilinear')
    cam = (cam - cam.min()) / (cam.max() - cam.min() + 1e-8)

    h1.remove(); h2.remove()
    return cam.squeeze()          # (H, W) خريطة حرارية في [0, 1]

حدود الأسلوب وما تبعه من تطويرات

رغم قوة Grad-CAM، هناك عدة نقاط ضعف ينبغي الانتباه لها:

  • دقة خشنة. الخريطة الحرارية تأتي بدقة آخر طبقة التفافية (مثلاً 14×14 في VGG-16)، فالحدود الدقيقة للأجسام تضيع. Guided Grad-CAM يعالج هذا جزئياً بدمج التفاصيل البكسلية.

  • تشبُّع التدرُّج. حين تقترب درجة الفئة من 1.0، تقترب التدرُّجات من الصفر فتصبح الخريطة مشوّشة. Grad-CAM++ عالج هذه المشكلة باستخدام تدرُّجات من الدرجة الثانية.

  • طبقة واحدة فقط. Grad-CAM يعتمد على طبقة واحدة، ما يعني فقدان المعلومات من الطبقات الأبكر. Score-CAM جاء لاحقاً بأسلوب لا يعتمد على التدرُّجات أصلاً، بل على مقدار ارتفاع ثقة النموذج حين يُقنَّع المدخل بكل على حدة.

  • ليس تفسيراً كاملاً. Grad-CAM يجيب عن سؤال أين نظر النموذج لكنه لا يجيب عن كيف وصل إلى قراره — هو خريطة تحدد المناطق المؤثرة، وليس تفسيراً سببياً لسلسلة .

لماذا كان هذا العمل مؤثراً

  1. 2013

    Zeiler و Fergus — تصوُّرات فك الالتفاف

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

  2. 2014

    Simonyan وآخرون — خرائط البروز عبر الانتشار الخلفي

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

  3. 2015

    Springenberg وآخرون — الانتشار الخلفي الموجَّه

    دمج فك الالتفاف مع الانتشار الخلفي للحصول على خرائط بكسلية أنظف وأوضح. لكن المشكلة بقيت: لا تمييز بين الفئات.

  4. 2016

    Zhou وآخرون — تخطيط تنشيط الفئة (CAM)

    أول خرائط حرارية قادرة على التمييز بين الفئات، تعتمد على أوزان التجميع المتوسط الشامل. أداء قوي، لكنها لا تعمل إلا مع بنيات محددة.

  5. 2017

    Grad-CAM — الحل الشامل

    الفكرة المحورية: استبدال أوزان CAM الخاصة بالبنية بالتدرُّجات المتاحة في أي شبكة، ما فتح باب التفسير البصري لأي بنية التفافية وأي مهمة قابلة للاشتقاق.

  6. 2018

    Grad-CAM++ — تدرُّجات من رتبة أعلى

    الاعتماد على تدرُّجات من الدرجة الثانية كأوزان بكسلية لتحسين دقة تحديد مواقع الأجسام المتعددة ومعالجة مشكلة تشبُّع التدرُّج.

  7. 2020

    Score-CAM — تفسيرات بلا تدرُّجات

    بدلاً من التدرُّجات، تُقاس أهمية كل خريطة سمات بمقدار ارتفاع ثقة النموذج حين يُقنَّع المدخل بتلك الخريطة — ما أزال الاعتماد على التدرُّجات تماماً.

ما فعله Grad-CAM هو تحويل حيلة معمارية مرتبطة ببنية واحدة (CAM) إلى مبدأ تفسيري شامل. الباحث الذي ينقّح شبكة التفافية، والطبيب الذي يتحقق من نموذج تشخيص، والمهندس الذي يفحص الانحياز — كلهم أصبح لديهم أداة بخطوات معدودة: انشر التدرُّج عكسياً من الفئة، احسب المتوسط، وانظر أين نظر النموذج.

المرجعSelvaraju, Cogswell, Das, Vedantam, Parikh, Batra. Grad-CAM: Visual Explanations from Deep Networks via Gradient-Based Localization. ICCV, 2017.

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