خلال تدريبك اي شبكة عصبية سوا
CNN
او غيرها من الشبكات ستواجه احد المصطلحات التالية:
epoch, iteration and batch
لكن ما الفرق بين كل واحد فيهم؟ في هذه المقالة سنتعرف على الفروقات بين كل واحدة فيهم مع ضرب امثلة لتعرف كم عدد ال batches الذي تحتاجه بالنسبة لبياناتك. تعال نشوف تعريف ال epoch أول شي ونحاول نفهمه مع بعض.
نقول انه عندنا 1 epoch اذا مررنا كامل بيانتنا خلال الشبكة العصبية.
اسمح لي افصل التعريف معاك وحدة وحدة. أول سؤال
ماذا اعني بتمرير كامل البيانات خلال الشبكة؟
شرحت في مقالات كثيرة سابقة انه حتى ندرب أي شبكة عصبية سوا MLP او CNN او غيرها من الشبكات انه نحتاج ٣ خطوات رئيسية لتدريب الشبكة وهي كالاتي:
Forward pass
Calculate error or loss
Backward pass
يعني اذا كان عندي واحد
epoch معناه انه احنا نفذنا الخطوات الثلاث اعلاه لبيانات التدريب كاملة. بمعنى اخر، اذا دربت البيانات كاملة كلها في مرة وحدة بتمريرها للشبكة. في هالحالة يعتبر عندنا واحد epoch.
حوضحها اكثر نشوف الصورة الي رسمتها مع بعض
< figcaption>
One Epoch: صورة رقم ١
احنا نعرف انه الهدف من تدريب اي شبكة عصبية ان نجعل الشبكة او المودل يحاكي بيانات التدريب ليتعلم منها. صحيح؟ وبالتالي كل بيانات التدريب اذا ادخلناها للشبكة للتدريب يعتبر عندنا واحد epcoh كما نرى في الصورة رقم ١. لكن في التطبيق العملي، الموضوع مختلف. لماذا؟
هل نستطيع تمرير بيانات التدريب للشبكة كلها في واحد epcoh؟
الجواب لا لان جهازك ما حيقدر يعالج كل هالبيانات مرة وحدة فحتحتاج جهاز ذو مواصفات عالية و RAM عالي حتى ترسل كل البيانات مرة وحدة للشبكة وهذه الطريقة لا ينصح فيها حتى لو تمتلك جهاز ذو مواصفات عالية. والحل؟
الحل ان نمرر بيانات التدريب للشبكة او للمودل على شكل batches.
يعني بدال ما نرسل البيانات كلها للمودل لتدريبه، فاحنا نرسل جزء من البيانات في كل مرة. وهذا يسمى batch. اجيبها لك بطريقة اخرى بيانات التدريب كاملة ممكن تقسمها على اكثر من batch الى ما ندرب كامل البيانات. فاعتبر ال batch كحزمة من البيانات. وحتى تمرر البيانات كاملة فانت تحتاج مجموعة من الحزم.
ملاحضة: الحزمة او batch له حجم. بالتالي انت تقدر تتحكم تبغى تقسم بياناتك على كم حزمة batch.
فمجرد تحديدك لحجم الحزمة batch. فاحنا نقدر نعرف ال iteration او العدد الذي نحتاجه لنكمل واحد epcoh لكل ال batches.
ناخذ مثال حتى توضح الصورة. افرض انه عندي بيانات تحتوي على صور مختلفة وعدد بيانات التدريب كانت ٦٠٠٠٠. فالسؤال كم عدد ال iterations التي نحتاجها لتدريب واحد epoch اذا قلت لك ان حجم الحزمة batch size هو ١٠٠؟
الحل نحن نحتاج ٦٠٠ لفة iteration لنمرر كامل بيانات التدريب للشبكة. وفي كل واحد iteration احنا نستخدم حزمة حجمها ١٠٠ مثل ما حددنا. كيف حسبتها؟ اقسم ٦٠٠٠٠/١٠٠ وحيكون الناتج ٦٠٠. وصلت الفكرة؟ في التطبيق العملي هذه تكون على شكل for loop وحنشوفها في التطبيقات العملية لاحقا.
ممكن جاء في بالك سؤال وهو لماذا في التطبيقات العملية احنا نحتاج اكثر من واحد epcoh ولا نكتفي بالواحد؟
بشكل مختصر اذا تتذكر في مقالة gradient decent و مقالة ال learning rate انا ذكرت انه احنا نحاول نوصل للقاع. بمعنى نحاول نوجد الاوزان weights المناسبة التي تقلل لنا نسبة الخطأ في cost function. بالتالي احنا نحتاج اكثر من واحد epoch لان ما نضمن فيه واحد epcoh انه حنوصل للاوزان المناسبة التي تقلل نسبة الخطا بين label الحقيقي الموجود في البيانات وبين ال label المتوقع من قبل المودل الخاص فيك.
لمتابعة الفديو الخاص بالمقالة، الرجاء الضغط
هنا
ان اصبت فمن الله وان اخطات فمن نفسي ..
لا تنسى مشاركة المقالة اذا أعجبتك ..
اخوكم رائد الحربي
ولاي ملاحضات او استفسارات يرجى مراسلتي على تويتر @raedalharbi14 أو كتابة التعليق هنا