تقييس الدُّفعَة في التّعلم العميق – Batch Normalization in Deep Learning

يُعتبر تجنّب الملاءمة الزّائدة overfitting أحد أكثر المشاكل شيوعًا لمحترفي التّعلّم العميق، هل صادفت موقفًا كان أداء نموذجك جيّدًا للغاية في بيانات التّدريب ولكنّه غير قادر على التنبّؤ ببيانات الاختبار بدقّة، السّبب غالبًا هو أنّ النّموذج الخاصّ بك له ملاءمة زائدة و أحد الحلول لمثل هذه المشكلة هو التّنظيم regularization. تساعد تقنيّات التّنظيم على تحسين النّموذج وتسمح له بالتّقارب للنّموذج الأمثليّ بشكل أسرع، سوف نستكشف في مقالنا هذا إحدى هذه التّقنيات بالتّفصيل وهي تقييس الدُّفعَة Batch Normalization.

التدّقيق العلمي: د.م. حسن قزّاز، م. محمّد سرميني
التدّقيق اللّغوي: هبة الله فلّاحةِ

المقدمة

يُعتبر تجنّب الملاءمة الزّائدة overfitting أحد أكثر المشاكل شيوعًا لمحترفي التّعلّم العميق، هل صادفت موقفًا كان أداء نموذجك جيّدًا للغاية في بيانات التّدريب ولكنّه غير قادر على التنبّؤ ببيانات الاختبار بدقّة، السّبب هو أنّ النّموذج الخاصّ بك غالبًا يُعاني من الملاءمة الزّائدة overfitting وأحد الحلول لمثل هذه المشكلة هو التّنظيم regularization.

تساعد تقنيّات التّنظيم على تحسين النّموذج وتسمح له بالتّقارب للنّموذج الأمثليّ بشكل أسرع، يُوجد العديد من أدوات التّنظيم نذكر منها: 

  1. التّوقف مبكّرًا Early Stopping.
  2. تعطيل عمل العصبونات Dropout.
  3. تقنيّات تهيئة الوزن Weight Initialization. 
  4. تقييس الدُّفعَة Batch Normalization.

يساعد التّنظيم في منع الملاءمة الزّائدة في النّموذج و زيادة كفاءة عمليّة التّعلّم.

هنا في هذه المقالة سوف نستكشف إحدى هذه التّقنيات بالتّفصيل وهي تقييس الدُّفعَة Batch Normalization.

ما هو تقييس الدّفعة؟

تقييس الدّفعة (BN) هو أسلوب يستخدمه العديد من ممارسي التّعلّم العميق، فإذا سبق لك استخدام شَبَكَات الطَّيّ العُصبُونِيَّة مثل شَبَكَة إكسسيبشن (Xception) أو شَبَكَة الرَّواسِب 50 (ResNet50) أو شَبَكَة جوجل انسبشن الإصدار الثّالث (Inception V3)، فأنت بذلك قد استخدمت التّقييس.

تشرح هذه المقالة الحدس الأساسيّ وراء استخدام تقنيّة تقييس الدُّفعَة BN، وبالنّسبة لأولئك الذين هم على دراية بهذه التقنيّة، فإنّ هذه المقالة تتعمّق في خوارزميّة تقييس الدُّفعَة وتشرح مكوّناتها الرئيسيّة.

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

نعود الآن إلى تقييس الدُّفعات؛ تقييس الدّفعات هو أسلوب قدّمه سيرجي إيفي وكريستيان زيجيدي (Sergey Ioffe and Christian Szegedy) في عام 2015 [1]، حيث يعمل على تقييس المدخلات لكلّ طبقة من طبقات الشّبكة العصبونيّة، ممّا يقلّل إزاحة المتغيّر الدّاخليّ (Internal covariate shift) في كلّ دورة تدريب epoch من بيانات التدريب، يتمّ تحديث الأوزان ممّا يعني أنّ مُدخلات الطّبقة في الشّبكة العصبونيّة تختلف قليلًا في كلّ مرّة، ومع انتقال هذه التّغييرات إلى الطّبقة العصبونيّة التالية، فإنّها تخلق حالة يكون فيها توزيع المدخلات لكلّ خلية عصبيّة مختلفة في كلّ دورة تدريب، والذي سيتمّ شرحه مع مثال في نهاية المقال.

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

ما هو سبب إضافة “الدّفعة” في مصطلح تقييس الدّفعة Batch Normalization؟ 

يعود سبب وجود كلمة “الدّفعة” في مصطلح تقييس الدّفعة Batch Normalization إلى أنّ الشّبكات العصبونيّة يتمّ تدريبها عادةً بمجموعة مُجمّعة من البيانات في وقت واحد، ويشار إلى هذه المجموعة أو مجموعة البيانات على أنّها دُفعة Batch، حيث تحدث عمليّة التّقييس  على مجموعة كاملة من قيم الإدخال بدلًا من قيمة إدخال واحدة.

مثال تطبيقيّ عن تقييس الدّفعة BN 

سوف نقوم من خلال هذا المثال بتوضيح مفهوم تقييس الدّفعة، لدينا الشّبكة العصبونيّة العميقة الموضّحة في الشّكل(1):

الشّكل(1): شبكة عصبونيّة عميقة

حيث L= عدد طبقات الشّبكة.
الانحياز  = 0
تابع التّفعيل = التّابع الأسيّ الجيبيّ (سيغمويد)

في البداية تكون مداخل الشّبكة العصبونيّة X1 و X2 و X3 و X4 في شكلها الطبيعيّ لأنّها تأتي من مرحلة المعالجة المسبقة، وعندما تمرّ المداخل عبر الطّبقة الأولى فإنّه يتحوّل دخل الطّبقة التّالية بناء على تابع التّفعيل المُطبّق على مداخل الشّبكة العصبونيّة، وهو حاصل جداء للمدخل X ومصفوفة الوزن W وتكون مداخل الطّبقة العصبونيّة التّالية بناءً على تابع التّفعيل المستخدم؛ وهو التّابع الأسيّ الجيبيّ (سيغمويد) كما نشاهد في الشّكل(2).

الشّكل(2): ناتج المدخلات على الطّبقة المخفيّة الأولى في الشّبكة العصبونيّة

وبالمثل سيحدث هذا التّحوّل للطّبقة الثّانية ويستمرّ حتى آخر طبقة L كما هو موضّح في الشّكل(3):

الشّكل(3): ناتج المدخلات على طبقة الخرج في الشّبكة العصبونيّة

كيف يعمل تقييس الدّفعات؟

الآن لدينا فكرة واضحة عن سبب حاجتنا إلى تقييس الدّفعات، ومن أجل شرح عمليّة تقييس الدّفعات لابدّ من توضيح الخطوات الرّئيسيّة لهذه العمليّة وهي:

الخطوة الأولى: تقييس المُدخلات

التّقييس هو عمليّة تحويل البيانات إلى توزّع يحقّق ما يلي:

صفرًا بالمتوسّط وانحرافًا معياريًّا يساوي الواحد.

في هذه الخطوة لدينا دخل (دفعة) من الطّبقة h، أوّلًا نحتاج إلى حساب المتوسّط الحسابي في الطّبقة المخفيّة بعد تطبيق تابع التّنشيط على مدخلات تلك الطّبقة.

هنا  m هو عدد الخلايا العصبونيّة في الطّبقة h.

 i الطبقة المخفيّة hi

 المتوسّط الحسابيّ للطّبقة المخفيّة μ 

بمجرّد أن ننتهي من حساب المتوسّط الحسابيّ، فإنّ الخطوة التّالية هي حساب الانحراف المعياريّ لعمليّات توابع التّنشيط في الطّبقة المخفيّة.

  

هنا  m هو عدد الخلايا العصبونيّة في الطّبقة h.

 i الطبقة المخفيّة hi

 i المتوسّط الحسابيّ للطّبقة المخفيّة μ 

i الانحراف المعياريّ للطّبقة المخفيّة σ

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

يضمن مصطلح التّنعيم (ε) الاستقرار العدديّ داخل العمليّة؛ وذلك عن طريق منع القسمة على صفر وتكون قيمته عادة مساوية للقيمة 0.00005 [2].

الخطوة الثّانية: إعادة القياس وتعويض المدخلات

وتمثّل هذه الخطوة المرحلة النّهائيّة حيث يتمّ من خلالها إعادة قياس وتعويض المدخلات، وناتج هذه العمليّة هو نتيجة خوارزميّة تقييس الدّفعة BN على الدّفعة المصغّرة الحاليّة، وهنا ينتج قيمتان من خوارزميّة تقييس الدّفعة BN وهما γ (جاما) وتستخدم من أجل إعادة القياس و β (بيتا) وتمثّل إزاحة المتّجه الذي يحتوي على قيم من العمليّات السّابقة.

هاتان القيمتان قابلتان للتّعلّم، وأثناء التّدريب تضمن الشّبكة العصبونيّة استخدام القيم المثلى لـ γ و β، ممّا يساهم في التّقييس الدّقيق لكلّ دفعة.

تطبيق تقييس الدّفعة في بايثون

يمكن استخدام تقييس الدّفعة باستخدام الشّيفرة التّالية في كيراس keras:

from keras.layers import BatchNormalization
from keras.models import Sequential
model = Sequential()
…
model.add(BatchNormalization())

الشّيفرة البرمجيّة أعلاه تتعلّق باستخدام مكتبة كيراس Keras في تدريب النّماذج العميقة للتّعلّم الآليّ.

Batch Normalization هي وحدة من وحدات الشّبكات العصبونيّة التي تساعد على تحسين أداء النّموذج وتسريع عمليّة التّدريب كما تمّ شرحها. 

في هذا الكود، تمّ إنشاء نموذج تسلسليّ Sequential وتمّ إضافة الصّفّ BatchNormalization كطبقة جديدة في النّموذج باستخدام الأمر ()model.add، وهذا يعني أنّ البيانات المدخلة إلى الطّبقة التّالية في النّموذج سيتمّ تحويلها باستخدام BatchNormalization.

مزايا تقييس الدّفعات

دعنا الآن نلقي نظرة على المزايا التي توفّرها عمليّة تقييس الدّفعة BN.

1- تسريع التّدريب

  • يؤدّي تقييس المدخلات لتوابع التّفعيل في الطّبقات المخفيّة إلى تسريع عمليّة التّدريب.
  • يتيح تقييس الدّفعة BN الاستفادة من معدّلات التّعلّم الأكبر، وهذا يُخفّض زمن التّقارب عند تدريب الشّبكات العصبونيّة وبالتّالي تسريع عمليّة التّدريب، بالإضافة إلى ذلك تتزايد الدّقّة مقارنة بنفس الشّبكة العصبونيّة دون إضافة تقييس الدّفعات BN.

2- يقلّل من المشكلة الشّائعة تلاشي المشتق vanishing gradient

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

3- تقليل تابع الخسارة

يعمل تقييس الدّفعات على تقليل تابع الخسارة التي تؤدّي بدورها إلى تحسين مُعاملات النّموذج وبالتّالي تحسين سرعة تدريب النّموذج.

4- يتعامل مع إزاحة المتغيّر الدّاخليّ

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

لنفترض أنّنا نقوم بتدريب نموذج شبكة عصبونيّة لتصنيف للصّور، والذي يصنّف الصّور إلى كلب أو غير كلب، كما هو موضّح في الشّكل (4):

الشّكل(4): مجموعة بيانات تصنيف الصّور إلى كلب وغير كلب

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

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

الشّكل(5): تأثير توزيع البيانات على تصميم النّموذج العميق

ومع ذلك وفقًا لدراسة أجراها باحثو معهد ماساتشوستس للتّكنولوجيا [4]، فإنّ تقييس الدّفعة لا يحلّ مشكلة إزاحة المتغيّر الدّاخلي بشكل نهائيّ، ولكنّه يقدّم نتائج أفضل فيما لو لم يضاف إلى النّموذج.

في هذا البحث قاموا بتدريب ثلاثة نماذج:

  1. نموذج شَبَكَة مجموعة الهندسة البصريَّة VGG  القياسيّة بدون تقييس دُفعيّ.
  2. نموذج شَبَكَة مجموعة الهندسة البصريَّة VGG القياسيّة مع تقييس الدّفعات.
  3. نموذج شَبَكَة مجموعة الهندسة البصريَّة VGG مع تقييس الدّفعة والضّجيج العشوائيّ.

هذا الضّجيج العشوائيّ له متوسّط حسابيّ غير صفريّ وانحراف معياريّ لا يساوي الواحد، وتتمّ إضافته بعد طبقة تقييس الدّفعة و توصلت هذه التّجربة إلى نتيجتين [4].

إذاً في الشّكل (6) الذي يشير إلى نتائج دراسة تأثير تقنيّات تقييس الدّفعة وإضافة الضّجيج العشوائيّ على أداء نماذج VGG في مهمّة التّصنيف الصّوريّ، أظهرت النّتائج أن دقّة التّصنيف لنموذجي التّقييس والضّجيج ونموذج التّقييس فقط، كانت أعلى بشكل ملحوظ من دقّة النّموذج الأساسيّ بدون تقييس أو إضافة ضجيج.

ويشير الباحثون إلى أنّ هذه النّتائج تدعم فرضيّتين:

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

الفرضيّة الثّانية: دقّة تدريب النّموذجين الثّاني والثّالث أعلى من النّموذج الأوّل، لذلك يمكن استنتاج أنّ التّحوّل الدّاخليّ المشترك قد لا يكون عاملًا مساهمًا في أداء تقييس الدّفعة وذلك نتيجة لعدم وجود أي فروقات كبيرة بين النّموذج القياسيّ والنّموذج المعدّل بإضافة الضّجيج العشوائيّ كما نلاحظ [3].

الشّكل (6): تأثير تقنيّة تقييس الدّفعة والضّجيج العشوائيّ على أداء نماذج VGG

الخاتمة

في هذه المقالة رأينا ما هي تقنيّة تقييس الدّفعة Batch Normalization وكيف تُحسّن أداء الشّبكة العصبونيّة، على الرّغم من أنّنا لا نحتاج إلى إجراء كل هذا يدويًّا لأنّ مكتبات التّعلّم العميق مثل باي تورتش PyTorch وتنسرفلو TensorFlow تهتمّ بالتّعقيدات في التّنفيذ كما رأينا كم هو أمر سهل إضافة طبقة تقييس الدّفعة في كيراس keras، ومع ذلك لكونك مهتمّ بمجال التّعلّم العميق فإنّ الأمر يستحقّ فهم التّعقيدات التي تجري أثناء تدريب الشّبكة العصبونيّة، كما أنّ الخوارزميّة الكامنة وراء تقييس الدّفعة BN ليست معقّدة كما قد تبدو لك عزيزي القارئ😉😉.

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

المراجع

0 Shares:
اترك تعليقاً

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

You May Also Like