A CNN, start to finish


Draw, or pick

1–3. Convolution, ReLU, pooling 4 filters · 28×28 → 26×26 → 13×13

4–5. Scores and softmax 4 numbers → 5 scores → 5 probabilities

الفكرة كلّها.
تحوّل الـ convolutional network شبكةً من الـ pixels إلى بضعة احتمالات للفئات، مرحلةً بعد مرحلة. وكلّ مرحلة في هذه الصفحة قابلتها وحدها من قبل:
• Convolution: ينزلق kernel ذو 3×3 فوق الصورة، كما في صفحة الـ edge detection. وهنا أربعة منها، كلٌّ يبحث عن خطٍّ مستقيم قصير في اتّجاه واحد. ثلاثة pixels محبَّرة متتالية في اتّجاه الـ kernel نفسه تُسجّل 6، والـ bias الخاصّ بالـ kernel وقدره −3 ينزل بها إلى 3. ونهاية الخطّ، أي اثنان متتاليان، يبقى لها 1؛ وpixel منفرد شارد ينتهي عند −1.
• ReLU: يصير كلّ سالب 0، كما في صفحة الـ activation، فلا يبقى إلّا الخطوط الحقيقية.
• Max pooling: تُبقي كلّ نافذة 2×2 أكبر قيمة فيها، كما في صفحة الـ pooling، ويصغر الـ map من 26×26 إلى 13×13.
• Global max: يصير كلّ map رقمًا واحدًا، أكبر قيمة فيه في أيّ مكان: “هل يوجد خطّ في هذا الاتّجاه في مكانٍ ما؟” والصورة كلّها الآن أربعة أرقام.
• Scores: تجمع كلّ فئة هذه الأرقام الأربعة بأوزانها الخاصّة، مضافًا إليها bias. الـ + يريد عموديًّا وأفقيًّا ولا أقطار؛ والـ bias الخاصّ به وقدره −3 يعني أنّ اتّجاهًا واحدًا وحده لا يكفي.
• Softmax: تصير الـ scores احتمالات، كما في صفحة الـ softmax.
كلّ weight هنا وُضِع باليد، فيمكن تفسير كلّ رقم. أمّا الشبكة الحقيقية فتبدأ بـ weights عشوائيّة وتتعلّمها بـ optimizer.

أمور تستحقّ التجربة:
1. اختر |. لا يضيء إلّا الـ filter العموديّ، فتكون الأرقام الأربعة 3, 0, 0, 0 وتقول الشبكة | بنسبة 95.0%. الآن ارسم خطًّا أفقيًّا عبره: يضيء الـ map الأفقيّ ويتقدّم + بنسبة 90.7%.

2. انقر أيّ pixel في map لترى حسابه: رقعة 3×3 من الرسم، مضروبةً في الـ kernel، زائد الـ bias، ثمّ ReLU، ثمّ نافذة الـ pooling ذات 2×2 التي يقع فيها. وانقر أحد الأرقام الأربعة على اليمين لتنتقل إلى الموضع الذي وُجِدت فيه تلك القيمة العظمى.

3. اختر *، علامة زائد وعلامة ضرب فوق بعضهما. تنطلق الـ filters الأربعة كلّها، تمامًا كما في الدائرة: كلاهما يعطي 3, 3, 3, 3، فتسمّي الشبكة النجمةَ ○ بنسبة 99.5%. يحتفظ الـ global max بـما إذا ظهر كلّ اتّجاه ويرمي أين ظهر، وهذا كلّ ما تعرفه هذه الشبكة. أمّا الـ CNNs الحقيقية فتكدّس طبقات convolution كثيرة، فتجمع الطبقة الثانية الخطوطَ في زوايا ومنحنيات، والثالثة في أجزاء، وهكذا. وفي هذه الصفحة طبقة واحدة، كي يبقى كلّ رقم قابلًا للتفسير.

4. ارسم صغيرًا. الدائرة التي نصف قطرها أقلّ من نحو 5 pixels قد تفقد أحد اتّجاهاتها، لأنّ منحناها ليس فيه ثلاثة pixels متتالية مستقيمة في ذلك الاتّجاه، وقد تخرج +. فالـ kernel ذو 3×3 لا يرى أبدًا إلّا 3×3 pixels في كلّ مرّة.

5. في شبكةٍ بهذا القِصَر لا يغيّر الـ pooling الجواب: كان الـ global max سيجد القمّة نفسها في الـ map ذي 26×26. وهو هنا لأنّ الـ convolution التالية في شبكةٍ أعمق تعمل على الـ map الأصغر، وهذا أرخص ويجعل كلّ kernel فيها يرى جزءًا أوسع من الصورة.