CNN
CNN
الشبكات العصبية الالتفافية (Convolutional Neural Networks – CNN)
مقدمة
ال CNN تعتبر من أهم وأقوى أدوات ال Deep Learning المستخدمة لتحليل الصور والفيديوهات، لكنها مش بتقف عند الصور بس؛ ممكن كمان نستخدمها في معالجة البيانات الزمنية (مثل الصوت)، تصنيف النصوص، وحتى اكتشاف الأنماط في البيانات المختلفة.
بتتميز الشبكات دي بقدرتها على التعامل مع بيانات ليها هيكلة معينة، زي الصور اللي بتكون عبارة عن مصفوفات أرقام.
ليه نستخدم CNN بدل الTraditional Neural Network ؟
⦁ تقليل عدد ال Parameters :
الصور بتكون كبيرة جدًا. لو استخدمنا Dense Neural Network، هنحتاج عدد مهول من ال parameters لتتعلم لل features .
CNN بتحل المشكلة باستخدام فكرة الـ Filters .
⦁ ال (Feature Extraction)
ال filters بتساعدنا نكتشف تفاصيل الصورة زي الحواف، الألوان، والقوام. مع multiple layers، الشبكة بتتعلم features أكتر تعقيدًا.
⦁ مفهوم الـ Spatial Hierarchy
CNN بتاخد بالها من ترتيب البيانات في الصورة (زي إن الحواف بتيجي الأول، وبعدين الأشكال، وهكذا).

مكونات شبكة CNN
⦁ طبقة الالتفاف (Convolution Layer)
دي ال layerالأساسية اللي بنستخدم فيها فلاتر Filters أو Kernels لمعالجة الصورة.
كل فfilter بيتحرك على أجزاء الصورة ويطلع لنا Feature Map .

⦁ طبقة التفعيل (Activation Layer)
غالبًا بنستخدم ReLU Function عشان تضيفnon linearity لل model ، وده بيخليه يقدر يتعامل مع مشكلات أكتر تعقيدًا.

⦁ طبقة التجميع (Pooling Layer)
الهدف منها تقليل أبعاد البيانات (dimensionality reduction ) من غير ما نفقد ال features المهمة. أشهر نوع هو Max Pooling وAverage Pooling .

⦁ ال Fully Connected Layers
في الآخر بنوصل الطبقات دي عشان نطلع النتيجة النهائية، زي تصنيف الصورة (Image Classification) .

Padding و Stride في ال CNN
عند التعامل مع ال CNN ، Padding و Stride هما مفهومين مهمين جدًا بيحددوا طريقة حركة ال Filters على البيانات المدخلة ، وبيأثروا بشكل كبير على حجم features map الناتجة من ال Image .
Padding
هو عملية إضافة حدود (أصفار غالبًا) حوالين البيانات المدخلة (زي الصورة) عشان نتحكم في أبعاد feature map الناتجة.
أنواع الـ Padding :
⦁ Valid Padding بدون Padding
في الحالة دي، ال filter بتتحرك على الصورة الأصلية من غير ما نضيف أي حدود.
⦁ بيقلل أبعاد الصورة الناتجة.
⦁ مثال: صورة (5×5) مع فلتر (3×3) تطلع خريطة سمات بحجم (3×3).

Same Padding :
بنضيف حدود كافية حوالين الصورة بحيث تفضل الأبعاد الناتجة عن Convolution زي أبعاد الصورة الأصلية.
⦁ الصورة الناتجة بتكون بنفس الأبعاد.
⦁ مثال: صورة (5×5) مع فلتر (3×3) تطلع نفس الحجم (5×5).

ليه نحتاج Padding؟
⦁ الحفاظ على المعلومات في الأطراف:
بدون Padding، ال filter ممكن مش بتقدر تلتقط السمات اللي على أطراف الصورة.
⦁ التحكم في أبعاد الصورة الناتجة:
أبعاد الصور الصغيرة ممكن تقل جدًا مع كل layer، فـ Padding بيحل المشكلة.
مثال في الكود:

Stride
يشير إلى عدد الخطوات اللي بيحركها الfilter أثناء عملية Convolutionعلى الصورة.
القيم الشائعة للـ Stride:
Stride = 1 الافتراضي:
⦁ الفلتر بيتحرك خطوة واحدة في كل مرة (عرضيًا وطوليًا).
⦁ الصورة الناتجة تكون أكبر نسبيًا.
Stride > 1 :
⦁ الفلتر بيتحرك أكتر من خطوة في كل مرة.
⦁ بيؤدي لتقليل أبعاد الصورة الناتجة.

العلاقة بين Stride وحجم الصورة:
حجم الصورة الناتجة يمكن حسابه باستخدام المعادلة:

مثال:
⦁ صورة بحجم 5×5
⦁ فلتر 3×3
⦁ Padding = 0 و Stride = 2
Output Size= ( (5-3+0) / 2 ) +1 = 2×2
مثال في الكود:

الفرق بين Padding و Stride

كود مبسط باستخدام مكتبة Keras
هنبني CNN Network لتصنيف الصور على مجموعة بيانات MNIST صور أرقام مكتوبة يدويًا .


شرح الكود
- تحميل البيانات
- بيانات MNIST عبارة عن صور أرقام 28×28 بكسل، أبيض وأسود.
- تهيئة البيانات
- بنnormalize الداتا بين 0 و 1 عشان التدريب يكون أسرع وأدق.
- بناء ال model
- أول convolution layer فيها 32 filter بحجم (3×3).
- بعدها طبقة Max Pooling عشان نقلل الأبعاد.
- أضفنا convolution layer تانية مع المزيد من filters ( filter 64) : .
- Flatten : بتحول البيانات من 2D إلى1D عشان نقدر نوصلها ب fully connected layer .
- Dense : فيها 128 neuron لتعلم ال features، و10 neuronsفي layer الأخيرة عشان عدد classes (الأرقام من 0 إلى 9).
⦁ تدريب ال model
بنستخدم Adam Optimizer و Categorical Crossentropy Loss.
ملحوظات
⦁ CNN بتحتاج بيانات وصور كتير للتدريب.
⦁ لو البيانات صغيرة، ممكن نستخدم تقنيات Augmentation لتكبير البيانات.
الخاتمة
CNN من أقوى NN في ال deep learning ، ومجالات استخدامها بتتوسع بسرعة. بفهم الأساسيات والكود ده، ممكن تبدأ تطبيقها على مشاريعك .