الوحدة 3 — التجميع وتقليل الأبعاد المكانية
عرفنا في الوحدة السابقة أنّ الخطوة 2 تُقلّص الصورة. لكنّ الخطوة 2 عملية متعلَّمة. التجميع طريقة أخرى لتقليل الأبعاد، وهي عملية جامدة بلا معاملات، لكنّها ذات تاريخ ومزايا. تشرح هذه الوحدة الفرق بين ثلاث عمليّات: التجميع الأقصى، ومتوسّط التجميع، والالتفاف بخطوة 2، ومتى تفضّل واحدة على الأخرى.
ما يفعله التجميع الأقصى
التجميع الأقصى (max pooling) يُقسّم خريطة الميزات إلى نوافذ صغيرة، ويُبقي في كلّ نافذة القيمة القصوى فقط. مع نافذة 2×2 وخطوة 2، تنكمش الأبعاد إلى النصف، ويبقى الاستجابة الأقوى لكلّ منطقة.
[ 1, 3, 2, 4] [ 3, 4]
[ 4, 5, 1, 2] → [ 5, 6]
[ 2, 1, 6, 3]
[ 3, 2, 5, 2]
كلّ خلية من الخرج هي أقصى قيمة في مربّع 2×2 من الدخل. المنطق البسيط: إذا كان المرشّح يبحث عن حافّة رأسية، فوجود حافّة قوية في أيّ مكان من الرقعة 2×2 أكثر أهمّية من موضعها الدقيق داخل الرقعة. التجميع الأقصى يُلخّص «هل الميزة موجودة هنا؟» ويتخلّى عن «أين بالضبط؟».
from tensorflow.keras import layers
x = layers.Conv2D(32, 3, padding="same", activation="relu")(entree)
x = layers.MaxPooling2D(pool_size=2, strides=2)(x) # ينصّف الأبعاد
متوسّط التجميع: بديل معتدل
متوسّط التجميع (average pooling) يستبدل «ال أقصى» بـ«المتوسّط». تكون النتيجة أكثر نعومة، وتنقل معلومة عن الكمّية الإجمالية للاستجابة بدل ذروتها.
x = layers.AveragePooling2D(pool_size=2, strides=2)(x)
كان متوسّط التجميع مستخدَمًا في LeNet الأصلية (الوحدة 4)، ثم استُبعِد لصالح التجميع الأقصى، فبرزت الحواف وحدود الأشياء بوضوح أكبر. لكنّ متوسّط التجميع عاد بقوّة في شكل خاصّ: GlobalAveragePooling2D.
GlobalAveragePooling2D: العودة إلى المتوسّط
عند نهاية الشبكة، بعد سلسلة من طبقات التلافيف والتجميع، نحصل عادةً على خريطة صغيرة بحجم 7×7 أو 4×4 مع مئات القنوات. المدخل الكلاسيكي كان Flatten ثم طبقة كثيفة كبيرة (LeNet وAlexNet). المدخل الحديث (منذ NIN و Inception) هو GlobalAveragePooling2D:
x = layers.GlobalAveragePooling2D()(x) # (batch, C) بدل (batch, H, W, C)
sortie = layers.Dense(10, activation="softmax")(x)
يحسب هذا التجميع متوسّط كلّ قناة على كامل خريطتها المكانية، فيُنتج متّجهًا طوله عدد القنوات. الفوائد كبيرة:
- حذف الطبقات الكثيفة العملاقة:
Flatten+ Dense(4096) في AlexNet كان يمثّل ستّين في المئة من معاملات الشبكة.GlobalAveragePoolingيُلغيها كلّها. - مرونة أبعاد الدخل: طبقة كثيفة تفرض حجمًا ثابتًا للدخل، لأنّ عدد المدخلات محدَّد سلفًا.
GlobalAveragePoolingيعمل على أيّ حجم دخل، ما يسمح بتقييم النموذج على صور بأحجام مختلفة. - تنظيم ضمنيّ: المتوسّط على 49 قيمة (خريطة 7×7) يُصعّب على الشبكة الاحتفاظ بموضع دقيق، فتُفضّل تعلّم ميزات قوية وموزّعة.
هذه هي القفزة التي جعلت شبكة ResNet ذات 50 طبقة تحمل معاملات أقلّ من VGG-16 ذي الطبقات الست عشرة، رغم عمقها الأكبر.
الالتفاف بخطوة 2 مقابل التجميع
كما رأينا في الوحدة السابقة، الالتفاف بخطوة 2 يُقلّص الأبعاد ويتعلّم كيف يُقلّصها. الفرق مع التجميع الأقصى دقيق لكنّه عملي:
| الجانب | التجميع الأقصى | الالتفاف بخطوة 2 |
|---|---|---|
| المعاملات | 0 | |
| الحساب | الحدّ الأدنى | متوسّط، مماثل لالتفاف عادي |
| اللاخطّية | جامدة، ثابتة | مُتعلَّمة، قابلة للتكيّف |
| السلوك | يُفضّل الاستجابات القوية | يُتعلَّم من التدريب |
المعماريات الحديثة (ResNet وما تلاها) تُفضّل الالتفاف بخطوة 2 لسببين: أوّلًا، إعطاء الشبكة سيطرة كاملة على كيفية التقليل بدلًا من فرض اختيار المصمّم؛ وثانيًا، بساطة تصميم البلوك التلافيفي. لكنّ التجميع الأقصى لم يمت: فهو يبقى مفيدًا في الطبقات المبكرة (كما في ResNet وVGG) وفي المهمّات الحسّاسة لموقع الميزة.
الثبات التقريبي بالإزاحة
يُشاع القول بأنّ التجميع الأقصى يمنح الشبكة ثباتًا بالإزاحة. القول صحيح جزئيًا: إذا تحرّكت حافّة داخل نافذة التجميع، بقيت الحافّة القصوى نفسها. لكنّ إذا خرجت الحافّة من النافذة إلى الجارة، تغيّر الخرج. الثبات الحقيقي بالإزاحة لا يتحقّق إلّا بالجمع بين مشاركة الأوزان في الالتفاف (الوحدة 1) والتجميع، وحتى ذلك يبقى تقريبيًا.
جرّب بنفسك: أزح صورة CIFAR-10 بمقدار بكسل واحد إلى اليمين، ثم مرّرها في الشبكة نفسها. ستُلاحظ أنّ الاحتمالات تتغيّر قليلًا، وأحيانًا يتغيّر الصنف المتوقّع. النماذج الحديثة تحاول إصلاح ذلك بعمليات ما قبل تجميع مستدلّة (antialiasing) كما اقترح Zhang في 2019، لكنّها لم تدخل التطبيقات الاعتيادية بعد.
مهمّات كشف الأشياء وتجزئة الصور تحتاج إلى موقع البكسل بدقّة. التجميع المتكرّر يُدمّر هذه المعلومة، ولا تُسترجَع بسهولة. لهذا السبب تُستخدم في هذه المهمّات معماريات ذات فروع مواصلة (U-Net) أو التفاف موسَّع بدل التجميع.
عملية على CIFAR-10
نجمع الأفكار في شبكة تلافيفية أنظف، تعتمد التجميع الأقصى لتقليل الأبعاد ثم GlobalAveragePooling قبل الخرج:
import tensorflow as tf
from tensorflow.keras import layers, models
modele = models.Sequential([
layers.Input(shape=(32, 32, 3)),
# كتلة 1: 32×32 → 16×16
layers.Conv2D(32, 3, padding="same", activation="relu"),
layers.Conv2D(32, 3, padding="same", activation="relu"),
layers.MaxPooling2D(2),
# كتلة 2: 16×16 → 8×8
layers.Conv2D(64, 3, padding="same", activation="relu"),
layers.Conv2D(64, 3, padding="same", activation="relu"),
layers.MaxPooling2D(2),
# كتلة 3: 8×8 → 4×4
layers.Conv2D(128, 3, padding="same", activation="relu"),
layers.Conv2D(128, 3, padding="same", activation="relu"),
layers.MaxPooling2D(2),
# رأس التصنيف
layers.GlobalAveragePooling2D(),
layers.Dense(10, activation="softmax"),
])
modele.compile(optimizer="adam",
loss="sparse_categorical_crossentropy",
metrics=["accuracy"])
هذا نموذج يشبه VGG-صغير: كتلتان أو ثلاث التفافات بمرشّح 3×3 قبل كلّ تجميع، ومضاعفة القنوات كلّما نصّفنا الأبعاد. سيصل هذا النموذج إلى دقّة 82 % على CIFAR-10 خلال 30 حقبة، ويشكّل خطّ الأساس المتين الذي سنقارن به المعماريات في الوحدات القادمة.
- الطبقة الأولى: التجميع الأقصى يعمل جيّدًا؛ الالتفاف بخطوة 2 لا يبرر تعقيده هنا.
- الطبقات الوسطى: الاختيار مسألة أسلوب — VGG يُفضّل التجميع، ResNet يُفضّل الالتفاف بخطوة 2.
- قبل الخرج: استخدم دائمًا
GlobalAveragePooling2DبدلFlatten؛ فرق واحد إلى اثنين في المئة من الدقّة، وعدد معاملات أقلّ بعشرات المرّات.
في الخلاصة
- التجم يع الأقصى يُبقي أقوى استجابة في كلّ رقعة، ويصلح للطبقات المبكرة حيث نرغب في تلخيص «هل الميزة موجودة؟».
- متوسّط التجميع أكثر نعومة، وشكله الحديث الأهمّ هو
GlobalAveragePooling2Dالذي يُلغي الطبقات الكثيفة الكبيرة ويسمح بأحجام دخل متغيّرة. - الالتفاف بخطوة 2 بديل متعلَّم للتجميع، تفضّله المعماريات الحديثة لأنّه يُبقي القرار داخل الشبكة، لكنّه ليس دائمًا أفضل من التجميع الأقصى في المهمّات البسيطة.
- الثبات بالإزاحة يبقى تقريبيًا، ولا يكفي وحده لمهمّات الكشف والتجزئة الدقيقة؛ هذه تتطلّب معماريات مختلفة تحفظ الدقّة المكانية.
الوحدة التالية: LeNet وAlexNet، حيث نتتبّع تطوّر المعماريات من أوّل شبكة تلافيفية عاملة إلى انفجار الرؤية العميقة في 2012.