شرح الرياضيات المستخدمة فى ال Convolutional Neural Networks

1٬254

سمحت لنا الرؤية الذكية بتحقيق أشياء في مجالات كالسيارات ذاتية القيادة، والرعاية الصحية، كانت حتى وقت قريب تعتبر مستحيلة.

اليوم، أحلام كالسيارات ذاتية القيادة كليا، أو محلات البقالة الآلية، صارت قريبة جدا منا. في الحقيقة، نحن نستخدم الرؤية الذكية بشكل يومي، فمثلا عندما تقوم بفتح هاتفك عن طريق تصوير وجهك. أو عندما يقوم الفيس بوك بالتعرف على وجه صديقك في الصورة وعمل Tag له تلقائيا.

وتعتبر ال Convolutional Neural Networks من أهم مقومات هذا التقدم الرهيب الذي نلمسه بأنفسنا. لهذا ربما ترغب بتعزيز فهمك لكيفية عمل CNN، عن طريق أخذ جولة في الرياضيات المستخدمة فيها.

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

هذا النهج عمل بشكل جيد عندما كنا نقوم بحل مشاكل التصنيف التي لها عدد محدد من الخصائص Features. على سبيل المثال بإمكاننا توقع موضع لعيب كرة القدم بناء على ما لدينا من إحصاءات عن معدل تسجيله للأهداف، ولكن يصبح الأمر أكثر صعوبة عند التعامل مع الصور. بالتأكيد بإمكاننا التعامل مع شدة إضاءة كل pixel على أنها خاصية منفصلة، وإدخالها كمدخل للشبكة العصبية؛ ولكن لسوء الحظ لجعلها تعمل على صورة عادية ملتقطة بهاتف ذكي، فعليها أن تحتوي على عشرات وربما ملايين من الخلايا العصبية. على صعيد آخر بإمكاننا تقليل المقياس الذي تتواجد فيه شدة إضاءة الpixel ولكن هذا بالتأكيد سيجعلنا نخسر معلومات مهمة عن الصورة خلال هذه العملية، وفي الحال ستكتشف أن هذا النهج غير مفيد على الإطلاق. 

ما نحتاجه هو طريقة جديدة نستخدم فيها أكبر كمية ممكنة من البيانات وفي نفس الوقت نقلل من الحسابات والعوامل المطلوب حسابها parameters، وهنا تحديدا بدأنا نفكر في الCNN.

هيكل بيانات الصور الرقمية Digital photo data structure

دعنا نبدأ أولا بشرح كيفية تخزين الصور الرقمية. معظمنا بالفعل يعرف أنها عبارة عن مصفوفة ضخمة من الأرقام، كل رقم منهم يمثل شدة إضاءة كل pixel. في نموذج ال (RGB (Red,Green,Blue. تتكون الصورة الملونة في الواقع من ثلاثة مصفوفات، كل مصفوفة تعبر أرقامها عن مدى سطوع لون معين من هذه الألوان _ملحوظة سريعة كل لون يسمى قناة أو channel_.

في الصور الأبيض والأسود، لدينا فقط مصفوفة واحدة كل رقم من تلك المصفوفة يكون بين ال0 و255. يمثل المدى بين الرقمين حل وسط بين كفاءة تخزين معلومات عن الصورة _256 تتناسب تماما مع ال 1 Byte _، وحساسية العين البشرية للرؤية(حيث تستطيع العين البشرية التمييز بين عدد محدود فقط من درجات نفس اللون).

Convolution

Kernal Convolution لا يقتصر استخدامه فقط على CNN، بل أيضا هو العنصر الرئيسي في الكثير من خوارزميات الرؤية الذكية بشكل عام. فهي عملية نأخذ فيها مصفوفة صغيرة من الأرقام نسميها kernel أو filter، ونمررها على الصورة التي نريدها ونبدل القيم في الصورة بالقيم الناتجة من الfilter. ويتم احتساب القيم وفقا للمعادلة التالية، التي تمثل فيها الصورة المدخلة f وال filter أو Kernel المستخدم h. أما مكان الpixel من صفوف فيمثل ب m والأعمدة تمثل ب n.

الصورة التالية ستعطيك رؤية أفضل لكيفية وضع الFilter.

بعد وضع الfilter على كل pixel نأخذ كل قيمة ناتجة منه ونقوم بضربها في القيمة المناظرة لها في الصورة، في النهاية نقوم بتلخيص كل شيء ووضع النتيجة في المكان المناسب لها في الoutput feature map أو خريطة خصائص الخرج، في الصورة أعلاه نرى ما يحدث على مقياس المعالجة processing ولكنك ستلمس بنفسك أهمية الأمر عندما ترى النتيجة النهائية للتطبيق على صورة فعلية.

Valid and Same Convolution

كما رأينا في الصورة من قبل عندما تطبق filter 3*3 على صورة 6*6 فتكون النتيجة هي 4*4 feature map، يحدث هذا لأنه هناك فقط 16 مكان يمكننا تطبيق الfilter، عليهم  وبما أن الصورة تنكمش في كل مرة نقوم فيها بعمل convolution؛ فهناك عدد محدد من المرات التي يمكنك فيها عمل convolution قبل أن تختفي الصورة بشكل كامل، وأيضا، إذا نظرت لكيفية تحرك الkernel على الصورة سترى أن تأثيره على الpixels التي على الحواف أقل بكثير من تأثيره على الpixels في المنتصف من الصورة، هذا يعني أننا نخسر بعض المعلومات المتواجدة في الصورة

في هذه الصورة بإمكانك رؤية كيفية تأثير موقع الpixel على تأثرها بال Kernel

لحل هذه المشاكل بإمكاننا إحاطة أو تضميد الpixels بحواف إضافية، على سبيل المثال باستخدام 1px padding يكون حجم الصورة قد زاد إلى 8*8 pixel وبالتالي يكون الخرج من الConvolution ب filter 3*3 هو feature map 6*6، في العادة وأثناء تنفيذ هذه العملية نقوم بملء هذه الضمادات أو الحواف بالأصفار لتسهيل الحسابات.

واعتمادا على إذا كنت تستخدم padding أو لا، فبإمكانك اعتبار أننا نتعامل مع نوعين من الconvolution 

-valid : تعني أننا نستخدم الصورة الأصلية.

-same : تعني أننا نستخدم حواف أو ضمادات أو padding حول الصورة الأصلية حتى نجعل الصورة الداخلة والخارجة بنفس الحجم.

في الحالة الثانية يتم تطبيق الpadding طبقا للمعادلة التالية : 

حيث الp هو الpadding والf هو بعد الkernel أو filter ويكون غالبا فردي.

Strided Convolution

في المثال السابق، كنا نقوم دائما بتحويل pixel واحدة في كل kernel. ومع ذلك بإمكاننا معاملة طول الخطوة كواحد من عوامل convolution layer. الصورة السابقة توضح ماهية الconvolution عندما نقول باستخدام خطوة أكبر. عندما نقوم بتصميم CNN، بإمكاننا اختيار زيادة الخطوة إذا أردنا تقليل تداخل الحقول المستقبلة receptive fields، أو إذا أردنا جعل الأبعاد المكانية أقل في الfeature map.

حيث تكون أبعاد المصفوفة الناتجة_مع الأخذ في الاعتبار الحواف وطول الخطوة المستخدم_ يمكن حسابها بواسطة المعادلة التالية:

النقل للبعد الثالث The transition to the third dimension

استخدام الconvolution على حجم هو مفهوم غاية في الأهمية، وهو ما سيسمح لنا ليس فقط بالعمل على الصور الملونة، بل أيضا بتطبيق أكثر من filter على طبقة واحدة one layer. القاعدة الأولى تقول أن الfiler الذي ستقوم باستخدامه يجب أن يمتلك نفس عدد القنوات channels التي تمتلكها الصورة. بشكل رئيسي تتم عملية المعالجة بشكل مشابه لما تم في المثال في الصورة رقم 3، ولكن هذه المرة نقوم بضرب الأزواج المتناظرة في فضاء ثلاثي البعد. أما إذا أردنا استخدام أكثر من filter على صورة واحدة، نقوم بتنفيذ الConvolution لكل منهم على حدى، وتكويم النتائج واحدة فوق الأخرى ثم دمجها في النهاية. أبعاد الtensor الناتج تنطبق عليها هذه المعادلة 

حيث تمثل الn : حجم الصورة.

f : حجم الfilter.

nc : عدد القنوات channels في الصورة. 

P: الpadding المستخدمة.

s : الخطوة المستخدمة.

nf : عدد الfilters المستخدمة.

طبقات الConvolution

الآن، حان الوقت لاستخدام كل ما تعلمناه اليوم وبناء طبقة واحدة من الCNN، المنهجية المستخدمة مقاربة جدا لتلك المستخدمة في الشبكات العصبية عالية الكثافة، الاختلاف الوحيد أنه بدلا من استخدام ضرب مصفوفات بسيط، سنستخدم الConvolution هذه المرة. يتكون الForward propagation من خطوتين، الأولى هي حساب القيمة الوسيطة z، والتي يتم الحصول عليها كنتيجة لConvolution الحادث على البيانات المدخلة من الطبقة Layer السابقة مع W tensor (يحتوي على الfilters )، ثم إضافة الbias. الخطوة الثانية هي تطبيق الNon linear activation function على القيمة الوسيطة لدينا. (يشار للتفعيل بالقيمة g) 

وتصف هذه المعادلات ما يحدث بالضبط 

بالمناسبة ، في الرسم التوضيحي أدناه ، يمكنك رؤية تصور صغير ، يصف أبعاد ال Tensors المستخدمة في المعادلة.

قطع الاتصالات وتشارك المعاملات Connections Cutting and Parameters Sharing

عرفنا فيم سبق عدم فعالية الشبكات العصبية العادية في العمل مع الصور، بسبب كبر عدد المعاملات التي تحتاج الشبكة لتعلمها، وبما أننا قد استوعبنا ما هو الConvolution بإمكاننا رؤية كيف يسمح لنا بتحسين العمليات الحسابية. في الصورة أدناه تم تصور الConvolution بطريقة مختلفة قليلا، الخلايا المرقمة من 1-9 تمثل طبقة الإدخال التي تستقبل شدة الإضاءة للpixels. في حين تمثل الوحدات من AلD عناصر الfeature map التي تم حسابها، أما I-IV هم القيم المحسوبة من الkernel_أولئك الذين ينبغي تعلمهم_.

الآن دعنا نركز على الattributes الأكثر أهمية للConvolution layers، في البداية أظن أنه بإمكانك ملاحظة أنه ليست كل الخلايا مرتبطة بكل الخلايا المتواجدة في الطبقات المجاورة لها، على سبيل المثال unit 1 تؤثر فقط على قيمة الA. ثانيا، نستطيع ملاحظة أن الخلايا تتشارك في الوزن. كلا هاتين الخاصيتين تعنيان بالمجمل أن لدينا معاملات أقل لتعلمها. وربما من المفيد هنا القول أن كل قيمة من الfilter تؤثر على كل عنصر خارج في Feature map.

Convolutional Layer Backpropagation

أي شخص حاول كتابة كود للCNN بنفسه، يعرف أن Forward propagation له نصيب أقل من النصف في العملية وعندما نأتي للBackwords propagation هنا يكمن المرح، في هذه الأيام لا نحتاج لإزعاج أنفسنا بعمله لأن ال Deep learning frame works يفعله من أجلنا. ولكن الأمر يستحق أن تفهمه على أي حال. تماما كالشبكات العصبية عالية الكثافة العادية، هدفنا هو حساب المشتقات واستخدامهم لاحقا لتحديث قيم المعاملات في عملية تعرف باسم الGradient descent.

في حساباتنا سوف نستخدم قاعدة السلسلة، ما نريده هو تقييم تأثير التغير في المعاملات على feature map الناتجة، وبعد ذلك على النتيجة النهائية.

ولجعل الأمور أسهل سنستخدم الاختصارات التالية : 

مهمتنا هي حساب [dW[l  و [db[l وهي المشتقات المرتبطة بمعاملات الطبقة layer الحالية، بالإضافة لقيمة [dA[ l -1، والتي سيتم تمريرها للطبقة السابقة، كما هو موضح بالشكل السابق فإننا نستقبل [dA[l كمدخل، بالطبع ، أبعاد التنسورات dW و W ، db و b وكذلك dA و A على التوالي هي نفسها. الخطوة الأولى هي الحصول على القيمة المتوسطة [dZ[l من خلال تطبيق اشتقاق activation function  على Tensor الإدخال لدينا. وفقًا لقاعدة السلسلة ، سيتم استخدام نتيجة هذه العملية لاحقًا.

الآن نحتاج للتعامل مع الbackword propagation للConvolution نفسه، ولتحقيق هذا الهدف سنستخدم ما يسمى بال  full convolution matrix والموضحة في الصورة أدناه _لاحظ أنه سيتم هنا تطبيق filter تم لفه بمقدار 180 درجة_

هذه العملية يمكن وصفها بالمعادلة التالية :

حيث  w هي filter

[dZ[m,n هو مقياس ينتمي إلى الpartial derivative من الطبقة السابقة

Pooling Layers

إلى جانب طبقات الConvolution،  تستخدم الCNN غالبا ما يسمى بطبقات التجميع حيث تستخدم بشكل رئيسي لتقليل حجم الtensor وتسريع الحسابات. هذه الطبقة بسيطة، علينا أولا تقسيم الصورة لعدة مناطق مختلفة ومن ثم عمل مجموعة من العمليات على كل منطقة، على سبيل المثال في الMax pool layer نختار القيمة العليا من كل منطقة ونضعها في المكان المقابل في الخرج. وكما هو الحال في الconvolution layer لدينا اثنين من المعاملات حجم الفلتر والخطوة المطلوبة، وأخيرا وليس آخرا إذا كنت تقوم بعمل تجميع لصورة متعددة القنوات channels ، يتم التجميع لكل قناة على حدى منفصلة.

تجميع طبقات الBack propagation

في هذه المقالة سنناقش فقط  max pooling backpropagation ولكن القواعد التي سنتعلمها _ مع تعديلات بسيطة _ يمكن تطبيقها على جميع أنواع تجمبيع الطبقات pooling layer. في هذا النوع من الlayers لا يوجد معاملات لوضع قيمته،ا وتقتصر مهمتنا فقط على توزيع الخرج بشكل مناسب، كما تتذكر من الForward propagation for max pooling كنا نقوم باختيار القيمة العليا من كل منطقة ونقلها للطبقة التي تليها، ومن الواضح أنه أثناء Back propagation لا يجب أن يؤثر الgradient على عناصر المصفوفة التي لم يتم شملها في المسار الforward. 

أثناء التطبيق يمكن عمل هذا بصنع mask يقوم بتذكر مواضع القيم التي تم استخدامها في المرحلة الأولى، والتي يمكننا استخدامها لاحقا لنقل الgradients.

إذا أعجبك المقال شاركه مع أصدقائك …

مصدر مصدر1
تعليقات