احسُب حجم التفافٍ، وأطلِق كاشف حواف، ثم قوِّم وجمِّع في المِنصّة، وتوقَّع — قبل أن تقرأ من لوحات خريطة السمات — حجمَي خريطة conv والخريطة المُجمَّعة، واستجابة Sobel-x عند حافةٍ رأسية مقابل منطقةٍ مسطّحة، وكم خلية يُصفِّرها ReLU، وماذا يُرجِع max-pool من كتلة.
تُمرِّر الطبقة الالتفافية kernel صغيرةً ثابتة على الصورة، وعند كل موضع تجمع حواصل الضرب عنصرًا بعنصر مع البكسلات تحتها — أي ارتباطًا متبادلًا ثنائي الأبعاد. ينتج عن ذلك خريطة سمات أصغر حجمها H_out = floor((H - k + 2p)/s) + 1. ثم يُصفِّر ReLU كل استجابة سالبة، ويُقلِّص max-pool الخريطة بإبقاء أكبر قيمة في كل كتلة صغيرة. النوى هنا عوامل قياسية ثابتة، غير مُتعلَّمة — بل تُرجِع نواة الهوية الصورة دون تغيير — فكلّ رقمٍ دقيق.
افتح المِنصّة. اترك المُدخَل على نمط vertical edge بحجم 16×16 والضوضاء مُطفأة، والنواة على Sobel-x، والحشو valid والخطوة 1. شغِّل التجميع. تستبدل الخطوتان الأخيرتان خرائط صغيرة مبنيّة يدويًا تتحقّق منها في لوحتَي ReLU وmax-pool.
Pattern -> vertical edge Size -> 16 Noise -> 0 Kernel -> Sobel-x
Padding -> valid Stride -> 1 Pooling -> on
تُظهر لوحة الأنبوب المُدخَل، ثم conv (H_out = floor((H - k + 2p)/s) + 1)، ثم ReLU، ثم max-pool — كلٌّ مصفوفةُ أرقامٍ حقيقية، وعرضها وارتفاعها مطبوعان فوقها.
التفافٌ valid بحجم 3×3 (بلا حشو، خطوة 1) على صورة 16×16 يفقد بكسلًا من كل حافةٍ من حوافه الأربع. باستخدام H_out = floor((16 - 3 + 0)/1) + 1، توقَّع عرض خريطة conv، ثم اقرأه فوق اللوحة.
H_out = floor(13/1) + 1 = 14. الخريطة 14×14 — أصغر باثنين من المُدخَل في كل بُعد، وهو تمامًا الإطار الذي لا تبلغه نافذة valid بحجم 3×3.
الآن تجميعٌ أقصى 2×2 بخطوة 2 يُبلِّط خريطة 14×14 إلى كتلٍ 2 في 2 غير متداخلة ويُبقي قيمةً واحدة لكل كتلة. توقَّع العرض المُجمَّع من floor((14 - 2)/2) + 1، ثم اقرأه.
floor(12/2) + 1 = 7. يُنصِّف التجميع كل بُعد، فتصبح خريطة 14×14 بحجم 7×7 — رُبع عدد الخلايا، وهو التقليص الذي يُتيح للطبقات الأعمق أن ترى قدرًا أكبر من الصورة دفعةً واحدة.
تقيس نواة Sobel-x التدرّج الأفقي. على صورة الحافة الرأسية (مظلمٌ يسارًا، ساطعٌ يمينًا، والقفزة عند العمود 8)، خليةُ conv تعبُر القفزة تساوي 4×(bright - dark) = 4×(1 - 0). توقَّع الاستجابة عند خلية الحافة (الصف 5، العمود 6)، ثم اقرأها من لوحة conv.
الاستجابة 4 — قفزةٌ قوية موجبة عند الحافة تمامًا. تتجمّع أوزان النواة إلى 0، فلا تستجيب إلّا لـتغيُّرٍ في السطوع، لا للسطوع نفسه. وهذا ما يجعلها كاشف حواف.
الآن اقرأ خليةً بعيدةً عن الحافة، في المنطقة المظلمة المسطّحة (الصف 5، العمود 2)، حيث كل بكسلٍ تحت النواة متساوٍ. توقَّع استجابة Sobel-x هناك قبل أن تقرأها.
الاستجابة 0 بالضبط. إذ لا تدرّج تحت النافذة، فتتلاشى أوزان النواة الموجبة والسالبة. كاشف حوافٍ يعلو عند الحواف ويصمُت على المناطق المسطّحة يؤدّي عمله تمامًا — وهذا هو الاقتران الذي يجعل الخطوة السابقة ذات معنًى.
لخريطة Sobel خلايا سالبة أيضًا (حافةٌ من ساطعٍ إلى مظلم). ReLU(x) = max(0, x) يقصُّ كل سالبٍ إلى 0 ويترك الباقي. خذ الخريطة الصغيرة [-3, 0, 2.5, -0.1] وتوقَّع كم خلية منها يجعلها ReLU صفرًا.
ReLU([-3, 0, 2.5, -0.1]) = [0, 0, 2.5, 0]: الخليتان السالبتان (-3 و-0.1) تصبحان 0، فتُصفَّر 2 خليتان، بينما تبقى القيمة الموجبة 2.5 دون مساس. هذه اللاخطّية هي ما يُتيح لكومة طبقات أن تتعلّم أكثر من خريطةٍ خطّيةٍ واحدة كبيرة.
أخيرًا، جمِّع الكتلة 2×2 [[1, 7], [3, 2]] بنافذة 2×2. توقَّع القيمة الواحدة التي يُرجِعها max-pool — ولاحِظ أنّها ليست المتوسّط، 3.25.
يُرجِع max-pool القيمة 7، أكبر قيمة في الكتلة — لا المتوسّط 3.25. إبقاء الأقصى يجعل خريطة السمات تُبلِّغ عمّا إذا ظهرت سمةٌ في أيّ موضعٍ من كل كتلة، ويمنح تسامحًا بسيطًا مع موضعها بالضبط.
كل ما سبق ينتظرك في المِنصّة. بدِّل النوى لترى Sobel-y يُطلِق عند الحواف الأفقية وLaplacian عند أيّ حافة، وغيِّر النمط والحشو لتراقب أحجام الخرائط تتبع الصيغة، وكدِّس طبقة conv ثانية لترى الخريطة تتقلّص من جديد.
- حسبتَ حجم التفافٍ valid بحجم 3×3: 16 → 14
- نصَّفتَه بـmax-pool 2×2: 14 → 7
- قرأتَ Sobel-x = 4 عند حافةٍ رأسية و0 حيث تكون مسطّحة — كاشف حوافٍ حقيقي
- راقبتَ ReLU يُصفِّر الخليتين السالبتين من [-3, 0, 2.5, -0.1]
- رأيتَ max-pool يُرجِع 7، أقصى الكتلة — لا المتوسّط 3.25
- كل قيمة توقّعتها هي حساب الالتفاف وReLU والتجميع الخاص بالعرض نفسه على نوًى ثابتة، لا صورة تقريبية