في المقالة هذه حشرح ان شاء الله الشكبات العصبية CNN بشكل مبسط وحشرح أهم الفروقات بين CNN و fully connected network أو ما يعرف ب multilayer perceptron.
قبل أبدا الشرح، أريد توضيح نقطة مهمة، اقدر اشرح لك CNN كاملة في مقالتين وايضا ارفق كود يحتوي تطبيق عملي وخلاص وأقولك قدرنا نسوي شبكة CNN. صح؟ لكن انا هدفي نفهم ونفصل الجانب النظري ومن ثم نطبق بشكل عملي على Pytorch. بحيث لو قلت لك ليه مدخل الطبقة مثلا كان ٦٤ وليس ٣٢؟ تقدر تجاوبني لان فاهم كيف العملية تمشي وفاهم التفاصيل الرياضية. وبناء عليه تقدر تطبق وتبني أي مودل انت تبغاه بدون أي مشكلة. في هذه المقالة حجيب ان شاء الله على الاسئلة التالية:
اي صورة تتكون من مجموعة من pixels
ان اصبت فمن الله وان اخطات فمن نفسي .. لا تنسى مشاركة المقالة اذا أعجبتك .. اخوكم رائد الحربي
ولاي ملاحضات او استفسارات يرجى مراسلتي على تويتر @raedalharbi14 أو كتابة التعليق هنا
ما هي convolutional neural network أو ما يعرف ب CNN ؟
ما الفرق بين CNN وبين fully connected network؟
شبكات CNN العصبية تتكون من مجموعة متصلة من الوحدات العصبية (neurons) التي تكون منظمة داخل مجموعة من الطبقات (layers) وهي كالاتي:
أ. طبقة المدخلات (input layer): هذه الطبقة هيا المسؤولة عن استقبال المدخلات (initial data) ومن ثم تهيئتها للمعالجة في الطبقات العصبية التي تليها.
ب. الطبقة المخفية (hidden layer): هذه الطبقة تتواجد بين طبقة المدخلات (input layer) وبين طبقة المخرجات (output layer) حيث الوحدات العصبية (neuron units) تقوم بحساب مجموع الاوزان للمدخلات ومن ثم تهيئها للطبقة التي تليها عن طريق دوال تنشيطية (activation functions).
ت. طبقة المخرجات (output layer): وهيا اخر طبقة في الشبكة وهي مسؤولة عن إعطاء النتائج.
تلاحظ ان مكونات الشبكة نفس multilayer perceptron لكن الفرق ان CNN تدعم convolutional operations وهذه توجد في طبقات اضافية وتسمى convolutional layer.
شرحت في المقالة الماضية تفاصيل شبكة Multilayer perceptron وفصلنا عن forward pass, loss function and backward pass. انصحك ترجع الى المقالة من هنا وبعدين اتكمل اذا كان عندك لبس في فهم المواضيع التي فصلنا فيها. الهيكل العام ل Multilayer perceptron مثل ما رأيناه قبل هو كالاتي:
حتى نفهم الفروقات بين Multilayer perceptron و CNN، تعال نرى الهيكل العام ل CNN.
نلاحظ ان Multilayer perceptron و CNN ياخذون مجموعة من المدخلات في input layer. ما وجدنا اي فرق للان. لكن لاحظ ان في شبكة CNN عندي مجموعة طبقات layers تحت مسمى CONV نسبة الى convolutional layer. وبعدها عندي طبقة اسمها FC نسبة الى fully connected layer. طبقة FC هيا عبارة عن Multilayer perceptron. يعني ال fully connected layer هيا عبارة عن طبقة تحتوي مجموعة من الوحدات العصبية المتصلة في بعضها البعض. اجيبها لك بطريقة اخرى، الفرق بين CNN و Multilayer perceptron ان ال CNN تحتوي على convolutional layers بعكس ال Multilayer perceptron. وضحت الان؟
الحل انه نستخدم convolutional layer. ال convolutional operations في convolutional layer تدعم مشاركة الاوزان weights بين الوحدات العصبية. يعني عالجنا او الشبكة تعرفت على وزن معين، هالوزن ما يحتاج نحسبه مرة ثانية لان حنسوي العملية مرة وحدة. بالتالي حننقص كمية الاوزان او ما يعرف parameters.
السؤال المهم والذي هو هدف المقالة هذه. ما فائدة convolutional layers? وايش الميزة الموجودة في هذه الطبقة وغير متوفرة في fully connected network او Multilayer perceptron?
في شبكة Multilayer perceptron يجب ان تكون كل وحدة عصبية unit او كل مدخل متصل بجميع الوحدات العصبية في الطبقة التي تليه. حعطيك مثال حتى تشوف بنفسك. انظر للصورة رقم ١ ولاحظ عندي في طبقة المدخلات، يوجد عندي مدخل input للشبكة وهي عبارة عن صورة تحتوي الرقم ٥. تمام؟ لاحظ ان الوحدة unit متصل بجميع الوحدات العصبية افي الطبقة التي تليها وهيا ال hidden layer. هذا موجود في جميع الوحدات. يعني fully connected network هي عبارة عن شبكة عصبية جميع وحداتها متصلة مع بعضها البعض. هذه تعتبر احدى عيوب Multilayer perceptron لانه حنحتاج كمية اوزان عالية. يعني parameters حيكون كثير. هذا حيسبب انه كل ما صممنا شبكة اكبر كل ما احتجنا كمية اكبر من parameters او ما يعرف بالاوزان weights. وهذه مشكلة في انه حيتطلب منا اجهزة ذات مواصفات عالية حتى نتحمل كمية الاوزان العالية ونعالجها وبالتالي حياخذ وقت كثير في التدريب. ممكن يجي في بالك انا جربت ادرب شبكة على جهازي العادي وما كان عندي اي مشكلة؟ صحيح كلامك لكن فكر فيها على مشاكل حقيقة موجودة و models تطبق على ارض الواقع وحيكون الموضوع مختلفة. طيب والحل؟الحل انه نستخدم convolutional layer. ال convolutional operations في convolutional layer تدعم مشاركة الاوزان weights بين الوحدات العصبية. يعني عالجنا او الشبكة تعرفت على وزن معين، هالوزن ما يحتاج نحسبه مرة ثانية لان حنسوي العملية مرة وحدة. بالتالي حننقص كمية الاوزان او ما يعرف parameters.
نعرف ان الصورة عادة تتكون من مجموعة من pixels مثل ما نشوف في الصورة اعلاه. مشاركة الاوزان في convolutional layer يسمح لنا من استغلال ترابط pixels مع بعضها البعض. لان مثل ما نرى كل pixel يوجد بجانبه pxiel اخر وهو جاره وهكذا. فال convolutional operations in convolutional layer يسمح لنا بالمحافظة على اجزاء الصورة مع بعضها البعض في مختلف الطبقات. يعني تخيل انه وجدنا الوزن الخاص بالعين للرجل في الصورة اعلاه. والعين موجودة في اكثر من pixel. فاحنا مجرد ما وجدنا الوزن weight لل pixel الاول، ما يحتاج نحسب ال pixel الثاني لان حنشارك الاوزان وبالتالي كل البكسلين مع بعضهم البعض يكونون لي شكل العين. نلاحظ بطريقة هذه احنا نقدر نستخرج مختلف الاشكال بشكل افضل.
حنشوف الان مكونات شبكة CNN بشكل عام وفي المقالة القادمة حنفصل كل طبقة على حدة. الان اي شكبة CNN تحتوي على الطبقات التالية:
لمتابعة الفديو الخاص بالمقالة، الرجاء الضغط
هنا
حنشوف الان مكونات شبكة CNN بشكل عام وفي المقالة القادمة حنفصل كل طبقة على حدة. الان اي شكبة CNN تحتوي على الطبقات التالية:
- Input layer
- convolutional (Conv) layer
- Pooling layer
- Fully connected(FC) layer
- Softmax/logistic layer
- Output layer
ان اصبت فمن الله وان اخطات فمن نفسي .. لا تنسى مشاركة المقالة اذا أعجبتك .. اخوكم رائد الحربي
ولاي ملاحضات او استفسارات يرجى مراسلتي على تويتر @raedalharbi14 أو كتابة التعليق هنا
احتاج الموضوع عبارة عن pdf