وكلاء التعلم الآلي في الوحدة

صورة

كتب هذا المقال عن وكلاء التعلم الآلي في يونيتي مايكل لانهام ، وهو مبتكر تقني ومطور نشط لليونيتي ومستشار ومدير ومؤلف للعديد من ألعاب Unity ومشاريع الرسوم والكتب.

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

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

تثبيت وكلاء ML


في هذا القسم ، سأتحدث بإيجاز عن الخطوات التي يجب اتخاذها لتثبيت ML-Agents SDK. لا تزال هذه المادة في مرحلة تجريبية وقد تختلف من إصدار إلى آخر. اتبع هذه الخطوات:

  1. تثبيت Git على الكمبيوتر ؛ إنه يعمل من سطر الأوامر. Git هو نظام شائع للغاية لإدارة كود المصدر ، وهناك العديد من الموارد على الإنترنت حول تثبيت واستخدام Git عبر الأنظمة الأساسية. بعد تثبيت Git ، تأكد من أنه يعمل عن طريق إنشاء نسخة من أي مستودع.
  2. افتح موجه الأوامر أو قذيفة العادية. يمكن لمستخدمي Windows فتح نافذة أناكوندا.
  3. انتقل إلى مجلد العمل حيث تريد وضع الكود الجديد وأدخل الأمر التالي (يمكن لمستخدمي Windows تحديد C: \ ML-Agents):

      بوابة استنساخ https://github.com/Unity-Technologies/ml-agents 
  4. لذا ، يمكنك استنساخ مستودع ml-agents على جهاز الكمبيوتر الخاص بك وإنشاء مجلد جديد بنفس الاسم. يمكنك أيضًا إضافة رقم إصدار إلى اسم المجلد. الوحدة ، مثلها مثل عالم الذكاء الاصطناعي تقريبًا ، تتغير باستمرار ، على الأقل حتى الآن. هذا يعني أن التغييرات الجديدة تظهر باستمرار. في وقت كتابة هذا التقرير ، نقوم باستنساخ المستودع في مجلد ml-agents.6:

      بوابة استنساخ https://github.com/Unity-Technologies/ml-agents ml-agents.6 
  5. إنشاء بيئة افتراضية جديدة للعوامل ml وتحديد الإصدار 3.6 ، مثل هذا:

      #Windows 
     كوندا خلق -n مل وكلاء بيثون = 3.6
     
     #Mac
     استخدم الوثائق لبيئتك المفضلة 
  6. قم بتنشيط البيئة الخاصة بك مرة أخرى باستخدام Anaconda:

      تفعيل مل وكلاء 
  7. تثبيت TensorFlow. في Anaconda ، يمكن القيام بذلك باستخدام الأمر التالي:

      نقطة تثبيت tensorflow == 1.7.1 
  8. تثبيت حزم بيثون. في أناكوندا ، أدخل ما يلي:

    cd ML-Agents #from root folder cd ml-agents or cd ml-agents.6 #for example cd ml-agents pip install -e . or pip3 install -e . 
  9. لذلك قمت بتثبيت جميع حزم وكلاء SDK اللازمة ؛ هذا قد يستغرق عدة دقائق. لا تغلق النافذة ، وسوف تأتي في متناول اليدين قريبا.

لذلك قمنا بتثبيت وتكوين Unity Python SDK لـ ML-Agents. في القسم التالي ، سنتعلم كيفية إعداد وتدريب أحد البيئات الكثيرة التي توفرها Unity.

تدريب الوكلاء


الآن يمكننا الوصول إلى العمل على الفور واستكشاف الأمثلة التي تستخدم التعلم التعزيز العميق (DRL). لحسن الحظ ، هناك عدة أمثلة في مجموعة أدوات الوكيل الجديد لإظهار قوة المحرك. افتح Unity أو Unity Hub ، واتبع الخطوات التالية:

  1. انقر فوق الزر "فتح المشروع" في الجزء العلوي من مربع الحوار "المشروع".
  2. حدد موقع وافتح مجلد مشروع UnitySDK ، كما هو موضح في لقطة الشاشة:


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


    فتح مثال على مشهد GridWorld
  5. حدد كائن GridAcademy في إطار التسلسل الهرمي.
  6. انتقل إلى نافذة المفتش وبجوار حقل Brains ، انقر فوق الرمز لفتح مربع حوار Brain select:

  7. حدد الدماغ من GridWorldPlayer. ينتمي هذا الدماغ إلى اللاعب ، أي أنه بإمكان اللاعب (أنت) التحكم في اللعبة.
  8. انقر فوق الزر "تشغيل" أعلى المحرر وشاهد البيئة. منذ إعداد اللعبة الآن للتحكم في اللاعب ، يمكنك استخدام مفاتيح WASD لتحريك المكعب. وتتمثل المهمة في تحريك المكعب الأزرق إلى رمز + الأخضر ، مع تجنب علامة X الحمراء.

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

ما في الدماغ؟


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

عملية إعداد وبدء تدريب وكيل RL في الوحدة بسيطة للغاية. تستخدم الوحدة بيثون الخارجي لبناء نموذج للدماغ التعلم. استخدام Python له معنى كبير لأن هناك بالفعل العديد من مكتبات التعلم العميق (DL) التي بنيت حولها. لتدريب الوكيل في GridWorld ، أكمل الخطوات التالية:

  1. حدد GridAcademy مرة أخرى وحدد الدماغ GridWorldLearning في حقل Brains بدلاً من GridWorldPlayer:


    التبديل إلى استخدام GridWorldLearning Brain
  2. حدد مربع التحكم على اليمين. تشير هذه المعلمة البسيطة إلى إمكانية التحكم في الدماغ خارجيًا. يجب تمكين هذا الخيار.
  3. حدد كائن trueAgent في إطار التسلسل الهرمي ، ثم في نافذة المفتش ، قم بتغيير خاصية Brain في مكون Grid Agent إلى الدماغ GridWorldLearning:


    وظيفة الدماغ GridWorldLearning للوكيل
  4. في هذا المثال ، نحتاج إلى كلاً من Academy و Agent لاستخدام نفس تدريب GridWorldLearning. قم بالتبديل إلى إطار Anaconda أو Python وحدد المجلد ML-Agents / ml-agents.
  5. قم بتشغيل الأمر التالي في نافذة Anaconda أو Python باستخدام بيئة ml-agents الافتراضية:

      mlagents-learn config / trainer_config.yaml --run-id = firstRun - train 
  6. سيؤدي ذلك إلى إطلاق نموذج تدريب Unity PPO وعامل مثال مع التكوين المحدد. عند نقطة معينة ، ستطلب منك نافذة موجه الأوامر بدء تشغيل محرر الوحدة مع البيئة المحملة.
  7. انقر فوق تشغيل في محرر Unity لتشغيل بيئة GridWorld. بعد فترة وجيزة ، يجب أن ترى تدريب الوكلاء والإخراج إلى نافذة البرنامج النصي Python:


    تشغيل GridWorld في وضع التعلم
  8. لاحظ أن البرنامج النصي mlagents-Learn هو رمز Python يقوم بإنشاء نموذج RL لتشغيل وكيل. كما ترى من إخراج البرنامج النصي ، هناك العديد من المعلمات (البارامترات الفائقة) التي تحتاج إلى تكوين.
  9. دع العامل يتعلم بضعة آلاف من التكرار ولاحظ مدى سرعة تعلمه. أثبت النموذج الداخلي المستخدم هنا والمسمى PPO أنه نموذج تعليمي فعال للغاية للعديد من المهام المختلفة ، وهو مناسب تمامًا لتطوير اللعبة. مع معدات قوية بما فيه الكفاية ، يمكن للوكيل التعلم بشكل مثالي في أقل من ساعة.

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

مراقبة التعلم مع TensorBoard


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

  1. افتح نافذة أناكوندا أو بيثون. تفعيل البيئة الافتراضية وكلاء مل. لا تغلق النافذة التي يعمل فيها نموذج التدريب ؛ نحن في حاجة إليها للمتابعة.
  2. انتقل إلى المجلد ML-Agents / ml-agents ثم قم بتشغيل الأمر التالي:

      tensorboard --logdir = ملخصات 
  3. لذلك نطلق TensorBoard على خادم الويب المدمج لدينا. يمكنك تحميل الصفحة باستخدام عنوان URL الظاهر بعد الأمر السابق.
  4. أدخل عنوان URL الخاص بـ TensorBoard كما هو موضح في النافذة ، أو اكتب localhost: 6006 أو machinename: 6006 في المستعرض. بعد حوالي ساعة ، سترى شيئًا كهذا:


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

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


صورة مفصلة للرسوم البيانية لقسم البيئة

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


    الخسائر والتدريب المفضل

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


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

6. اترك الوكيل يعمل حتى يكتمل ولا يغلق TensorBoard.
7. ارجع إلى نافذة أناكوندا / بيثون التي دربت الدماغ وأجرت هذا الأمر:

  mlagents-learn config / trainer_config.yaml - run-id = secondRun - train 

8. سيُطلب منك مرة أخرى النقر فوق "تشغيل" في المحرر ؛ افعلها دع الوكيل يبدأ التدريب وإجراء عدة جلسات. في هذه العملية ، شاهد نافذة TensorBoard ولاحظ كيف يتم عرض secondRun على الرسوم البيانية. يمكنك ترك هذا الوكيل يعمل حتى الانتهاء ، ولكن يمكنك إيقافه إذا كنت ترغب في ذلك.

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

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

إطلاق وكيل


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

دعونا نرى كيف يعمل هذا ، وذلك باستخدام مثال الرسم البياني الذي قمنا بتدريبه للتو على بيئة GridWorld ؛ استخدامه بمثابة الدماغ الداخلي في الوحدة. اتبع الخطوات الموضحة في القسم التالي لإعداد واستخدام عقلك الداخلي:

  1. قم بتنزيل البرنامج المساعد TFSharp من هنا
  2. من قائمة المحرر ، حدد الأصول | استيراد حزمة | حزمة مخصصة ...
  3. ابحث عن حزمة الأصول التي قمت بتنزيلها للتو واستخدم مربعات حوار الاستيراد لتحميل المكون الإضافي في المشروع.
  4. من القائمة ، حدد تحرير | إعدادات المشروع. يتم فتح نافذة الإعدادات (ظهرت في الإصدار 2018.3)
  5. ابحث عن أحرف Scripting Define Symbols في خيارات المشغل وقم بتغيير النص إلى ENABLE_TENSORFLOW ، وقم أيضًا بتمكين السماح برمز غير آمن ، كما هو موضح في لقطة الشاشة:


    تحديد العلم ENABLE_TENSORFLOW
  6. ابحث عن كائن GridWorldAcademy في نافذة التسلسل الهرمي وتأكد من أنه يستخدم Brains | GridWorldLearning. تعطيل خيار التحكم في قسم العقول من البرنامج النصي أكاديمية الشبكة.
  7. ابحث عن دماغ GridWorldLearning في مجلد الأصول / أمثلة / GridWorld / Brains وتأكد من تعيين المعلمة Model في نافذة Inspector ، كما هو موضح في لقطة الشاشة:


    نموذج مهمة للدماغ
  8. يجب أن يتم بالفعل تعيين GridWorldLearning كنموذج. في هذا المثال ، نستخدم TFModel الذي يأتي مع مثال GridWorld.
  9. انقر فوق "تشغيل" لبدء المحرر ومعرفة كيفية قيام الوكيل بإدارة المكعب.

نطلق الآن بيئة الوحدة المدربة مسبقًا. في القسم التالي ، سوف نتعلم كيفية استخدام الدماغ الذي قمنا بتدريبه في القسم السابق.

تحميل تدريب الدماغ


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

  1. انتقل إلى المجلد ML-Agents / ml-agents / models / firstRun-0. يوجد داخل هذا المجلد ملف GridWorldLearning.bytes. اسحب هذا الملف إلى المجلد Project / Assets / ML-Agents / أمثلة / GridWorld / TFModels داخل محرر Unity:


    سحب رسم بايت في الوحدة
  2. لذلك نحن نستورد الرسم البياني في مشروع الوحدة كمورد ونعيد تسميته إلى GridWorldLearning 1. يقوم المحرك بذلك لأن النموذج الافتراضي له بالفعل نفس الاسم.
  3. ابحث عن GridWorldLearning في مجلد الدماغ ، وحدده في نافذة Inspector واسحب نموذج GridWorldLearning 1 الجديد إلى حقل نموذج لمعلمات الدماغ:


    تحميل الدماغ في حقل الرسم البياني النموذجي
  4. في هذه المرحلة ، لا نحتاج إلى تغيير أي معلمات أخرى ، ولكن نولي اهتمامًا خاصًا لكيفية تكوين الدماغ. في الوقت الحالي ، ستفعل الإعدادات القياسية.
  5. انقر فوق "تشغيل" في محرر Unity وشاهد كيف يتحرك الوكيل بنجاح حول اللعبة.
  6. يعتمد نجاح الوكيل في اللعبة على وقت تدريبه. إذا سمحت له بإكمال التدريب ، فسيكون الوكيل مشابهاً لوكيل الوحدة المدربين تدريباً كاملاً.

Source: https://habr.com/ru/post/ar454612/


All Articles