أهلا ومرحبا بكم في هذا البرنامج التعليمي.
الآن لدينا عقل النموذج.
لدينا أيضا المحسن.
لذلك نحن مستعدون بشكل أساسي لتدريب وكلائنا المختلفين.
هذه هي أدمغتنا المختلفة.
من الآن فصاعدًا ، سنصنع وظيفة القطار الكبيرة هذه والتي ستحتوي على جميع خوارزمية a3c.
وبالتالي ما نحن بصدد تنفيذه في هذا القطار ، ملف P هذا هو مجرد وظيفة قطار ضخمة.
سيكونون مجرد وظيفة قطار كبيرة ، لا شيء آخر ، بلا صف.
لكننا سنستخدم وظيفة القطار هذه في الخطوة الأخيرة من هذه الوحدة مع الكود الرئيسي.
لذا ها نحن ذا.
لكن قبل أن نبدأ ، يمكنك ملاحظة أنه ، حسنًا ، أولاً نقوم باستيراد بعض المكتبات.
هذه هي المكتبات الكلاسيكية مع وحدة torch ، أعني مكتبة torch ، ثم مكتبة
النهاية لإنشاء بيئة Atari ، والتي ستنطلق.
ثم سنقوم بالطبع باستيراد صنفنا النشط من ملف النموذج هذا.
وأخيرًا سنستخدم المتغير من torch undergrad لإجراء عمليات حسابية عالية الأداء للتدرج بفضل الرسوم البيانية
الديناميكية.
ومن ثم لدينا هذا ضمان وظيفة grats المشتركة التي لم أرغب في قضاء الكثير من الوقت في هذا الأمر لأنه
حسنًا أولاً ، هذه مجرد وظيفة ستتأكد من أن كل شيء يعمل بشكل صحيح إذا لم يكن النموذج الذي
يستخدمه الوكيل مشتركًا الانحدار.
لذلك هذا هو السبب في أنها تسمى ضمان الشبكات المشتركة.
والسبب الآخر هو أنني لا أعتقد أن هذه الوظيفة ضرورية ، لكننا لا نعرف أبدًا.
وعلى الأقل مع هذا سيكون 100٪ متأكدًا من أن الكود سيعمل بشكل صحيح.
لكن هذا ليس مهمًا حقًا.
ما يجب أن نركز عليه هو وظيفة القطار هذه التي سنبدأ في تنفيذها الآن.
ها نحن ذا ، ديف وندرب.
سوف نسميها ببساطة قطار.
وستتطلب وظيفة القطار عدة حجج.
الأول هو الرتبة.
سأشرح ما هو عليه في الثانية.
الثاني هو المعلمات بحيث تكون جميع معلمات البيئة ، ثم المعلمة الثالثة
ستكون نموذجًا مشتركًا.
كما تعلمون ، النموذج المشترك هو ما سيحصل عليه الوكيل لإجراء استكشافه الصغير على عدد معين
من الخطوات.
وأخيرًا ، ستكون الحجة الأخيرة هي المُحسِّن.
هذا هو الذي صنعناه سابقًا.
مثالي جدا.
هذه هي حججنا الأربع.
والآن نحن جاهزون لبدء تنفيذ وظيفة القطار هذه.
لذا فإن أول شيء سنفعله هو ، كما تعلم ، تتذكر ما تمثله a3c.
إنها تعني وكلاء ناقد نشط متزامن.
لذلك في a3c ، هناك متزامن.
لذا كما فهمت ، علينا مزامنة كل وكيل تدريب ومزامنته ، سنستخدم
الرتبة لتحويل كل بذرة بهذه الرتبة.
لذا فإن معلمة التصنيف هذه هنا هي فقط لتغيير البذرة بحيث تتم مزامنة كل وكيل تدريب.
لذلك ، على سبيل المثال ، إذا كان هناك n من وكلاء التدريب ، فستنتقل الرتب من واحد إلى N وسيكون
هناك عدد صحيح واحد لكل وكيل من واحد إلى n.
لذلك عندما نحول البذرة بواسطة خيط واحد ، فإن جميع الأرقام العشوائية الزائفة التي تم إنشاؤها بواسطة الخيط ستكون
مستقلة تمامًا عن الخيوط الأخرى.
ومع ذلك ، فإن البذور هي أرقام ثابتة ، لذلك عندما نعيد إنتاج التجربة ، سنجد الأحداث
نفسها تمامًا وذلك لأنها حتمية فيما يتعلق بالبذرة.
لذلك من المهم أن نفهم ذلك.
وهذا هو السبب في أن أول شيء يتعين علينا القيام به هو مزامنة كل وكيل تدريب باستخدام الرتبة
هنا لتحويل البذرة إلى الرتبة.
لذلك دعونا نفعل هذا.
للقيام بذلك ، سنأخذ مكتبة الشعلة الخاصة بنا.
ثم سنحصل على البذرة بتسطير أسفل السطر يدويًا وأقواس أولية.
هذه وظيفة.
والآن سنأخذ بذور جميع العوامل التي يمكننا الوصول إليها باستخدام معلمات نقطة البداية
ونحولها حسب الرتبة لمزامنة كل من هذه العوامل.
سنضيف فقط هنا بالإضافة إلى رتبة.
وسيؤدي ذلك إلى تحويل البذرة بالرتبة إلى حرمان كل وكيل تدريب لأن هناك بذرة واحدة
لكل وكيل تدريب.
حسنًا ، أول شيء تم فعله.
والآن الخطوة التالية.
الخطوة التالية هي الحصول على البيئة.
لذلك سننشئ متغيرًا جديدًا نسميه env والآن سنستخدم وظيفة
Atari end من الوحدة النهائية لإنشاء بيئة للاختراق.
هذا هو الحصول على بيئة الاختراق.
لذلك نأخذ هذه الوظيفة ، وننشئ Atari و.
والآن علينا إدخال حجة واحدة فقط ، وهي معلمات البيئة ، ولدينا هذه الحجة
لأنها أحد مدخلات دالة القطار.
هذه هي المعلمة التي ستكون معلمات بيئة الاختراق.
وبالتالي للحصول على بيئة الاختراق ، نأخذ وسيطة المعلمة هذه ، ثم النقطة ثم نحصل على اسم
env والذي سيكون في المستقبل في الكود التالي مع الوظيفة الرئيسية التي ستنفذ الكود
بأكمله سيكون عام الاختراق.
حسنا.
وهذا يجعلنا بيئة مثالية.
والآن الخطوة التالية هي محاذاة بذرة البيئة على أحد العوامل.
ولماذا نفعل ذلك؟
لأنه ، تذكر ، كل وكيل من طراز a3c لديه رؤيته الخاصة للبيئة ، مثل نسخته الخاصة
من البيئة.
وبالتالي ، نحتاج إلى محاذاة كل من الوكلاء في إصدار واحد محدد من البيئة.
وللقيام بذلك ، سنستخدم البذرة لأن كل بذرة تحدد بيئة معينة.
لذلك من خلال ربط بذرة مختلفة بكل وكيل ، حسنًا ، سنحصل على ما نريده بالضبط.
أي أن كل وكيل سيكون له بيئته الخاصة.
فكيف يمكننا فعل ذلك؟
يمكننا أن نأخذ بيئتنا ، ثم نضيفها ، ثم نستخدم وظيفة البذور لاختيار البذرة التي نريد الحصول عليها
من أجل البيئة.
والآن لمحاذاة بذرة البيئة مع بذرة الوكيل ، حسنًا ، نحتاج ببساطة إلى
الحصول على هذا لأن هذا يتوافق مع بذرة الوكيل الذي تم تغييره بفضل الترتيب للحصول على عامل التدريب المتزامن
هذا لأنهم كل ذلك على بذرة مختلفة.
لذلك نحن فقط بحاجة إلى وضع ذلك هنا.
وسيؤدي هذا إلى محاذاة بذرة البيئة على أحد الفاعلين.
تمام.
الآن سوف نحصل على نموذجنا الذي هو أدمغتنا الرئيسية الثلاثة.
وهذا هو الوقت الذي سنستخدم فيه فئة الناقد النشط من ملف النموذج الخاص بنا.
لذلك سنقوم بشكل أساسي بإنشاء كائن من فئة الممثلين وسوف نسمي هذا النموذج أو الدماغ
، إذا كنت ترغب في ذلك.
ولكن سيحتوي هذا الكائن بشكل أساسي على جميع الالتفافات ، و STM ، والاتصال الخطي الكامل ، والوظيفة
الأمامية لنشر الإشارة.
لذلك سوف يحتوي بشكل أساسي على أدمغة الممثل والناقد مع القدرة على نشر الإشارة في جميع أنحاء
الدماغ للحصول على الإخراج النهائي.
لذلك دعونا نفعل هذا.
لنقم بإنشاء نموذجنا.
كما قلنا ، نريد أن نطلق على هذا النموذج الكائن.
وهكذا نقوم بإنشاء كائن من فئة التمثيل ، وبالتالي نأخذ الفصل والممثل والناقد ، ونتذكر الآن الحجج
التي نحتاج إلى إدخالها.
هذه في الواقع حجج الدالة init التي لا يتعين علينا إدخالها.
هذا ما يتعين علينا القيام به لاستخدام الكائن في طريقة init.
ولكن بعد ذلك ، فإن الحجج التي يتعين علينا إدخالها هي مدخلات nom وهو شكل المدخلات.
هذه هي أبعاد مدخلاتنا وصورنا ومساحة العمل التي تحتوي ، كما تعلمون ، على مجموعة الإجراءات.
لذلك دعونا ندخل هذه المعطيات في دالة القطار.
أولًا ، يمكننا الحصول عليه مع بيئتنا ونقاطنا ثم نستخدم مساحة المراقبة.
إذن هذه هي مساحة الملاحظات ثم تبعثر ثم نحصل على عدد المدخلات التي نحصل عليها.
الأقواس صفر.
حسنا.
هذه أربعة مدخلات خدر.
والآن لمساحة العمل.
حسنًا ، هذا هو نفسه تقريبًا.
لكننا نحتاج أن نحصل عليه من بيئتنا التي نستوردها.
ثم dut ثم مساحة العمل.
حسنا.
وهذا يعطينا الحجج التي نحتاج إلى إدخالها عند إنشاء كائن.
العبرة من فعل إنشاء فئة.
الآن لدينا نموذجنا ، والآن الخطوة التالية هي تحضير حالة الإدخال.
لذا تذكر أننا ما زلنا نقوم بالتعلم المعزز العميق.
إذن حالات الإدخال هي صور المدخلات ، وبالتالي سيكون هذا في الأصل مصفوفة متعددة الأجزاء تحتوي
على قناة واحدة لأننا سنعمل مع الصور بالأبيض والأسود وستكون أبعادها
42 × 42.
لكن من المهم أن نفهم وأن نضع في اعتبارنا هنا أن حالات الإدخال هي صور المدخلات.
أولًا ، ما علينا فعله هو الحصول على الترقيم ، ثم سنحوله إلى موتر شعلة.
لكن الخطوة الأولى كما فعلنا سابقًا ، هي الحصول على إمبراطورية صحيحة وفهمها ، إنها في الواقع بسيطة
للغاية.
حسنًا ، أولاً ، نحتاج إلى إنشاء متغير لحالة الإدخال ، والذي سنسميه الحالة وهذا
للحصول على المصفوفة ، نحتاج ببساطة إلى أخذ بيئتنا ثم إضافة ذلك ثم استخدام وظيفة إعادة الضبط.
وسيؤدي ذلك إلى تهيئة الحالة كمصفوفة من الأبعاد واحدًا في 42 × 42 ، ويعني أحدهما قناة واحدة ، لذا فإن الأسود في
الصورة البيضاء و 42 × 42 هو بالطبع أبعاد الصورة وعدد البكسل على العرض
وعدد بكسل على الارتفاع.
إذن هذه هي الأبعاد فقط وهذه هي الأبعاد التي سنعمل معها.
والآن ، بعد أن حصلنا على هذا حقًا ، لأن هذا سيوفر لنا هذه الصور بمثل هذه الأبعاد في المصفوفات
، يمكننا الآن تحويلها إلى مستشعرات شعلة.
وللقيام بذلك بشكل جيد ، سنقوم بتحديث الحالة مرة أخرى لأننا لسنا بحاجة للاحتفاظ بالفيروس.
وهذا هو المكان الذي نستخدم فيه وحدة الشعلة.
وتذكر ، لقد فعلنا ذلك بالفعل من أجل الهلاك.
نستخدم الدالة من الشرطة السفلية num بالأقواس ، وداخل هذه الدالة نحتاج إلى إدخال الرقم
الذي نريد تحويله إلى موتر شعلة.
وهذه هي الدولة.
سيصبح الإصدار السابق من الحالة في مصفوفة numpy من خلال تطبيق موتر الشعلة من خلال
الوظيفة.
هذا يخلق موترًا من الحالة والآن نحتاج فقط إلى تهيئة المتغير المنجز.
تذكر أن المتغير المنجز هو بشكل عام المتغير الذي يقول إذا انتهت إحدى الحلقات
أو إذا انتهت اللعبة ، حسنًا هنا نريد فقط تقديم هذا المتغير المنجز وتهيئته إلى true لتحديد أن هذا المتغير
المنجز سيكون مساويًا لـ true عند انتهت اللعبة.
لذلك سيكون هذا مفيدًا في وقت لاحق حتى لا يلعب الذكاء الاصطناعي إلى أجل غير مسمى حتى ينفجر.
حسنا.
كانت هذه في الأساس بداية وظيفة القطار هذه مع بعض التهيئة وبعض الأشياء التي يتعين علينا القيام
بها.
كان الجزء الأكثر أهمية هنا هو أنه يتعين علينا مزامنة كل وكيل تدريب.
إذن هذا هو مبدأ 1/1 من نموذج a3c الذي يتعين علينا تطبيقه.
والآن في البرنامج التعليمي التالي ، سننتقل إلى المزامنة مع النموذج المشترك.
دعونا لا ننسى أن هناك نماذج مختلفة ، ولكن أيضًا النموذج المشترك ، وهو نموذج يشترك
فيه جميع الوكلاء.
ولذا يتعين علينا المزامنة مع هذا النموذج المشترك بحيث يمكن لكل وكيل الحصول على هذا النموذج المشترك
للمضي قدمًا في استكشاف صغير لعدد معين من الخطوات.
هذا ما سنفعله في الدرس التالي.
وحتى ذلك الحين ، استمتع.
أنا.