برنامج تعليمي حول الشبكات العصبية الاصطناعية (ANN) باستخدام TensorFlow

⚡ ملخص ذكي

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

  • 🔘 أربعة أشياء: تتكون كل شبكة عصبية اصطناعية من طبقات وميزات وتصنيفات ودالة خسارة ومُحسِّن.
  • ☑️ أدوار الطبقات: تُغذي المدخلات الطبقات المخفية، ويتطابق حجم طبقة الإخراج مع عدد الفئات لمهام التصنيف.
  • خيار التفعيل: تقوم دالة ReLU بإرجاع الصفر للقيم السالبة، مما يسمح للشبكة بتعلم الأنماط غير الخطية التي يفوتها النموذج الخطي.
  • 🧪 التحكم المفرط في التجهيز: تعمل الشبكات الأصغر حجماً، وعقوبات الوزن من المستوى الأول أو الثاني، ومعدلات التسرب بين 0.2 و 0.5 على استعادة التعميم.
  • 🛠️ ست خطوات بناء: قم باستيراد مجموعة بيانات MNIST، وقم بتوسيع نطاقها، وإنشاء أعمدة الميزات، وتحديد مصنف DNN، وتدريبه، ثم أضف التنظيم.
  • 📈 النتيجة المقاسة: تصل دقة الطبقات المخفية المكونة من 300 و 100 وحدة إلى 0.9637143؛ وينخفض ​​المتغير المنتظم إلى 0.95057142.

الشبكة العصبية الاصطناعية (ANN)

ما هي الشبكة العصبية الاصطناعية؟

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

الرسم البياني أدناه tracتمر عملية واحدة كاملة عبر هذه الشبكة، من المدخلات الأولية إلى المُحسِّن الذي يُصحِّح الأوزان.

مخطط انسيابي لشبكة عصبية اصطناعية يوضح المدخلات، وطبقتين موزونتين، والتنبؤ، ودالة الخسارة، والمُحسِّن

تتكون الشبكة العصبية الاصطناعية (ANN) من أربعة عناصر رئيسية:

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

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

إذا ألقيت نظرة على الشكل أعلاه، سوف تفهم الآلية الأساسية.

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

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

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

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

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

يتكون تصميم الشبكة العصبية الاصطناعية من المكونات التالية:

  • طبقات
  • وظيفة التنشيط
  • فقدان وظيفة
  • محسن

طبقات

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

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

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

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

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

  1. العقدة الأولى هي قيم الإدخال.
  2. تُقسّم الخلية العصبية إلى جزء الإدخال وجزء دالة التنشيط. يستقبل الجزء الأيسر جميع المدخلات من الطبقة السابقة، بينما يُمثّل الجزء الأيمن مجموع المدخلات التي تم تمريرها إلى دالة التنشيط.
  3. القيمة الناتجة تُحسب من الطبقات المخفية وتُستخدم للتنبؤ. في التصنيف، تساوي هذه القيمة عدد الفئات. أما في الانحدار، فيتم التنبؤ بقيمة واحدة فقط.

وظيفة التنشيط

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

وظائف التنشيط الأخرى هي:

  • خطي متقطع
  • السيني
  • تانه
  • متسرب ReLU

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

رسم بياني لدالة التنشيط ReLU R(z) = max(0, z)، وهي ثابتة عند الصفر للمدخلات السالبة وخطية للمدخلات الموجبة.

القرار الحاسم الذي يجب اتخاذه عند بناء شبكة عصبية هو:

  • كم عدد الطبقات في الشبكة العصبية
  • كم عدد الوحدات المخفية لكل طبقة

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

فقدان وظيفة

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

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

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

محسن

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

أدوات التحسين التقليدية هي:

  • Momentum التحسين
  • تدرج نيستروف المتسارع
  • اداغراد
  • آدم الأمثل

Archiلا يضمن التصميم وحده نموذجًا قابلاً للاستخدام.

حدود الشبكة العصبية

فيما يلي قيود الشبكة العصبية:

Overfitting

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

هناك مقايضة في آلة التعلم بين التحسين والتعميم.

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

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

تقنية ما الذي يقيده الإعداد النموذجي في هذا البرنامج التعليمي
حجم الشبكة عدد الطبقات والوحدات المخفية طبقتان مخفيتان، 300 و 100 وحدة
تنظيم الوزن L1 / L2 مقدار معاملات الترجيح قوة التنظيم l1 وقوة التنظيم l2 تساوي 0.01
أوقع نسبة الوحدات التي تم إيقاف تشغيلها لكل خطوة تدريبية معدل التسرب 0.3

حجم الشبكة

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

تنظيم الوزن

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

  • L1 (لاسو): التكلفة تتناسب طردياً مع القيمة المطلقة لمعاملات الترجيح.
  • L2 (القمة): التكلفة تتناسب طردياً مع مربع قيمة معاملات الوزن.

أوقع

تقنية التسرب (Dropout) غريبة بعض الشيء لكنها مفيدة. في الشبكات العصبية التي تستخدم التسرب، يتم إيقاف تشغيل بعض الوحدات عشوائيًا أثناء التدريب، فتصبح إشارتها الخارجة صفرًا. تخيل مصفوفة من الأوزان [0.1، 1.7، 0.7، -0.9]. إذا كانت الشبكة العصبية تستخدم التسرب، فستصبح المصفوفة [0.1، 0، 0، -0.9] مع توزيع عشوائي للصفر. المَعلمة التي تتحكم في التسرب هي معدل التسرب، الذي يحدد عدد الوحدات التي يتم إيقاف تشغيلها. يتراوح المعدل عادةً بين 0.2 و0.5.

يُسهّل المثال التفاعلي الصغير مشاهدة حلقة التدريب.

مثال على الشبكة العصبية في TensorFlow

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

  • طبقتين مخفيتين
  • تحتوي الطبقة الأولى على أربع خلايا عصبية متصلة بالكامل
  • الطبقة الثانية تحتوي على خليتين عصبيتين متصلتين بالكامل
  • دالة التنشيط هي دالة ReLU
  • أضف تنظيم L2 بمعدل تعلم 0.003

ستقوم الشبكة بتحسين الأوزان خلال 180 دورة تدريبية بحجم دفعة 10. في مثال الرسوم المتحركة للشبكة العصبية الاصطناعية أدناه، يمكنك رؤية كيفية تطور الأوزان بمرور الوقت وكيف تُحسّن الشبكة خريطة التصنيف.ping.

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

أولًا، تقوم الشبكة بتعيين قيم عشوائية لجميع الأوزان.

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

بيئة اختبار المتصفح في التكرار الأول بأوزان عشوائية، ووزن قدره -0.43، وخسارة اختبار قدرها 0.453

داخل الطبقة المخفية الثانية، تُلوّن الخطوط وفقًا لإشارة الأوزان. تحمل الخطوط البرتقالية أوزانًا سالبة، بينما تحمل الخطوط الزرقاء أوزانًا موجبة.

كما ترون، في خريطة الإخراجpingترتكب الشبكة الكثير من الأخطاء. الآن انظر كيف تتصرف الشبكة بعد التحسين.

تُظهر الصورة أدناه مثالًا لشبكة عصبية اصطناعية، وتُبين نتائج الشبكة المُحسّنة. أولًا، نلاحظ أن الشبكة قد تعلمت بنجاح كيفية تصنيف نقاط البيانات. بالمقارنة مع الصورة السابقة، كان الوزن الأولي -0.43، بينما أصبح بعد التحسين -0.95.

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

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

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

كيفية تدريب الشبكة العصبية باستخدام TensorFlow

إليك الخطوات التفصيلية لتدريب شبكة عصبية باستخدام TensorFlow شبكة عصبية اصطناعية تستخدم مُقدِّر DNNClassifier الخاص بواجهة برمجة التطبيقات.

سوف نستخدم مجموعة بيانات MNIST لتدريب شبكتك العصبية الأولى. تدريب الشبكة العصبية مع TensorFlow الأمر ليس معقدًا للغاية. تبدو خطوة المعالجة المسبقة تمامًا كما في الدروس السابقة. ستتبع الخطوات التالية:

  1. استيراد البيانات
  2. تحويل البيانات
  3. قم بإنشاء الموتر
  4. قم ببناء النموذج
  5. تدريب وتقييم النموذج
  6. تحسين النموذج

ملاحظة حول الإصدار: يستهدف الكود الموضح في هذا الدليل واجهة برمجة تطبيقات المُقدِّر في TensorFlow 1.x. تم إصدار النسخة النهائية من حزمة tf-estimator مع TensorFlow 2.15، وتمت إزالة tf.estimator في TensorFlow 2.16. لتنفيذ هذه الخطوات على إصدار حالي، إما تثبيت TensorFlow 2.15 أو إعادة بناء نفس الشبكة ثنائية الطبقات باستخدام tf.keras.layers.Dense و model.fit().

الخطوة 1) استيراد البيانات

أولاً، عليك استيراد المكتبة اللازمة. يمكنك استيراد مجموعة بيانات MNIST باستخدام تعلم الحروف كما هو موضح في مثال شبكة TensorFlow العصبية أدناه.

تُعدّ مجموعة بيانات MNIST الأكثر استخدامًا لاختبار التقنيات أو الخوارزميات الجديدة. وهي عبارة عن مجموعة من الصور بحجم 28×28 بكسل، تُظهر كل منها رقمًا مكتوبًا بخط اليد من 0 إلى 9. وقد نجحت لجنة من الشبكات العصبية التلافيفية العميقة، المدربة باستخدام التشوهات المرنة، في خفض نسبة الخطأ في الاختبار إلى 0.27%.

import numpy as np
import tensorflow as tf
np.random.seed(1337)

قام الدليل الأصلي بتنزيل ملفات MNIST يدويًا ووجه fetch_mldata إلى ذلك المجلد.

from sklearn.datasets import fetch_mldata
mnist = fetch_mldata(' /Users/Thomas/Dropbox/Learning/Upwork/tuto_TF/data/mldata/MNIST original')
print(mnist.data.shape)
print(mnist.target.shape)

ملاحظة حول واجهة برمجة التطبيقات: لم يعد موقع mldata.org متاحًا عبر الإنترنت، وتمت إزالة fetch_mldata في الإصدار 0.22 من مكتبة scikit-learn. في التثبيت الحالي، استبدل الاستدعاء أعلاه بـ fetch_openml('mnist_784', version=1)، والذي يقوم بتنزيل نفس الأرقام البالغ عددها 70,000 رقمًا ويعرض نفس البيانات والخصائص المستهدفة.

بعد ذلك، تقوم بتقسيم البيانات والحصول على شكل مجموعتي البيانات.

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(mnist.data, mnist.target, test_size=0.2, random_state=42)
y_train  = y_train.astype(int)
y_test  = y_test.astype(int)
batch_size =len(X_train)

print(X_train.shape, y_train.shape,y_test.shape )

الخطوة 2) تحويل البيانات

في الدرس السابق، تعلمتَ أنه يجب تحويل البيانات للحد من تأثير القيم الشاذة. في هذا الدرس الخاص بالشبكات العصبية، ستقوم بتحويل البيانات باستخدام مُقسِّم الحد الأدنى-الأقصى. الصيغة هي:

(X-min_x)/(max_x - min_x)

تحتوي مكتبة scikit-learn بالفعل على دالة لذلك: MinMaxScaler()

## resclae
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
# Train
X_train_scaled = scaler.fit_transform(X_train.astype(np.float64))
# test
X_test_scaled = scaler.fit_transform(X_test.astype(np.float64))

الخطوة 3) بناء الموتر

أنت الآن على دراية بطريقة الإنشاء موتر في TensorFlow. يمكنك تحويل مجموعة التدريب إلى عمود رقمي.

feature_columns = [tf.feature_column.numeric_column('x', shape=X_train_scaled.shape[1:])]

الخطوة 4) بناء النموذج

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

لبناء النموذج، استخدم مُقدِّر DNNClassifier. عليك تحديد عدد الفئات إلى 10، حيث يوجد عشر فئات في مجموعة التدريب. أنت على دراية مسبقة بصيغة كائن المُقدِّر. الوسائط feature_columns و n_classes و model_dir هي نفسها تمامًا كما في الدرس السابق. أما الوسيط hidden_units فهو جديد: يتحكم في كلٍّ من عدد الطبقات وعدد العُقد التي تتصل بها كل طبقة بالشبكة العصبية. في الكود أدناه، توجد طبقتان مخفيتان، الأولى تتصل بـ 300 عقدة والثانية بـ 100 عقدة.

لبناء المقدر، استخدم tf.estimator.DNNClassifier مع المعلمات التالية:

  • أعمدة الميزات: حدد الأعمدة المراد استخدامها في الشبكة
  • الوحدات المخفية: حدد عدد الخلايا العصبية المخفية
  • عدد الفئات: حدد عدد الفئات المراد التنبؤ بها
  • model_dir: حدد مسار TensorBoard
estimator = tf.estimator.DNNClassifier(
    feature_columns=feature_columns,
    hidden_units=[300, 100], 
    n_classes=10, 
    model_dir = '/train/DNN')

الخطوة 5) تدريب النموذج وتقييمه

يمكنك استخدام دالة الإدخال NumPy لتدريب النموذج وتقييمه.

# Train the estimator
train_input = tf.estimator.inputs.numpy_input_fn(
    x={"x": X_train_scaled},
    y=y_train,
    batch_size=50,
    shuffle=False,
    num_epochs=None)
estimator.train(input_fn = train_input,steps=1000) 
eval_input = tf.estimator.inputs.numpy_input_fn(
    x={"x": X_test_scaled},
    y=y_test, 
    shuffle=False,
    batch_size=X_test_scaled.shape[0],
    num_epochs=1)
estimator.evaluate(eval_input,steps=None) 

الإخراج:

{'accuracy': 0.9637143,
 'average_loss': 0.12014342,
 'loss': 1682.0079,
 'global_step': 1000}

تؤدي البنية الحالية إلى دقة في مجموعة التقييم تبلغ حوالي 96 بالمائة.

الخطوة 6) تحسين النموذج

يمكنك محاولة تحسين النموذج عن طريق إضافة معلمات التنظيم.

يستخدم المُقدِّر هنا مُحسِّن Proximal AdaGrad بمعدل تسرب 0.3، مع ضبط قوة كلٍّ من L1 وL2 على 0.01. في شبكة TensorFlow العصبية، يُمكن الوصول إلى المُحسِّن عبر كائن التدريب متبوعًا باسم المُحسِّن. يوفر TensorFlow واجهة برمجة تطبيقات مُدمجة لمُحسِّن Proximal AdaGrad.

لإضافة خاصية التنظيم إلى الشبكة العصبية العميقة، يمكنك استخدام tf.train.ProximalAdagradOptimizer مع المعلمات التالية:

  • معدل التعلم: معدل التعليم
  • التنظيم L1: قوة التنظيم من المستوى الثاني
  • التنظيم L2: قوة التنظيم من المستوى الثاني
estimator_imp = tf.estimator.DNNClassifier(
    feature_columns=feature_columns,
    hidden_units=[300, 100],
    dropout=0.3, 
    n_classes = 10,
    optimizer=tf.train.ProximalAdagradOptimizer(
      learning_rate=0.01,
      l1_regularization_strength=0.01, 
      l2_regularization_strength=0.01
    ),
    model_dir = '/train/DNN1')
estimator_imp.train(input_fn = train_input,steps=1000) 
estimator_imp.evaluate(eval_input,steps=None) 

الإخراج:

{'accuracy': 0.95057142,
 'average_loss': 0.17318928,
 'loss': 2424.6499,
 'global_step': 2000}

لم تُحسّن القيم المختارة لتقليل التجاوز دقة النموذج. بلغت دقة النموذج الأول 96%، بينما بلغت دقة النموذج المُستخدم مع مُنظِّم L2 95%. يمكنك تجربة قيم مختلفة وملاحظة تأثيرها على الدقة.

الأسئلة الشائعة

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

ليس كما هو مكتوب. تم حذف tf.estimator في TensorFlow 2.16، ولم يعد tf.estimator.inputs.numpy_input_fn موجودًا. إما تثبيت TensorFlow 2.15، أو إعادة بناء الشبكة باستخدام طبقات tf.keras.layers.Dense مكونة من 300 و100 وحدة، ثم تدريبها باستخدام model.fit().

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

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

تم إغلاق موقع mldata.org تعلم الحروف تمت إزالة دالة fetch_mldata في الإصدار 0.22. استخدم بدلاً منها دالة fetch_openml('mnist_784', version=1). تقوم هذه الدالة بتنزيل نفس الأرقام المكتوبة بخط اليد (70,000 رقم) وتعيد البيانات والخصائص المستهدفة، لذا فإن بقية هذا الشرح تبقى كما هي.

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

لم يكن النموذج الأساسي يعاني من فرط التخصيص بشكل كبير، لذا فإن استخدام معدل تسرب قدره 0.3 بالإضافة إلى عقوبات L1 وL2 بقيمة 0.01 أدى إلى إزالة معظم السعة المفيدة. انخفضت الدقة من 0.9637143 إلى 0.95057142. لا يُفيد التنظيم إلا عندما تكون الفجوة بين نتائج التدريب والاختبار واسعة.

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

تلخيص هذه التدوينة بـ: