in

دليل شامل لبناء شبكة عصبونية تلافيفية (CNN)

تُعدُّ الشبكة العصبونية التلافيفية (Convolutional Neural Network: CNN) أحد أنواع التعلّم العميق (الشبكات العصبونية العميقة- Deep NN)، وهي مُشابهة لشبكة برسيبترون مُتعدّدة الطبقات (multi-layer Perceptron) –سنترك لها مقالًا مُستقلاً.

إلا أن الاختلافَ يكمنُ في ما تتعلّمه الشبكة، وكيف تُبنى، وماهية الهدف المنشود منها.

عادةً ما تُستخدم شبكات CNN في تطبيقات الرؤية الحاسوبية (Computer vision)، وتحليل المشاهد المرئية؛ إذ تتميّز بوجود طبقة مخفية واحدة أو أكثر، من شأنها استخراج السمات الموجودة في الصور أو مقاطع الفيديو، وطبقة كاملة الارتباط لإنتاج الخرج المطلوب.

ما هي المُشكلات التي صُممت شبكات CNN لحلّها؟

يُقامُ سنويًا أولمبياد الرؤية الحاسوبية، وهو مُنافسة تحدث تحت اسم (ImageNet Challenge)، وبالعودة إلى عام 2010؛  بدأت المهمةُ التي مفادُها بناء برنامج حاسوبي قادر على التعرُّف الصحيح إلى غرض مُعين في صورة مُعطاة.

بالطبع إنها لَعملية من البديهة تحقيقها لدى البشر، ترى صورة فيها لَقْطة لـ “قطّة”، يتعرّف دماغك إلى الغرض في الصورة ويحدده مُباشرة على أنّه “قطة” ويُصنّف على هذا الأساس.

صمم فائزُ مُنافسةِ عام 2012 نموذجَ الشبكة العصبونية التلافيفية من خلال تطبيق نظريات علم الأعصاب المُتعلّقة بطريقة الدماغ في تعرُّف الأعراض.

الآن، كيف للدماغ أن يحوّل الصورة الآتية إلى “ثلاثة كلابٍ في حقل”؟

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

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

ما هي مواصفات الدخل؟

من الضروري جدًا فَهم شكل عيّنات التدريب (بيانات الدخل). إنّ الصورة بالنسبة إلى الحاسوب عبارة عن مصفوفة ثلاثية الأبعاد (العرض×الارتفاع×العمق) من قيم تتراوح بين 0-255؛ إنّها ببساطة نقاط لونية (pixels) متوزّعة طولًا وعرضًا وثلاث قنوات لونية (إذا كان النظام اللوني للصور هو RGB)، كما يظهر في التمثيل أدناه:

صورة (6x6x3)

مع العلم أنه لو كان عدد القنوات يساوي (1) فإن الصورة: grayscale؛ بالأبيض والأسود.

ماذا تتعلّم الطبقات المخفيّة؟

المُكوّنات الأساسية الشبكات العصبونية التلافيفية الأساسية هي: طبقة التلافيف (Convolutional Layer)، ودالّة التفعيل (Activating function)، وطبقة التجميع (Pooling Layer)، وطبقة الارتباط الكامل (Fully-connected Layer).
سنوضّح كل منها على حدة ومن ثم نشرح عملها معًا.

طبقة التلافيف:

يُطبَّق في طبقة التلافيف مُرشِّحًا (Filter ويُعرف أيضًا بـ kernal) من شأنه تحديد وجود سمات أو أنماط مُعينة في الصورة الأصلية (الدخل)، ثم إنه يُمكن استخدام عدّة مُرشِّحات بغية استخراج سمات مُختلفة.

يكون المُرشِّح ذا حجم صغير ليمسح الصورة كاملةً ويطبق العمليات الحسابية المُناسبة بين قيم المُرشِّح والنقاط اللونية (Pixels) بغية استخراج السمات (Features)، عادة ما تكون الجداء الداخلي فيما بينها.

العمليات التلافيفية.

يُعاد ضبط قيم المُرشِّح خلال عملية التدريب الدورية وعند تدريب الشبكة لعدد مُعيّن من العصور (epochs)، وكل عصر تدريب يعني إدخال كل أمثلة التدريب مرّةً واحدة، تشرع هذه المُرشِّحات البحثَ عن سمات مُتمايزة في الصورة.

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

سمات مُختلفة تم تعرُّفها في طبقات مُختلفة.

مثال توضيحي:

كما أشرنا سابقًا؛ نبدأ بتحديد الحواف والألوان وأنماط (أو خطوط) مُحدّدة ضمن الصورة، مثل تحديد الخط المُنحني في الشكل الآتي، والذي يُمثَّل بمصفوفة قيم مثلما المصفوفة المُمثِّلة للصورة:

المصفوفة المُمَثِّلة لهذا الخط هي المُرشِّح المذكور آنفًا، فلتُبقي في بالك أيضًا أن عُمق المُرشِّح من عُمق الصورة؛ أي عدد القنوات اللونية لكليهما متساوٍ.

الآن نحتاج إلى التحقق من احتواء الصورة على هذا المُرشِّح (الخط المُنحني)، ولنأخذ  هذه الصورة على سبيل المثال:

نقوم بمسح الصورة باستخدام نافذة لها أبعاد المُرشِّح ذاتها، وذلك بحساب الجداء الداخلي بين قيم المُرشِّح وجزء الصورة المُحدد بالنافذة، والذي نسميه (receptive field).

بتطبيق الجداء الداخلي بين مصفوفتي المُرشِّح والـ receptive field في الصورة السابقة، تنتج لدينا القيمة الآتية:

لاحظ أن نتيجة الجداء الداخلي: 218,535 كبيرة جدًا؛ بسبب نسبة التطابق الكبيرة. لكن لو كان الشكل في الصورة غير مُشابه للمُرشِّح، ستصغُر قيمة الجداء، إليك مثالاً على ذلك، حيث النتيجة صفرًا:

وبالتالي يُمكن استخدام هذا الجداء لاختبار توضّع أنماط معينة في الصورة. عليه؛ القيم التي نُدرّب الشبكة عليها هي: قيم مصفوفة المُرشِّح.

لكن كيف نُخزِّن هذه المعلومات؟

نحتاجُ تخزينَ معلوماتٍ عن المواقع المحتوية على شكل المُرشِّح (الخط المُنحني هُنا)؛ فكيف نخزّن أنه يوجد -مثلاً- مُنحني في الزاوية اليسارية العُليا للصورة بينما لا يوجد في الجانب الأيمن منها؟

يُحلُّ ذلك بتخزين قيم الجداء الداخلي من أجل كل receptive field في مصفوفة أُخرى تُدعى خريطة التفعيل (activation map) أو خريطة السمات (Feature map)؛ اسمها خريطة لأنّها تُعطي معلومات عن وجود المُرشِّح في الصورة ومواقع ظهوره فيها. ويكون عمق الخريطة من أجل كُل مُرشِّح مساويًا إلى (1).

الالتفاف حول الصورة أو مسحها (الأزرق)، وتخزين نتائج الجداء الداخلي في خريطة التفعيل (الأخضر)

طبقة التجميع:

إن الغاية من طبقة التجميع هي تقليص حجم خرائط التفعيل (قلنا خرائط لإمكانية استخدام أكثر من مُرشِّح). لا يُقلل ذلك من كمية الحسابات الضرورية فحسب، بل يقي من الـوقوع في حالة overfitting.

الفكرة الكامنة وراء التجميع بسيطة جدًا: تقليص حجم المصفوفات الكبيرة، وتتم العملية من خلال  تطبيق إحدى الدالتين الآتيتين:

  • Max: تحديد القيم العُظمى في كل نافذة.
  • Average: حساب المتوسط الحسابي للقيم الموجودة في النافذة الواحدة.

إلا أنّ التقنية الأكثر رواجًا هي الأولى؛ Max-pooling: مفادُ هذه الطريقة هو مسح خريطة التفعيل (أو مصفوفة السمات) بنافذة صغيرة والإبقاء على القيم الأكبر ضمن كل نافذة مُقلّصين بذلك حجم الخريطة، كما يلي:

إذن يتم في طبقات التجميع استخراج أفضل القيم للسمات الموجودة في مصفوفة السمات التي نتجت عن طبقة التلافيف.

طبقة الارتباط الكامل:

تكون هذه الطبقة هي الأخيرة في الشبكة التلافيفية وهي من نوع (multi-layer perceptron)، حيث العصبونات مُرتبطةً بالكامل مع كُل عُقد الطبقة السابقة لها. سبب وجودها في النهاية لأن عملية التصنيف النهائية تتم فيها.
تُطبق فيها عملية بَسْط (flattening operation): بَسط الدخل إلى شُعاع سمات ومن ثَم تمريره إلى شبكة من العصبونات للتنبؤ باحتمالات الخرج.

دخل الطبقة:

هو مصفوفة تتضمن معلومات عن مواقع توضّع أشكال (أنماط) مُعقدة مُعينة في الصورة، ونُطلق على هذه الأنماط المُعقدة اسم (مُصنِّفات قابلة للتدريب- trainable classifiers)؛ هي المُرشِّحات ذاتها أو (kernals) أو مصفوفة الأوزان:

خرج الطبقة:

هو شعاعُ قيمِ تمثِّل كل منها احتمال صنف من التصنيفات التي تُدرَّب الشبكة عليها (أي الأوزان)؛ فمثلاً: بفرض لدينا كل من التصنيفين “cat” و”car”، سيكون خرج الطبقة [0.91, 0.01]، هذا يعني احتمال أن تكون الصورة لِقِطة هو 0.91، أما احتمال كونها لِسيارة هو 0.01، وباختيار الاحتمال الأكبر تكون الصورة من صنف “cat”.

.  .  .

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

دمج الطبقات بعضها مع بعض

هنالك بعض الطرائق المُتاحة لدمج الطبقات للوصول إلى غايتنا في تصنيف الصور، ما سنتّبعه هو الآتي: دمج عدّة طبقات من نوع التلافيف لأجل تعرُّف الأنماط المُعقّدة، وهذا ما يُطلق عليه أحيانًا “طبقةً رابعة” في الشبكة التلافيفية: دوالّ التفعيل اللا خطية. على غرار المُرشِّح الذي استخدمناه في مثالنا التوضيحي السابق، هذه مجموعةٌ من المُرشِّحات المُمكنة:

مأخوذة عن كورس من جامعة ستنافورد

حقيقةً، لا يُمكن الاعتماد على أيّ من المُرشِّحات السابقة لتحديد فيما إذا كان الشكل لـ “قطة” أو “أسد” مثلاً، لهذا سنحتاجُ إلى بناء مُرشِّحات (أنماط) أكثر تعقيدًا بناءً عليها.

فلِتَعَرُّف الأنماط الآتية سنبني مُرشِّحًا كما في السابق، إلا أن المُعضلة في هذا المُرشِّح المُعقد تكمن في احتمال فشله بتعرف الأنماط الصحيحة بدقة (false negative) أو في تحديده لأجزاءٍ خاطئة من الصورة على أنها النمط المقصود (false positive):

ولحل هذه المُعضلة، سنُطبّق عدّة مُرشِّحات على الصورة في نفس طبقة التلافيف ونُخزن كلاً منهم في خريطة على حدة، ومن ثَم ندمجهم معًا في الطبقة التالية في خريطة واحدة:

يُمكن تكرار هذه العمليات قدر ما تشاء؛ إذ بتكرارها أكثر من مرة تصبح الشبكة تدريجيًا قادرةً على تعرُّف أنماطٍ أكثر تعقيدًا. والهدف هو تعلُّمُ تعرُّفِ السمات المُعقّدة التي من شأنها أن تصبح مُصنِّفات قابلة للتدريب من أجل مجموعة من الأغراض.

لاحظ السمات المُعقدة للسيارة في الصورة الآتية:

دالة التفعيل:

هي دالة لا خطيّة ولها عدّة  أنواع تجدها في الصورة أدناه:

دوالّ التفعيل

بَيْدَ أن أكثر الدوالّ استخدامًا في هذه الأيام هي: (Rectified Linear Unit: ReLU)، وذلك للميّزة الأكثر أهمية: عدم تفعيل كل العصبونات في نفس الوقت، ما يُساهم في تقليل كمية الحسابات المُنجزة؛ إذ تُصفِّر القيم السالبة.

 فهي من البساطة بمكان: كل القيم المساوية إلى الصفر أو أصغر منه تُصبح صفرًا، بينما تبقى القيم الموجبة كما هي.

تصميم نموذج الشبكة

  1. إدخال صورة إلى طبقة تلافيف.
  2. تطبيق دالة التفعيل على خرج طبقة التلافيف.
  3. إرسال خرج الدالة إلى طبقة تلافيف أُخرى، وتكرار العملية عدّة مرّات,
  4. إرسال الخرج إلى طبقة تجميع.
  5. تكرار الخطوات (1-4) عدّة مرات وإنتاج المُصنِّفات القابلة للتدريب.
  6. إرسال مصفوفة الخرج إلى طبقة كاملة الارتباط، التي بدورها تردّ شعاع الأوزان؛ فيه احتمال كل تصنيف نريد تدريب الشبكة عليه.

تُلخّص الخطوات السابقة في الصورة الآتية:

. . .

التطبيق البرمجي

سنقوم بكتابة الكود البرمجي بلغة بايثون (Python)، ومجموعة التدريب المُستخدمة هي: (MNIST handwritten digits dataset)، وهي مجموعة من 70,000 رقم مكتوبة بخط اليد، مع التصنيفات المُرتبطة بها.

الهدف هو تدريب الشبكة على تعرّف الشكل وتحديد الصنف الذي ينتمي إليه (أي رقم هو ضمن المجال 0-9).

أمثلة على أرقام من مجموعة التدريب

إنْ لم تكن لديك معرفة جيدة بمفاهيم الجبر الخطي فيما يتعلّق بتعلّم الآلة اقرأ هذا الملف.

.  .  .

النموذج (الشبكة) في هذا المثال مَبني بواسطة مكتبة Keras (ومكتبة Tensorflow في الخلفية).

أولاً: استدعاء المكتبات المطلوبة.

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

ثالثًا: تقييس الدخل (normalize). لكن؛ كيف يتم التقييس؟

لتحقيق ذلك يجب أن تحويل القيم اللونية للصور لتصبح ضمن المجال (0-1)، وبما أنّ الصور في مجموعة التدريب ضمن تدرجات اللون الرمادي (القيم اللونية ضمن المجال 0-255) نقس القيم على القيمة العُظمى (255).

رابعًا: ترميز الخرج؛ مسألتنا هي مسألة تصنيف مُتعدّد. لدينا 10 تصنيفات (0-9)، سنقوم بتحويل شعاع القيم الصحيحة للتصنيفات إلى مصفوفة ثُنائية، باستخدام التابع to_categorical.

خامسًا: بناء الشبكة

  1. الطبقة المخفية الأولى هي طبقة تلافيف (Convolution2D)، لديها 32 خريطة سمات، كل منها بحجم 5*5، وتابع التفعيل هو rectifier (relu).
  2. الطبقة التالية هي طبقة تجميع، حجم النافذة 2*2.
  3. الطبقة التالية هي طبقة dropout؛ مهمتها إقصاء 20% من العصبونات عشوائيًا بغية تقليل احتمالية حدوث overfitting.
  4. الطبقة التالية هي طبقة flatten، مهمتها تحويل مصفوفة البيانات ذات البعد 2D إلى شعاع، وذلك بغية مُعالجة الخرج لدى شبكة الارتباط الكامل.
  5. الطبقة التالية هي طبقة الارتباط الكامل بـ  128 عصبون وتابع التفعيل relu.
  6. واخيرًا طبقة الخرج مع بـ 10 عصبونات من أجل التصنيفات العشر وتابع التفعيل softmax لإنتاج احتمال كل تصنيف.
  7. دالة الخطأ هي (Categorical Cross-Entropy Loss)، وخوارزمية التدريب/ تعديل الأوزان هي (adam).

سادسًا: التدريب والتقييم

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

 طريقة تدريب شبكتنا هي بإشراف مُعلِّم (Supervised) ومن نوع (Batch training)؛ أي أن تعديل الأوزان يتمّ بعد إدخال جميع الأمثلة، على عكس النوع المُقابل (Online trainig) الذي يتم فيه تعديل الأوزان بعد إدخال كُل مثال.

وخوارزمية التدريب المُتبعة هي: (The Adaptive Moment Estimation) أو (Adam optimization algorithm).

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

هي عبارة عن دمج بين الخوارزميتين: (Gradient Descent with Momentum: GDM) و(Root Mean Square Prop: RMSprop).

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

إذن المسألة هي: إيجاد النهاية الصُغرى لتابع الخطأ؛ إذ تسعى الخوارزمية إلى إيجاد الوزان المُثلى، وتقليص الخطأ، ورفع الدقّة.

نبدأ بالانطلاق من الأوزان العشوائية وإيجاد النهاية الصُغرى لتابع الخطأ؛ أي البحث عن مجموعة الأوزان التي تجعله أصغر ما يُمكن.

لكن خوارزمية الانحدار التدريجي قد تصل بنا إلى نهاية صُغرى محلية (Local Minimum) لنعلق فيه بالرغم من وجود نهاية صُغرى أكثر انحدارًا (Global Minimum) هي المنشودة.

والحؤول دون الوقوع في نهاية محلية أضفنا الـ Momentum (يُماثل مدلوله الفيزيائي؛ زخم الحركة في تقليل التفاوتات الكبيرة للأوزان من مثال لآخر).

عدد عصور التدريب هو (10)، وحجم دفعة البيانات في كل عصر هو (200).
تم تقييم النموذج بمجموعة الاختبار وقد حقق مُعدل خطأ لا بأس به؛ (1.03%).
وقد يستغرق كل عصر تدريب نحو 45 ثانية عند التنفيذ على الـ GBU.

. . .

الشبكات العصبونية التلافيفية أحادية البعد 1D CNN

لن نُعطي شبكات CNN حقّها إن لم نفتح بابًا إلى 1D CNN، التي تبرعُ في مسائل لا تقل أهمية عن مسائل الصور والفيديو والرسوميات عمومًا؛ إذ لها تطبيقات جيّدة في تحليل بيانات أجهزة الاستشعار (مثل: بيانات حسّاس التسارُع- accelerometer أو بيانات البوصلة الكهربائية- gyroscope)، وتحليل بيانات الإشارة (مثل الإشارة الصوتية)، ومُعالجة اللغات الطبيعية (Natural Language Processing: NLP).

ما الفرق بين الـ 1D CNN والـ 2D CNN؟

تتشارك الشبكات التلافيفية عمومًا في السمات وتتبّع نفس المنهج، لا فرق بين 1D أو 2D أو 3D سوى في بُعدية (عدد أبعاد) بيانات الدخل وكيفية مسح المُرشِّح المُستخدَم لها. وسيتّضح الأمر لك بشكل جيد عند مقارنك للمثال التالي مع ما شرحته آنفًا فيما يخص مُعالجة الصور.

مثال توضيحي:

البيانات في مسألتنا الآتية هي بيانات حسّاس التسارع مُجزَّءَة الزمن (time-sliced) المُستحصَلة من الهواتف الذكية -يُمكن التماس أثر هذا الحساس بسهولة في خاصية تدوير الشاشة بحسب اتجاه الميلان، أو مثلاً عند لعب بعض الألعاب التي تتطلب تحريك الهاتف للتفاعل كألعاب السباق-  وباستخدام هذه البيانات ذات الثلاثة محاور(x, y, z)، ستتنبأ الشبكة بنشاط المُستخدم الذي يؤدّيه، مثل: المشي أو الركض أو الوقوف…

مثال على شكل بيانات حسا التسارع.

بناء نموذج الشبكة:

باستخدام مكتبة Keras:

شرح الطبقات:

بيانات الدخل:

كانت قد سُجِّلت البيانات  بتردد 20 هرتز، لذا يغطي كل مجال زمني 4 ثوانٍ من قراءة الحسّاس. لكن هذا الشكل لا يفي بالغرض، لذا عولِجَت البيانات ليتضمن كل سجل على 40 قطعة زمنية، تُخزَّن قيم الحساس الثلاثة على المحاور الإحداثية خلال كل مجال زمني. ستُمرر البيانات إلى الشبكة على شكل شعاع بطول 240، لتغير الطبقة الأولى شكله بما يُناسب البقة التالية إلى مصفوفة بحجم 80×3.

طبقة التلافيف (1D CNN) الأولى:

هُنا يتم تعريف المُرشِّح المُستخدَم وفي حالتنا بارتفاع يساوي 10×3 (ليمسح مصفوفة البيانات 80×3)، ومع تعريف مُرشِّح واحد تُصبح الشبكة قادرة على تعّرف سمة واحدة ضمن الطبقة الأولى، لِنُعرف 100 مُرشِّح بغية تعلم 100 سمة مُختلفة في الطبقة الأولى. خرج هذه الطبقة هو مصفوفة بحجم 71×100، يُمثِّل كل عمود منها أوزان مُرشِّح واحد. لكن لماذا 71؟ ارتفاع مصفوفة الدخل 80 وحجم ارتفاع نافذة المُرشِّح 10، لذا مسح البيانات يتطلب 71 خطوة (80-10+1).

طبقة التلافيف (1D CNN) الثانية:

أيضًا سيُعرف 100 مُرشِّح لتعلمها على هذا المُستوى وبنفس طريقة الحساب، يكون الخرج مصفوفة بحجم 62×100.

طبقة التجميع (Max pooling):

تُستخدم لخفض تعقيد خرج طبقة التلافيف ومنع الـ overfitting للسمات من خلال مسح مصفوفة السمات بنافذة ذات حجم 3 واستبدال كل منطقة بالقيمة الكُبرى فيها. وبذلك تقل القيم بنسبة 66%، ويكون الخرج مصفوفة بحجم 20×100.

طبقتي التلافيف (1D CNN) الثالثة والرابعة: الخرج عنهما مصفوفة بحجم 2×160.

طبقة التجميع (Average pooling): الخرج هو شعاع بطول 1×160.

طبقة (Dropout):  مهمتها إقصاء 50% من العصبونات عشوائيًا؛ أي إسناد أوزان صفرية لها، وبهذا تصبح الشبكة أقل حساسية للتغيرات الصغيرة جدًا في البيانات، وبالتالي تقليل احتمالية حدوث overfitting. حجم الخرج هو ذاته 1×160.

طبقة الارتباط الكامل مع تابع تفعيل softmax: تحوي هذه الطبقة 6 عصبونات بعدد التصنيفات في مسألتنا (هرولة، جلوس، مشي، وقوف، صعود درج، نزول درج)، والخرج شعاع طوله 1×6 عناصره هي احتمال كل تصنيف، يجب أن يكون مجموعها يساوي 1.

التدريب والاختبار:

يراقب الاستدعاءEarlyStopping  دقةَ التدريب؛ إذ يتوقف التدريب في حال فَشَل تحسين الأداء (لم تتحسن الدقة) خلال عصري تدريب مُتعاقبين.

دالة الخطأ هي (Categorical Cross-Entropy Loss)، وخوارزمية التدريب/ تعديل الأوزان هي (adam)، وحجم دفعة البيانات (400)، وعدد عصور التدريب (50).

. . .

لن ندخل في تفاصيل كود تقييم أداء الشبكتين في المثالين السابقين أو مُناقشتها، فهذه ليس غايتنا هُنا رُبما نخصص لذلك مقالاً كاملاً. بَيْد أنه من الضروري استيضاح بعض المفاهيم الضرورية لفهم تقييم الشبكة العصبونية بشكل عام:

القيم التنبُئِية الإيجابية والسلبية:

(True Positive: TP): القيمة التنبئية الإيجابية الصحيحة؛ عدد التنبؤات التي نجح فيها النموذج في تعرف الأنماط الصحيحة، مثلاً الشخص مريض والنموذج تنبأ بذلك.

(False Positive): القيمة التنبئية الإيجابية الخاطئة؛ عدد التنبؤات التي فشل فيها النموذج في تعرف الأنماط الصحيحة، مثلاً الشخص مريض والنموذج تنبأ بأنه غير مريض.

(True Negative): القيمة التنبئية السلبية الصحيحة؛ عدد التنبؤات التي نجح فيها النموذج في تعرف الأنماط الخاطئة، مثلاً المريض غير مريض والنموذج تنبأ بذلك.

(False Negative): القيمة التنبئية السلبية الخاطئة؛ عدد التنبؤات التي فشل فيها النموذج في تعرف الأنماط الخاطئة، مثلاً المريض غير مريض والنموذج تنبأ بأنه مريض.

بارامترات تقييم أداء النموذج:

  • الدقة (Accuracy)؛ النسبة بين القيمة التنبئية الإيجابية الصحيحة والقيمة التنبئية كلها. إذا كنت تعتقد أن قيمة الدقة كلما كانت مُرتفعة كان النموذج أفضل، فتمهل! الدقة مقياس جيد فقط عندما تكون القيم التنبئية السلبية والإيجابية الخاطئة مُتشابهة. لذا يجب النظر إلى الاختبارات الأخرى للتقييم.

Accuracy= ((TP + TN) / (TP + TN + FP + FN))

  • الإحكام (Precision)؛ النسبة بين القيمة التنبئية الإيجابية الصحيحة والقيمة التنبئية الإيجابية كلها؛ أي مثلاً: من بين كل الأشخاص الذين شُخصوا على أنهم مرضى، كم عدد المرضى فعليًا؟… ترتبط القيمة المُرتفعة بالقيمة التنبئية الإيجابية الخاطئة المُنخفضة.

Precision= (TP / (TP + FP))

  • الحساسية (Recall/ Senitivity)؛ النسبة بين القيمة التنبئية الإيجابية الصحيحة والقيمة التنبئية الصحيحة كلها: الإيجابية والسلبية. السؤال الذي تُجيب عنه الحساسية هو: من بين كل الأشخاص المرضى فعليًا، كم عدد التنبؤات الصحيحة؟

Recall= (TP / (TP + FN))

  •  (F1- score)؛ المتوسّط الحسابي الموزون لقيمة إحكام النتائج والحساسية؛ أي يأخذ بعين الاعتبار كل من القيمتين التنبئية الإيجابية والسلبية الخاطئة، وعلى عكس الدقة؛ إذا كانت هاتين القيمتين مُختلفتين من الأفضل النظر إلى الإحكام والحساسية.

F1- score= (2 x recall x precision / (recall + precision))

. . .

يُمكن اعتبار الشبكاتِ العصبونية خوارزميةً عشوائية؛ أي يُمكن لنفس الخوارزمية مع نفس البيانات أن تُدرّب نماذج مُختلفة من الشبكات، ولا يخدعك ذلك، هذه ليست ثغرة، بل ميّزة.

المصادر:
(1) && (2) && (3) && (4) && (5) && (6) && (7)
(8): Deep Learning Specialization by Andrew Ng

  • إعداد: نور عبدو.

بواسطة نور عبدو

10 تعليق

ضع تعليقك
  1. من أفضل ما قرأت بالعربي في هذا المجال ، أعتقد أنه مقال ممتاز للمبتدئين ولن يجدوا أفضل منه بالويب العربي .

  2. من افضل ما قرأت والله .

    بالنسبه لي كمبتدأ في المجال لم اجد موقع بنفس الشرح

  3. اتمنى جمع هذه المعلومات القيمة وكل ما يخص الشبكات العصبية في كتاب ليكون مرجع عربي فلم أجد كتاب عربي واحد يتناول هذا الموضوع بالتفصيل

  4. احسن مقال تفصيلي درسته بارك الله فيكم نتمني المزيد مستقبلا ان شاء الله

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

هل توفر نظائر الكالسيوم أدلة على كيفية تقسيم الموارد بين المفترسات في العصر الطباشيري؟

كيف يفهم الإنسان الكفيف الألوان؟