العمل مع الشبكات العصبية: قائمة مرجعية لتصحيح الأخطاء

العمل مع الشبكات العصبية: قائمة مرجعية لتصحيح الأخطاء

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

تتناول هذه المقالة خوارزمية لتصحيح أخطاء شبكاتك العصبية.

يوصي Skillbox بما يلي: دورة عملية مطور بايثون من الصفر.

نذكر: لجميع قراء "Habr" - خصم 10 روبل عند التسجيل في أي دورة Skillbox باستخدام رمز "Habr" الترويجي.

تتكون الخوارزمية من خمس مراحل:

  • بداية سهلة؛
  • تأكيد الخسائر؛
  • التحقق من النتائج والاتصالات المتوسطة؛
  • تشخيص المعلمات
  • السيطرة على العمل.

إذا كان هناك شيء يبدو أكثر إثارة للاهتمام بالنسبة لك من الباقي، فيمكنك الانتقال فورًا إلى هذه الأقسام.

بداية سهلة

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

البداية البسيطة هي إنشاء نموذج مبسط وتدريبه على مجموعة (نقطة) واحدة من البيانات.

أولا نقوم بإنشاء نموذج مبسط

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

نقوم بتدريب النموذج على مجموعة (نقطة) واحدة من البيانات

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

حتى لو كان كل شيء على ما يرام، قم بإعداد النموذج لحقبة واحدة أو أكثر قبل المضي قدمًا.

تقييم الخسارة

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

من المهم الانتباه إلى الخسائر الأولية. تحقق من مدى قرب النتيجة الفعلية من النتيجة المتوقعة إذا بدأ النموذج بتخمين عشوائي. في يقترح عمل أندريه كارباثي ما يلي:: "تأكد من حصولك على النتيجة التي تتوقعها عندما تبدأ بعدد صغير من المعلمات. من الأفضل التحقق فورًا من فقدان البيانات (مع ضبط درجة التنظيم على الصفر). على سبيل المثال، بالنسبة لـ CIFAR-10 مع مصنف Softmax، نتوقع أن تكون الخسارة الأولية 2.302 لأن احتمال الانتشار المتوقع هو 0,1 لكل فئة (نظرًا لوجود 10 فئات) وخسارة Softmax هي احتمال السجل السلبي للفئة الصحيحة مثل - ln (0.1) = 2.302."

بالنسبة للمثال الثنائي، يتم ببساطة إجراء عملية حسابية مماثلة لكل فئة من الفئات. هنا، على سبيل المثال، البيانات: 20% 0 و80% 1. ستصل الخسارة الأولية المتوقعة إلى –0,2ln (0,5) –0,8ln (0,5) = 0,693147. إذا كانت النتيجة أكبر من 1، فقد يشير ذلك إلى أن أوزان الشبكة العصبية غير متوازنة بشكل صحيح أو أن البيانات غير طبيعية.

التحقق من النتائج والاتصالات المتوسطة

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

  • تعبيرات غير صحيحة لتحديثات Gradle؛
  • لا يتم تطبيق تحديثات الوزن؛
  • تدرجات متفجرة

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

بالإضافة إلى ذلك، من الضروري مراقبة قيم وظائف التنشيط والأوزان والتحديثات لكل طبقة من الطبقات. على سبيل المثال، حجم تحديثات المعلمات (الأوزان والتحيزات) يجب أن يكون 1-e3.

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

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

فايزان الشيخ يشير إلى ثلاث طرق رئيسية لتصور الشبكة العصبية:

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

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

العمل مع الشبكات العصبية: قائمة مرجعية لتصحيح الأخطاء

تشخيص المعلمة

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

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

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

قص التدرج  - تقليم تدرجات المعلمات أثناء الانتشار العكسي عند القيمة القصوى أو القاعدة الهامشية. مفيد لاستكشاف أخطاء أي تدرجات متفجرة قد تواجهها في النقطة الثالثة.

التطبيع دفعة - يستخدم لتطبيع البيانات المدخلة لكل طبقة، مما يسمح لنا بحل مشكلة التحول المتغير الداخلي. إذا كنت تستخدم Dropout وBatch Norma معًا، تحقق من هذه المقالة.

النسب التدرج العشوائي (SGD) - هناك العديد من أنواع SGD التي تستخدم الزخم ومعدلات التعلم التكيفية وطريقة Nesterov. ومع ذلك، لا يتمتع أي منهم بميزة واضحة من حيث كفاءة التعلم والتعميم (التفاصيل هنا).

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

لتقييم كل شيء بنفسك، تحتاج إلى تعطيل التنظيم والتحقق من تدرج فقدان البيانات بنفسك.

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

هام: إذا كنت تستخدم كلاً من تسوية التسرب والدفعة، فكن حذرًا بشأن ترتيب هذه العمليات أو حتى استخدامها معًا. كل هذا لا يزال قيد المناقشة واستكماله بنشاط. فيما يلي مناقشتان مهمتان حول هذا الموضوع على ستاكوفيرفلوو и Arxiv.

مراقبة العمل

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

ومع ذلك، يمكن أن يصبح التوثيق اليدوي مهمة صعبة في حالة حجم العمل الكبير. هذا هو المكان الذي تأتي فيه أدوات مثل Comet.ml لمساعدتك في تسجيل مجموعات البيانات وتغييرات التعليمات البرمجية والتاريخ التجريبي ونماذج الإنتاج تلقائيًا، بما في ذلك المعلومات الأساسية حول النموذج الخاص بك (المعلمات الفائقة ومقاييس أداء النموذج والمعلومات البيئية).

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

العمل مع الشبكات العصبية: قائمة مرجعية لتصحيح الأخطاء

آمل أن يكون هذا المنشور نقطة انطلاق لبدء تصحيح أخطاء شبكتك العصبية.

يوصي Skillbox بما يلي:

المصدر: www.habr.com

إضافة تعليق