كيفية تصنيف أرقام MNIST مع أبنية الشبكة العصبية المختلفة

الشروع في العمل مع الشبكات العصبية وكراس

الصورة من قبل جريج Rakozy على Unsplash

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

يرجى ملاحظة: يمكن العثور على جميع نماذج الأكواد أدناه وتشغيلها في مفكرة Jupyter Notebook التي تستضيفها Google Colaboratory. أنا أشجعك على نسخ الكود وإجراء تغييرات وتجربة الشبكات بنفسك أثناء قراءة هذا المقال.

الشبكات العصبية

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

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

تظهر بعض مصطلحات التعلم الآلي هنا ، في حالة عدم رؤيتك من قبل:

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

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

مجموعة بيانات MNIST المكتوبة بخط اليد

في هذه المقالة ، سنعمل على تنفيذ سلسلة من أبنية الشبكات العصبية البسيطة ومقارنة أدائها على مجموعة بيانات الأرقام المكتوبة بخط اليد في MNIST. الهدف لجميع الشبكات التي نقوم بفحصها هو نفسه: التقاط صورة إدخال (28 × 28 بكسل) لرقم واحد مكتوب بخط اليد (0–9) وتصنيف الصورة على أنها الرقم المناسب.

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

إنها لفكرة جيدة دائمًا أن تتعرف على مجموعة بيانات قبل الغوص في أي مهمة تعلم آلي. فيما يلي بعض الأمثلة على الصور في مجموعة البيانات:

مجموعة عشوائية من أرقام MNIST. في Jupyter Notebook ، يمكنك عرض المزيد من التحديدات العشوائية من مجموعة البيانات.

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

هذه الصورة مأخوذة من كتاب رائع عن الشبكات العصبية والتعلم العميق ، وهو متاح عبر الإنترنت مجانًا.

تحضير البيانات

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

بفضل مكتبة Keras والعمل الشاق للمعهد الوطني للمعايير والتكنولوجيا (NIST of MNIST) ، فإن أصعب الأجزاء تم إنجازها بالنسبة لنا. تم جمع البيانات وتم تنسيقها جيدًا للمعالجة. لذلك ، إنه بامتنان عميق لـ NIST ومشرفي Keras أن يكون رمز Python الخاص بنا للحصول على البيانات بسيطًا:

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

ستتغلب شبكاتنا على هذا الفقد في المعلومات ، لكن تجدر الإشارة إلى الشبكات العصبية التلافيفية (CNN). تم تصميم هذه خصيصًا لمعالجة الصور / رؤية الكمبيوتر ، والحفاظ على هذه العلاقات المكانية. في مقال مقبل ، سنعيد النظر في MNIST مع CNNs ونقارن نتائجنا.

يوفر Keras ، مرة أخرى ، أداة مساعدة بسيطة لمساعدتنا على تسوية 28 × 28 بكسل في ناقل.

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

إذا كانت خوارزمية لدينا تتوقع "8" عندما يجب أن تتنبأ ب "0" فمن الخطأ أن نقول إن النموذج "تم إيقافه بثمانية" - فقد تنبأ ببساطة بفئة الخطأ. وبالمثل ، فإن التنبؤ بالرقم "7" عندما كان من المفترض أن نتوقع الرقم "8" ليس أفضل من التنبؤ بالرقم "0" عندما يكون من المفترض أن نتوقع الرقم "8" - كلاهما خطأ.

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

لحسن الحظ ، Keras يجعل هذا من السهل القيام به بشكل جيد:

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

بنيات الشبكة العصبية

بالنسبة للشبكات العصبية المتصلة تمامًا ، هناك ثلاثة أسئلة أساسية تحدد بنية الشبكة:

  1. كم عدد الطبقات هناك؟
  2. كم عدد العقد في كل من تلك الطبقات؟
  3. ما وظيفة النقل / التنشيط المستخدمة في كل من تلك الطبقات؟

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

تستخدم كافة بنيات الشبكة في هذه المقالة وظيفة النقل السيني لجميع الطبقات المخفية.

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

  • لقد اخترت دالة خسارة شائعة تسمى الانتروبيا المتقاطعة.
  • لقد اخترت واحدة من أبسط خوارزميات التحسين: Stochastic Gradient Descent (SGD).

يا للعجب ، الآن بعد أن خرج كل ذلك عن الطريق ، فلنقم ببناء شبكتنا الأولى:

بناء الشبكة

جميع الشبكات في هذه المقالة سيكون لها نفس طبقة الإدخال وطبقة الإخراج. لقد عرفنا طبقة الإدخال سابقًا باعتبارها متجهًا ذا إدخالات 784 - هذه هي البيانات من الصورة المسطحة 28 × 28. تم تعريف طبقة المخرجات أيضًا ضمنيًا في وقت مبكر عندما أنشأنا متجهًا مشفرًا ساخنًا واحدًا من الملصقات - تتوافق العلامات العشرة مع العقد العشر في هذه الطبقة.

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

  • جميع القيم بين 0 و 1 ، و
  • مجموع القيم العشر هو 1.

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

أخيرًا ، يحتوي هذا النموذج على طبقة مخفية واحدة بها 32 عقدة باستخدام وظيفة التنشيط السيني. الهندسة الناتجة لها 25،450 معلمة قابلة للضبط. من طبقة الإدخال إلى الطبقة المخفية هناك 784 * 32 = 25،088 الأوزان. تحتوي الطبقة المخفية على 32 عقدة ، لذلك هناك 32 تحيزًا. هذا يقودنا إلى 25،088 + 32 = 25،120 معلمة.

من الطبقة المخفية إلى طبقة المخرجات هناك 32 * 10 = 320 أوزان.

تضيف كل واحدة من العقد العشر تحيزًا واحدًا يصل بنا إلى 25،120 + 320 + 10 = 25،450 إجمالي المعلمات.

لدى Keras طريقة مفيدة لمساعدتك في حساب عدد المعلمات في نموذج ، مع استدعاء الطريقة .summary () التي نحصل عليها:

طبقة (نوع) الناتج شكل المعلمة #
================================================== ===============
dense_203 (كثيفة) (لا شيء ، 32) 25120
_________________________________________________________________
dense_204 (كثيفة) (لا شيء ، 10) 330
================================================== ===============
إجمالي المعاملات: 25،450
معالم التدريب: 25،450
معاملات غير قابلة للتدريب: 0

يمكننا استخدام Keras لتدريب وتقييم هذا النموذج أيضًا:

[CODE BLOCK - train_and_evalulate_first_model.py]

دقة التدريب والتحقق من الصحة مع مرور الوقت. دقة الاختبار النهائي: 0.87.

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

عمق الشبكة وعرض الطبقة

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

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

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

عمق الشبكة

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

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

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

  • النسب الانحداري العشوائي (SGD)
  • خمس حلقات تدريب
  • حجم دفعة التدريب 128
  • قاطع عبر فقدان وظيفة الكون.

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

  • متجه المدخلات بطول 784
  • متجه الإخراج بطول عشرة يستخدم ترميز واحد ساخن ووظيفة تنشيط softmax
  • عدد من الطبقات ذات العروض المحددة بواسطة صفيف الإدخال باستخدام وظيفة التنشيط السيني.

يستخدم هذا الرمز هذه الوظائف لإنشاء وتقييم العديد من الشبكات العصبية ذات العمق المتزايد ، ولكل منها 32 عقدة لكل طبقة مخفية:

يؤدي تشغيل هذا الرمز إلى إنتاج بعض المخططات المهمة ، من خلال وظيفة التقييم المعرفة أعلاه:

طبقة خفية واحدة ، دقة الاختبار النهائي: 0.8882 طبقات خفية ، دقة الاختبار النهائي: 0.7673 طبقات خفية ، دقة الاختبار النهائي: 0.4384 طبقات خفية ، دقة الاختبار النهائي: 0.114

Overfitting

يبدو أن إضافة المزيد من الطبقات قد قلل من دقة النموذج. قد لا يكون هذا بديهيًا - ألا نعطي النموذج مرونة أكبر وبالتالي زيادة قدرته على وضع تنبؤات؟ لسوء الحظ ، المفاضلة ليست بهذه البساطة.

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

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

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

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

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

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

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

كان ضغط القرار مرة واحدة (من الواضح) ليس سيئًا للغاية. ولكن ، مثل حفظ JPEG بشكل متكرر ، فإن السلاسل المتكررة لنقل البيانات "ذات الدقة المنخفضة" من طبقة إلى أخرى يمكن أن تؤدي إلى انخفاض جودة المخرجات.

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

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

3 طبقات مخفية ، 40 فترة تدريب بدلاً من 5. دقة الاختبار النهائية: .886

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

عرض الطبقة

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

باستخدام نفس وظائف التقييم و create_dense على النحو الوارد أعلاه ، دعنا نقارن بعض الشبكات العصبية بطبقة واحدة مخفية باستخدام عروض طبقة مختلفة.

مرة أخرى ، ينتج عن تشغيل هذا الرمز بعض المخططات المهمة:

طبقة خفية واحدة ، 32 عقد. دقة الاختبار النهائي: .886طبقة واحدة مخفية ، 64 عقدة. دقة الاختبار النهائي: .904طبقة واحدة مخفية ، 128 عقدة. دقة الاختبار النهائي: .916طبقة واحدة مخفية ، 256 عقد. دقة الاختبار النهائي: .926طبقة واحدة مخفية ، 512 عقد. دقة الاختبار النهائي: .934طبقة واحدة مخفية ، 2048 عقد. دقة الاختبار النهائي: .950. يحتوي هذا النموذج على تلميح للتركيب المحتمل - لاحظ أين تتقاطع الخطوط في نهاية فترة التدريب لدينا.

هذه المرة تكون تغييرات الأداء أكثر سهولة - تم تعيين المزيد من العقد في الطبقة المخفية باستمرار لتحسين الأداء على بيانات الاختبار. تحسنت دقة لدينا من 87 ٪ ~ مع 32 العقد إلى ~ 95 ٪ مع 2048 العقد. ليس ذلك فحسب ، بل إن الدقة خلال جولتنا الأخيرة من التدريب تكاد تنبأ بدقة بيانات الاختبار - وهي علامة على أننا ربما لا نستخدمها بشكل جيد.

كانت تكلفة هذا التحسين وقت تدريب إضافي. نظرًا لتزايد عدد المعلمات القابلة للضبط من أقل من 25000 مع 32 عقدة إلى أكثر من 1.6 مليون مع 2048 عقدة ، وكذلك فعل وقت التدريب. تسبب هذا في تحول فترات التدريب لدينا من حوالي ثانية واحدة إلى حوالي 10 ثوانٍ (على جهاز Macbook Pro - قد تختلف المسافة المقطوعة).

ومع ذلك ، فإن هذه النماذج سريعة التدريب بالنسبة للعديد من النماذج الصناعية الحديثة. نسخة AlphaGo التي هزمت لي Sedol تدربت لمدة 4-6 أسابيع. كتب OpenAI مدونة إلكترونية تساعد أيضًا في تحديد الموارد الحسابية غير العادية التي تدخل في تدريب النماذج الحديثة. من المقال:

"... لقد زاد مقدار الحوسبة المستخدمة في أكبر الدورات التدريبية لمنظمة العفو الدولية أضعافا مضاعفة مع وقت تضاعف 3.5 أشهر ..."

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

الجمع بين العرض والعمق

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

دعونا نرى ما يحدث عندما نكدس طبقات أكبر. بدا أن الطبقات المكررة من 32 تقلل من الأداء الكلي لشبكاتنا - فهل سيظل هذا صحيحًا مع تكدس الطبقات الأكبر؟

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

يمكنك رؤية جميع الرسوم البيانية في Jupyter Notebook ، لكنني أود أن أبرز بعض النقاط المثيرة للاهتمام.

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

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

طبقة واحدة 32 عقدةاثنين من 128 طبقات العقدةثلاث طبقات 512 عقدة

ولكن عندما نصل إلى أربع وخمس طبقات ، تبدأ الأمور في الظهور بشكل سيء بالنسبة للطرز ذات 32 عقدة:

أربع طبقات 32 عقدة.خمسة 32 طبقات العقدة.

تتمتع الشبكات الأخرى المكونة من خمسة طبقات بنتائج مهمة أيضًا:

خمسة 128 طبقات العقدة.خمسة 512 طبقات العقدة.

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

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

على سبيل المثال ، هذا ما حدث عندما قمت بتخفيض حجم الدُفعة إلى 16 (من 128) وقمت بتدريب 32 عقدة لكل طبقة مع خمس طبقات مخفية لمدة 50 فترة (استغرقت حوالي 30 دقيقة على أجهزتي):

خمس طبقات خفية 32 عقدة ، حجم الدفعة 16 ، 50 عصر. دقة الاختبار النهائي:

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

خطوات إضافية

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

في المقالة التالية ، سنستكشف تدرج النسب خوارزمية حجر الزاوية لتدريب الشبكات العصبية.

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

أنتج هذا المقال مختبر Teb. لمعرفة المزيد حول أحدث التقنيات ، قم بالتسجيل في ويكلي لاب ريبورت ، كن راعياً في باتريون ، أو فقط اتبعني هنا في المتوسط.