وحدة التعلم الآلي: تعليم وكلاء MO على القفز فوق الجدران

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

أداة Unity ML-Agents هي مكون إضافي جديد في محرك لعبة Unity ، مما يسمح لك باستخدام Unity كمنشئ بيئة لتدريب وكلاء MO.

من لعب كرة القدم إلى المشي والقفز من الجدران وتدريب كلاب الذكاء الاصطناعي على اللعب بالعصي ، توفر مجموعة أدوات Unity ML-Agents Toolkit مجموعة واسعة من الشروط لوكلاء التدريب.

في هذه المقالة ، سنلقي نظرة على كيفية عمل وكلاء Unity MO ، وبعد ذلك سنعلم أحد هؤلاء العملاء أن يقفز فوق الجدران.

صورة


ما هو وكلاء الوحدة ML؟


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

يتكون المكون الإضافي من ثلاثة مكونات:



الأول - بيئة تعليمية ( بيئة التعلم ) ، تحتوي على مشاهد الوحدة والعناصر البيئية.

والثاني هو Python API ، الذي يحتوي على خوارزميات RL (مثل PPO - Proximal Policy Optimization و SAC - Soft Actor-Critic). نستخدم واجهة برمجة التطبيقات هذه لبدء التدريب والاختبار وما إلى ذلك. وهي مرتبطة ببيئة التعلم من خلال المكون الثالث - أداة اتصال خارجية .


مما تتكون البيئة التعليمية


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



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

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



لنفترض أن الوكيل يحتاج إلى تعلم كيفية لعب منصة. ستبدو عملية RL في هذه الحالة كما يلي:

  • يتلقى الوكيل الحالة S 0 من البيئة - سيكون هذا الإطار الأول من لعبتنا.
  • استنادًا إلى الحالة S 0 ، ينفذ الوكيل الإجراء A 0 وينتقل إلى اليمين.
  • تنتقل البيئة إلى حالة جديدة S 1 .
  • يحصل الوكيل على مكافأة R 1 لعدم وفاته ( مكافأة إيجابية +1).

تشكل دورة RL هذه سلسلة من الحالة والعمل والمكافأة. هدف الوكيل هو تعظيم المكافأة الإجمالية المتوقعة.



وبالتالي ، ترسل الأكاديمية تعليمات إلى الوكلاء وتوفر التزامن في تنفيذها ، وهي:

  • جمع الملاحظات ؛
  • اختيار العمل وفقا للتعليمات المنصوص عليها ؛
  • تنفيذ العمل ؛
  • إعادة تعيين إذا تم الوصول إلى عدد الخطوات أو تم الوصول إلى الهدف.


نعلم الوكيل للقفز من خلال الجدران


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

يمكن أيضًا تنزيل النماذج المدربة بالفعل على GitHub .

قفز الحواجز على البيئة التعليمية


الهدف من هذه البيئة هو تعليم الوكيل للوصول إلى البلاط الأخضر.

النظر في ثلاث حالات:

1. لا توجد جدران ، ويحتاج وكيلنا فقط للوصول إلى البلاط.

صورة

2. يحتاج الوكيل إلى تعلم كيفية القفز من أجل الوصول إلى البلاط الأخضر.

صورة

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

صورة

سنعلم الوكيل سيناريوهين للسلوك اعتمادًا على ارتفاع الجدار:

  • SmallWallJump في الحالات بدون جدران أو على ارتفاعات منخفضة في الجدران ؛
  • BigWallJump في حالة الجدران العالية.

هذا ما سيبدو عليه نظام المكافأة:



في ملاحظاتنا ، نحن لا نستخدم إطارًا عاديًا ، ولكن 14 reykast ، يمكن لكل منها اكتشاف 4 أشياء محتملة. في هذه الحالة ، يمكن اعتبار reykast بمثابة أشعة ليزر يمكنها تحديد ما إذا كانت تمر عبر كائن.

سنستخدم أيضًا منصب الوكيل العالمي في برنامجنا.

صورة

هناك أربعة خيارات ممكنة في منطقتنا:



الهدف هو تحقيق بلاط أخضر بمتوسط ​​مكافأة 0.8 .

لذلك دعونا نبدأ!


بادئ ذي بدء ، افتح مشروع UnitySDK .

من بين الأمثلة التي تحتاجها للعثور على مشهد WallJump وفتحه .

كما ترون ، هناك العديد من العوامل على المسرح ، كل منها مأخوذ من نفس البادئة ، وكلهم لديهم نفس "الدماغ".

صورة

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

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

في معلمات السلوك ، تحتاج إلى حذف النموذج. إذا كان لدينا العديد من وحدات معالجة الرسومات تحت تصرفنا ، يمكنك استخدام جهاز الاستدلال من وحدة المعالجة المركزية كوحدة معالجة رسومات.

صورة

في مكون وكيل Jump Jump ، يجب عليك إزالة العقول لحالة بدون جدران ، وكذلك للجدران المنخفضة والعالية.

صورة

بعد ذلك ، يمكنك البدء في تدريب وكيلك من الصفر.

بالنسبة للتدريب الأول ، نقوم ببساطة بتغيير العدد الإجمالي لخطوات التدريب لسيناريوهين سلوكيين: SmallWallJump و BigWallJump. حتى نتمكن من تحقيق الهدف في 300 ألف خطوة فقط. للقيام بذلك ، في config.yaml config / trainer ، قم بتغيير max_steps إلى 3e5 لحالات SmallWallJump و BigWallJump.

صورة

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

لذا ، أولاً ، باستخدام Python API ، نحتاج إلى الاتصال بموصل خارجي بحيث يوجه الأكاديمية إلى إطلاق الوكلاء. للقيام بذلك ، افتح الطرفية حيث يوجد ml-agent-master واكتب فيها:

mlagents-learn config/trainer_config.yaml — run-id=”WallJump_FirstTrain” — train

سيطلب منك هذا الأمر بدء مشهد الوحدة. للقيام بذلك ، اضغط على ► أعلى المحرر.

صورة

يمكنك مشاهدة تدريب وكلائك في Tensorboard باستخدام الأمر التالي:

tensorboard — logdir=summaries

عندما ينتهي التدريب ، تحتاج إلى نقل ملفات النموذج المحفوظة الموجودة في ml-agent-master / models إلى UnitySDK / Assets / ML-Agents / أمثلة / WallJump / TFModels . بعد ذلك ، افتح محرر الوحدة مرة أخرى وحدد مشهد WallJump ، حيث نفتح كائن WallJumpArea النهائي .

بعد ذلك ، حدد العامل وسحب معلمات السلوك الخاصة به في ملف SmallWallJump.nn إلى Model Placeholder.

صورة

نقل أيضًا:

  1. SmallWallJump.nn في No Wall Brain Placeholder.
  2. SmallWallJump.nn في Small Wall Brain Placeholder.
  3. BigWallJump.nn في No Wall Brain Placeholder.

صورة

بعد ذلك ، اضغط على زر at أعلى المحرر وستنتهي! اكتملت الآن خوارزمية تكوين تدريب الوكيل.

صورة

وقت التجربة


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


تخفيض معامل الخصم إلى 0.95


لذا نعلم أن:

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

فكرة هذه التجربة هي أنه إذا قمنا بزيادة الخصم عن طريق تقليل النطاق من 0.99 إلى 0.95 ، فستكون المكافأة قصيرة المدى أولوية بالنسبة للوكيل - مما قد يساعده على الاقتراب بسرعة من سياسة السلوك الأمثل.



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



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

زيادة تعقيد الشبكة العصبية


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

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



لذا ، دربنا الوكيل على القفز فوق الجدران ، وهذا كل شيء لهذا اليوم. تذكر أنه لمقارنة النتائج ، يمكن تنزيل النماذج المدربة هنا .

صورة

All Articles