أفضل ممارسات التعلم العميق (1) - تهيئة الوزن

أساسيات ، المزالق التهيئة الوزن وأفضل الممارسات

https://pixabay.com/photo-1600668/

التحفيز

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

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

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

أساسيات وترميزات

النظر في شبكة العصبية طبقة L ، التي لديها طبقات مخفية L-1 و 1 طبقة الإخراج. يتم تمثيل المعلمات (الأوزان والتحيزات) للطبقة l كـ

بالإضافة إلى الأوزان والتحيزات ، أثناء عملية التدريب ، يتم حساب المتغيرات الوسيطة التالية

يتكون تدريب الشبكة العصبية من 4 خطوات:

  1. تهيئة الأوزان والتحيزات.
  2. الانتشار الأمامي: باستخدام المدخلات X ، الأوزان W والتحيزات b ، لكل طبقة نحسبها Z و A. في الطبقة النهائية ، نحسب f (A ^ (L-1)) والتي يمكن أن تكون دالة السيني أو softmax أو الخطية من ^ (L-1) وهذا يعطي التنبؤ y_hat.
  3. حساب دالة الخسارة: هذه دالة للتسمية الفعلية y والتسمية المتوقعة y_hat. إنها تجسد مدى تنبؤاتنا عن الهدف الفعلي. هدفنا هو تقليل وظيفة الخسارة هذه.
  4. الانتشار الخلفي: في هذه الخطوة ، نحسب تدرجات دالة الخسارة f (y ، y_hat) فيما يتعلق A و W و b وتسمى dA و dW و db. باستخدام هذه التدرجات ، نقوم بتحديث قيم المعلمات من الطبقة الأخيرة إلى الأولى.
  5. كرر الخطوات من 2 إلى 4 لتكرار / حقبة حتى نشعر أننا قد قللنا من وظيفة الخسارة ، دون ملء بيانات القطار (أكثر في هذا في وقت لاحق!)

في ما يلي نظرة سريعة على الخطوات 2 و 3 و 4 لشبكة ذات طبقتين ، أي طبقة واحدة مخفية. (لاحظ أنني لم أقم بإضافة مصطلحات التحيز هنا للبساطة):

نشر الأمامنشر الوراء

تهيئة الأوزان W

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

1. تهيئة جميع الأوزان إلى 0

دعنا نضعها في الخارج - وهذا يجعل نموذجك مكافئًا لنموذج خطي. عندما تقوم بضبط كل الوزن على 0 ، يكون المشتق فيما يتعلق بوظيفة الخسارة هو نفسه لكل ث في W ^ l ، وبالتالي ، فإن جميع الأوزان لها نفس القيم في التكرار اللاحق. هذا يجعل الوحدات المخفية متماثلة وتستمر لجميع التكرارات التي تقوم بتشغيلها. وبالتالي فإن ضبط الأوزان على الصفر يجعل شبكتك أفضل من النموذج الخطي. من المهم أن نلاحظ أن تعيين التحيزات إلى 0 لن يخلق أي مشاكل لأن الأوزان غير الصفرية تهتم بكسر التماثل وحتى إذا كان التحيز يساوي 0 ، فإن القيم في كل خلية عصبية لا تزال مختلفة.

2. تهيئة الأوزان بشكل عشوائي

يمكن أن تؤدي تهيئة الأوزان بشكل عشوائي ، بعد التوزيع العادي القياسي (np.random.randn (size_l، size_l-1) في Python) أثناء العمل مع شبكة (عميقة) إلى مشكلتين - اختفاء التدرجات اللونية أو التدرجات المتفجرة.

أ) تدرجات التلاشي - في حالة الشبكات العميقة ، لأي وظيفة تنشيط ، فإن القيمة المطلقة (dW) ستصبح أصغر وأصغر كلما عدنا إلى الوراء مع كل طبقة أثناء الانتشار الخلفي. الطبقات السابقة هي الأبطأ في التدريب في مثل هذه الحالة.

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

بشكل أكثر تحديدًا ، في حالة السيني (z) و tanh (z) ، إذا كانت أوزانك كبيرة ، فسيكون التدرج صغيرًا بشكل يتلاشى ، ويمنع بشكل فعال الأوزان من تغيير قيمتها. وذلك لأن القيمة المطلقة (dW) ستزيد قليلاً جدًا أو ربما تصبح أصغر وأصغر في كل تكرار. مع RELU (z) التدرجات التلاشي ليست عمومًا مشكلة لأن التدرج يساوي 0 للمدخلات السالبة (والصفر) و 1 للمدخلات الموجبة.

ب) انفجار التدرجات - وهذا هو عكس بالضبط التدرجات التلاشي. ضع في اعتبارك أن لديك أوزان غير سالبة وكبيرة وتنشيطات صغيرة A (كما يمكن أن يكون الحال مع السيني (z)). عندما يتم ضرب هذه الأوزان على طول الطبقات ، فإنها تتسبب في تغيير كبير في التكلفة. وبالتالي ، فإن التدرجات ستكون أيضًا كبيرة. هذا يعني أن التغييرات في W ، بواسطة W - d * dW ، ستكون في خطوات ضخمة ، ستزداد اللحظة الهبوطية.

قد ينتج عن هذا التذبذب حول الحد الأدنى أو حتى تجاوز الحد الأمثل مرارًا وتكرارًا ولن يتعلم النموذج أبدًا!

تأثير آخر للتدرجات المتفجرة هو أن القيم الضخمة للتدرجات قد تتسبب في زيادة في عدد الأرقام مما يؤدي إلى حسابات غير صحيحة أو مقدمات من NaN. هذا قد يؤدي أيضا إلى فقدان أخذ القيمة NaN.

أفضل الممارسات

1. استخدام RELU / تسرب RELU كدالة التنشيط ، لأنه قوي نسبيًا لمشكلة التدرج اللانهائي / المتفجر (خاصة بالنسبة للشبكات غير العميقة جدًا). في حالة تسرب RELU ، لا يوجد لديهم تدرج 0. وبالتالي لا يموتون ويتواصل التدريب.

2. بالنسبة إلى الشبكات العميقة ، يمكننا استخدام أداة إرشادية لتهيئة الأوزان اعتمادًا على وظيفة التنشيط غير الخطية. هنا ، بدلاً من السحب من التوزيع العادي القياسي ، فإننا نقوم بالسحب W من التوزيع العادي مع التباين k / n ، حيث تعتمد k على وظيفة التنشيط. على الرغم من أن عمليات الاستدلال هذه لا تحل مشكلة التدرج المتفجر / التلاشي تمامًا ، فإنها تساعد في التخفيف إلى حد كبير. الاكثر شيوعا هي:

أ) بالنسبة إلى RELU (z) - نقوم بضرب قيم W التي تم إنشاؤها عشوائيًا بواسطة:

ب) بالنسبة لتانه (z) - يُسمى الاستدلال تهيئة كزافييه. إنه مشابه لما سبق ، باستثناء أن k هي 1 بدلاً من 2.

في TensorFlow W = tf.get_variable ('W' ، [dims] ، مهيئ) حيث حيث initializer = tf.contrib.layers.xavier_initializer ()

ج) هناك وسيلة إرشادية أخرى شائعة الاستخدام:

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

3. لقطة متدرجة - هذه طريقة أخرى للتعامل مع مشكلة التدرج المتفجر. لقد قمنا بتعيين قيمة عتبة ، وإذا كانت الوظيفة المختارة للتدرج أكبر من هذه العتبة ، فسنقوم بتعيينها على قيمة أخرى. على سبيل المثال ، قم بتطبيع التدرجات عندما يتجاوز معيار L2 عتبة معينة - W = W * threshold / l2_norm (W) إذا كانت l2_norm (W)> عتبة

نقطة مهمة يجب ملاحظتها هي أننا تحدثنا عن التهيئة المختلفة لـ W ، ولكن ليس التحيزات b. وذلك لأن التدرجات فيما يتعلق بالتحيز تعتمد فقط على التنشيط الخطي لتلك الطبقة ، وليس على التدرجات اللونية للطبقات العميقة. وبالتالي لا يوجد تناقص أو انفجار تدرجات لشروط التحيز. كما ذكرنا سابقًا ، يمكن تهيئتها بأمان إلى 0.

خاتمة

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

المراجع

  1. https://www.coursera.org/learn/deep-neural-network/lecture/RwqYe/weight-initialization-for-deep-networks
  2. الشبكات العصبية: التدريب مع backpropagation - جيريمي الأردن
  3. مقدمة لطيفة لتفجير التدرجات في الشبكات العصبية بقلم جيسون براون
  4. تلاشي مشكلة التدرج
  5. https://www.quora.com/Why-is-it-a-problem-to-have-exploding-gradients-in-a-neural-net-especially-in-an-RNN

عني: تخرجت من جامعة MS Data Science بجامعة USF وتخرجت في علوم الكمبيوتر ، ولدي خبرة تبلغ عامين في بناء خوارزميات تنبؤية وتوصية ، واستنباط رؤى تجارية للعملاء في مجال التمويل والتجزئة. أنا متحمس لفرص تطبيق التعلم الآلي ومعرفة التعلم العميق على مشاكل العالم الحقيقي.
تحقق من بلدي بلوق أخرى هنا!
LinkedIn: https://www.linkedin.com/in/neerja-doshi/