WEBVTT

00:00.390 --> 00:02.370
أهلا ومرحبا بكم في هذا البرنامج التعليمي.

00:02.490 --> 00:04.470
الآن لدينا عقل النموذج.

00:04.500 --> 00:06.170
لدينا أيضا المحسن.

00:06.180 --> 00:09.810
لذلك نحن مستعدون بشكل أساسي لتدريب وكلائنا المختلفين.

00:09.810 --> 00:11.520
هذه هي أدمغتنا المختلفة.

00:11.520 --> 00:18.180
من الآن فصاعدًا ، سنصنع وظيفة القطار الكبيرة هذه والتي ستحتوي على جميع خوارزمية a3c.

00:18.180 --> 00:25.080
وبالتالي ما نحن بصدد تنفيذه في هذا القطار ، ملف P هذا هو مجرد وظيفة قطار ضخمة.

00:25.080 --> 00:29.220
سيكونون مجرد وظيفة قطار كبيرة ، لا شيء آخر ، بلا صف.

00:29.220 --> 00:33.840
لكننا سنستخدم وظيفة القطار هذه في الخطوة الأخيرة من هذه الوحدة مع الكود الرئيسي.

00:33.840 --> 00:34.850
لذا ها نحن ذا.

00:34.860 --> 00:39.000
لكن قبل أن نبدأ ، يمكنك ملاحظة أنه ، حسنًا ، أولاً نقوم باستيراد بعض المكتبات.

00:39.000 --> 00:44.700
هذه هي المكتبات الكلاسيكية مع وحدة torch ، أعني مكتبة torch ، ثم مكتبة

00:44.700 --> 00:48.900
النهاية لإنشاء بيئة Atari ، والتي ستنطلق.

00:48.900 --> 00:55.710
ثم سنقوم بالطبع باستيراد صنفنا النشط من ملف النموذج هذا.

00:56.130 --> 01:03.960
وأخيرًا سنستخدم المتغير من torch undergrad لإجراء عمليات حسابية عالية الأداء للتدرج بفضل الرسوم البيانية

01:03.960 --> 01:05.550
الديناميكية.

01:05.730 --> 01:11.880
ومن ثم لدينا هذا ضمان وظيفة grats المشتركة التي لم أرغب في قضاء الكثير من الوقت في هذا الأمر لأنه

01:11.880 --> 01:17.550
حسنًا أولاً ، هذه مجرد وظيفة ستتأكد من أن كل شيء يعمل بشكل صحيح إذا لم يكن النموذج الذي

01:17.550 --> 01:20.250
يستخدمه الوكيل مشتركًا الانحدار.

01:20.250 --> 01:22.980
لذلك هذا هو السبب في أنها تسمى ضمان الشبكات المشتركة.

01:22.980 --> 01:27.870
والسبب الآخر هو أنني لا أعتقد أن هذه الوظيفة ضرورية ، لكننا لا نعرف أبدًا.

01:27.870 --> 01:32.820
وعلى الأقل مع هذا سيكون 100٪ متأكدًا من أن الكود سيعمل بشكل صحيح.

01:32.820 --> 01:34.620
لكن هذا ليس مهمًا حقًا.

01:34.620 --> 01:40.410
ما يجب أن نركز عليه هو وظيفة القطار هذه التي سنبدأ في تنفيذها الآن.

01:40.770 --> 01:44.280
ها نحن ذا ، ديف وندرب.

01:44.280 --> 01:45.960
سوف نسميها ببساطة قطار.

01:45.960 --> 01:48.720
وستتطلب وظيفة القطار عدة حجج.

01:48.810 --> 01:50.220
الأول هو الرتبة.

01:50.220 --> 01:52.440
سأشرح ما هو عليه في الثانية.

01:52.710 --> 01:59.670
الثاني هو المعلمات بحيث تكون جميع معلمات البيئة ، ثم المعلمة الثالثة

01:59.670 --> 02:02.640
ستكون نموذجًا مشتركًا.

02:02.910 --> 02:08.910
كما تعلمون ، النموذج المشترك هو ما سيحصل عليه الوكيل لإجراء استكشافه الصغير على عدد معين

02:08.910 --> 02:09.990
من الخطوات.

02:10.410 --> 02:14.910
وأخيرًا ، ستكون الحجة الأخيرة هي المُحسِّن.

02:14.910 --> 02:16.980
هذا هو الذي صنعناه سابقًا.

02:17.620 --> 02:18.480
مثالي جدا.

02:18.490 --> 02:19.930
هذه هي حججنا الأربع.

02:19.930 --> 02:23.870
والآن نحن جاهزون لبدء تنفيذ وظيفة القطار هذه.

02:23.890 --> 02:28.840
لذا فإن أول شيء سنفعله هو ، كما تعلم ، تتذكر ما تمثله a3c.

02:28.840 --> 02:32.320
إنها تعني وكلاء ناقد نشط متزامن.

02:32.320 --> 02:34.780
لذلك في a3c ، هناك متزامن.

02:34.780 --> 02:40.900
لذا كما فهمت ، علينا مزامنة كل وكيل تدريب ومزامنته ، سنستخدم

02:40.900 --> 02:45.460
الرتبة لتحويل كل بذرة بهذه الرتبة.

02:45.460 --> 02:52.030
لذا فإن معلمة التصنيف هذه هنا هي فقط لتغيير البذرة بحيث تتم مزامنة كل وكيل تدريب.

02:52.360 --> 02:59.200
لذلك ، على سبيل المثال ، إذا كان هناك n من وكلاء التدريب ، فستنتقل الرتب من واحد إلى N وسيكون

02:59.200 --> 03:02.360
هناك عدد صحيح واحد لكل وكيل من واحد إلى n.

03:02.380 --> 03:08.800
لذلك عندما نحول البذرة بواسطة خيط واحد ، فإن جميع الأرقام العشوائية الزائفة التي تم إنشاؤها بواسطة الخيط ستكون

03:08.800 --> 03:10.990
مستقلة تمامًا عن الخيوط الأخرى.

03:11.320 --> 03:18.550
ومع ذلك ، فإن البذور هي أرقام ثابتة ، لذلك عندما نعيد إنتاج التجربة ، سنجد الأحداث

03:18.550 --> 03:23.440
نفسها تمامًا وذلك لأنها حتمية فيما يتعلق بالبذرة.

03:23.440 --> 03:25.390
لذلك من المهم أن نفهم ذلك.

03:25.390 --> 03:31.510
وهذا هو السبب في أن أول شيء يتعين علينا القيام به هو مزامنة كل وكيل تدريب باستخدام الرتبة

03:31.510 --> 03:34.120
هنا لتحويل البذرة إلى الرتبة.

03:34.120 --> 03:35.020
لذلك دعونا نفعل هذا.

03:35.020 --> 03:38.710
للقيام بذلك ، سنأخذ مكتبة الشعلة الخاصة بنا.

03:39.010 --> 03:45.250
ثم سنحصل على البذرة بتسطير أسفل السطر يدويًا وأقواس أولية.

03:45.250 --> 03:46.420
هذه وظيفة.

03:46.420 --> 03:53.020
والآن سنأخذ بذور جميع العوامل التي يمكننا الوصول إليها باستخدام معلمات نقطة البداية

03:53.020 --> 03:56.620
ونحولها حسب الرتبة لمزامنة كل من هذه العوامل.

03:56.620 --> 03:59.650
سنضيف فقط هنا بالإضافة إلى رتبة.

04:00.340 --> 04:07.390
وسيؤدي ذلك إلى تحويل البذرة بالرتبة إلى حرمان كل وكيل تدريب لأن هناك بذرة واحدة

04:07.390 --> 04:09.370
لكل وكيل تدريب.

04:09.820 --> 04:11.380
حسنًا ، أول شيء تم فعله.

04:11.380 --> 04:13.090
والآن الخطوة التالية.

04:13.090 --> 04:15.310
الخطوة التالية هي الحصول على البيئة.

04:15.310 --> 04:20.770
لذلك سننشئ متغيرًا جديدًا نسميه env والآن سنستخدم وظيفة

04:20.770 --> 04:25.990
Atari end من الوحدة النهائية لإنشاء بيئة للاختراق.

04:25.990 --> 04:27.930
هذا هو الحصول على بيئة الاختراق.

04:27.940 --> 04:33.460
لذلك نأخذ هذه الوظيفة ، وننشئ Atari و.

04:34.040 --> 04:39.680
والآن علينا إدخال حجة واحدة فقط ، وهي معلمات البيئة ، ولدينا هذه الحجة

04:39.680 --> 04:42.550
لأنها أحد مدخلات دالة القطار.

04:42.560 --> 04:47.270
هذه هي المعلمة التي ستكون معلمات بيئة الاختراق.

04:47.270 --> 04:54.920
وبالتالي للحصول على بيئة الاختراق ، نأخذ وسيطة المعلمة هذه ، ثم النقطة ثم نحصل على اسم

04:54.920 --> 05:01.910
env والذي سيكون في المستقبل في الكود التالي مع الوظيفة الرئيسية التي ستنفذ الكود

05:01.910 --> 05:05.020
بأكمله سيكون عام الاختراق.

05:05.850 --> 05:06.180
حسنا.

05:06.180 --> 05:08.940
وهذا يجعلنا بيئة مثالية.

05:09.330 --> 05:15.810
والآن الخطوة التالية هي محاذاة بذرة البيئة على أحد العوامل.

05:15.900 --> 05:17.340
ولماذا نفعل ذلك؟

05:17.370 --> 05:24.150
لأنه ، تذكر ، كل وكيل من طراز a3c لديه رؤيته الخاصة للبيئة ، مثل نسخته الخاصة

05:24.150 --> 05:25.770
من البيئة.

05:25.770 --> 05:31.890
وبالتالي ، نحتاج إلى محاذاة كل من الوكلاء في إصدار واحد محدد من البيئة.

05:31.890 --> 05:37.230
وللقيام بذلك ، سنستخدم البذرة لأن كل بذرة تحدد بيئة معينة.

05:37.230 --> 05:42.060
لذلك من خلال ربط بذرة مختلفة بكل وكيل ، حسنًا ، سنحصل على ما نريده بالضبط.

05:42.090 --> 05:45.960
أي أن كل وكيل سيكون له بيئته الخاصة.

05:46.350 --> 05:47.730
فكيف يمكننا فعل ذلك؟

05:47.730 --> 05:55.740
يمكننا أن نأخذ بيئتنا ، ثم نضيفها ، ثم نستخدم وظيفة البذور لاختيار البذرة التي نريد الحصول عليها

05:55.740 --> 05:57.270
من أجل البيئة.

05:57.270 --> 06:02.460
والآن لمحاذاة بذرة البيئة مع بذرة الوكيل ، حسنًا ، نحتاج ببساطة إلى

06:02.460 --> 06:10.380
الحصول على هذا لأن هذا يتوافق مع بذرة الوكيل الذي تم تغييره بفضل الترتيب للحصول على عامل التدريب المتزامن

06:10.380 --> 06:13.800
هذا لأنهم كل ذلك على بذرة مختلفة.

06:13.950 --> 06:16.350
لذلك نحن فقط بحاجة إلى وضع ذلك هنا.

06:16.350 --> 06:20.220
وسيؤدي هذا إلى محاذاة بذرة البيئة على أحد الفاعلين.

06:20.970 --> 06:21.530
تمام.

06:21.990 --> 06:26.940
الآن سوف نحصل على نموذجنا الذي هو أدمغتنا الرئيسية الثلاثة.

06:26.940 --> 06:32.070
وهذا هو الوقت الذي سنستخدم فيه فئة الناقد النشط من ملف النموذج الخاص بنا.

06:32.070 --> 06:38.970
لذلك سنقوم بشكل أساسي بإنشاء كائن من فئة الممثلين وسوف نسمي هذا النموذج أو الدماغ

06:38.970 --> 06:40.950
، إذا كنت ترغب في ذلك.

06:40.950 --> 06:47.190
ولكن سيحتوي هذا الكائن بشكل أساسي على جميع الالتفافات ، و STM ، والاتصال الخطي الكامل ، والوظيفة

06:47.190 --> 06:49.350
الأمامية لنشر الإشارة.

06:49.350 --> 06:55.590
لذلك سوف يحتوي بشكل أساسي على أدمغة الممثل والناقد مع القدرة على نشر الإشارة في جميع أنحاء

06:55.590 --> 06:58.590
الدماغ للحصول على الإخراج النهائي.

06:59.010 --> 07:00.000
لذلك دعونا نفعل هذا.

07:00.000 --> 07:02.520
لنقم بإنشاء نموذجنا.

07:02.520 --> 07:06.570
كما قلنا ، نريد أن نطلق على هذا النموذج الكائن.

07:06.900 --> 07:14.940
وهكذا نقوم بإنشاء كائن من فئة التمثيل ، وبالتالي نأخذ الفصل والممثل والناقد ، ونتذكر الآن الحجج

07:14.940 --> 07:17.130
التي نحتاج إلى إدخالها.

07:17.130 --> 07:22.350
هذه في الواقع حجج الدالة init التي لا يتعين علينا إدخالها.

07:22.560 --> 07:26.250
هذا ما يتعين علينا القيام به لاستخدام الكائن في طريقة init.

07:26.250 --> 07:31.500
ولكن بعد ذلك ، فإن الحجج التي يتعين علينا إدخالها هي مدخلات nom وهو شكل المدخلات.

07:31.500 --> 07:38.460
هذه هي أبعاد مدخلاتنا وصورنا ومساحة العمل التي تحتوي ، كما تعلمون ، على مجموعة الإجراءات.

07:38.460 --> 07:42.480
لذلك دعونا ندخل هذه المعطيات في دالة القطار.

07:42.480 --> 07:49.770
أولًا ، يمكننا الحصول عليه مع بيئتنا ونقاطنا ثم نستخدم مساحة المراقبة.

07:50.980 --> 07:56.800
إذن هذه هي مساحة الملاحظات ثم تبعثر ثم نحصل على عدد المدخلات التي نحصل عليها.

07:57.470 --> 07:58.970
الأقواس صفر.

07:59.000 --> 07:59.390
حسنا.

07:59.390 --> 08:01.010
هذه أربعة مدخلات خدر.

08:01.010 --> 08:04.550
والآن لمساحة العمل.

08:04.580 --> 08:06.080
حسنًا ، هذا هو نفسه تقريبًا.

08:06.080 --> 08:09.620
لكننا نحتاج أن نحصل عليه من بيئتنا التي نستوردها.

08:09.620 --> 08:11.900
ثم dut ثم مساحة العمل.

08:12.740 --> 08:13.160
حسنا.

08:13.160 --> 08:17.770
وهذا يعطينا الحجج التي نحتاج إلى إدخالها عند إنشاء كائن.

08:17.780 --> 08:20.030
العبرة من فعل إنشاء فئة.

08:20.630 --> 08:25.000
الآن لدينا نموذجنا ، والآن الخطوة التالية هي تحضير حالة الإدخال.

08:25.010 --> 08:27.530
لذا تذكر أننا ما زلنا نقوم بالتعلم المعزز العميق.

08:27.530 --> 08:34.340
إذن حالات الإدخال هي صور المدخلات ، وبالتالي سيكون هذا في الأصل مصفوفة متعددة الأجزاء تحتوي

08:34.340 --> 08:39.260
على قناة واحدة لأننا سنعمل مع الصور بالأبيض والأسود وستكون أبعادها

08:39.260 --> 08:40.580
42 × 42.

08:40.730 --> 08:46.250
لكن من المهم أن نفهم وأن نضع في اعتبارنا هنا أن حالات الإدخال هي صور المدخلات.

08:46.400 --> 08:51.800
أولًا ، ما علينا فعله هو الحصول على الترقيم ، ثم سنحوله إلى موتر شعلة.

08:51.800 --> 08:58.190
لكن الخطوة الأولى كما فعلنا سابقًا ، هي الحصول على إمبراطورية صحيحة وفهمها ، إنها في الواقع بسيطة

08:58.190 --> 08:58.880
للغاية.

08:58.880 --> 09:05.030
حسنًا ، أولاً ، نحتاج إلى إنشاء متغير لحالة الإدخال ، والذي سنسميه الحالة وهذا

09:05.030 --> 09:12.770
للحصول على المصفوفة ، نحتاج ببساطة إلى أخذ بيئتنا ثم إضافة ذلك ثم استخدام وظيفة إعادة الضبط.

09:12.920 --> 09:22.340
وسيؤدي ذلك إلى تهيئة الحالة كمصفوفة من الأبعاد واحدًا في 42 × 42 ، ويعني أحدهما قناة واحدة ، لذا فإن الأسود في

09:22.340 --> 09:28.220
الصورة البيضاء و 42 × 42 هو بالطبع أبعاد الصورة وعدد البكسل على العرض

09:28.220 --> 09:30.620
وعدد بكسل على الارتفاع.

09:30.620 --> 09:34.490
إذن هذه هي الأبعاد فقط وهذه هي الأبعاد التي سنعمل معها.

09:34.520 --> 09:41.270
والآن ، بعد أن حصلنا على هذا حقًا ، لأن هذا سيوفر لنا هذه الصور بمثل هذه الأبعاد في المصفوفات

09:41.270 --> 09:45.320
، يمكننا الآن تحويلها إلى مستشعرات شعلة.

09:45.320 --> 09:50.750
وللقيام بذلك بشكل جيد ، سنقوم بتحديث الحالة مرة أخرى لأننا لسنا بحاجة للاحتفاظ بالفيروس.

09:50.930 --> 09:54.950
وهذا هو المكان الذي نستخدم فيه وحدة الشعلة.

09:54.950 --> 09:57.470
وتذكر ، لقد فعلنا ذلك بالفعل من أجل الهلاك.

09:57.590 --> 10:05.080
نستخدم الدالة من الشرطة السفلية num بالأقواس ، وداخل هذه الدالة نحتاج إلى إدخال الرقم

10:05.100 --> 10:08.300
الذي نريد تحويله إلى موتر شعلة.

10:08.300 --> 10:09.950
وهذه هي الدولة.

10:09.950 --> 10:16.100
سيصبح الإصدار السابق من الحالة في مصفوفة numpy من خلال تطبيق موتر الشعلة من خلال

10:16.100 --> 10:17.030
الوظيفة.

10:17.030 --> 10:24.740
هذا يخلق موترًا من الحالة والآن نحتاج فقط إلى تهيئة المتغير المنجز.

10:24.740 --> 10:29.900
تذكر أن المتغير المنجز هو بشكل عام المتغير الذي يقول إذا انتهت إحدى الحلقات

10:29.900 --> 10:36.590
أو إذا انتهت اللعبة ، حسنًا هنا نريد فقط تقديم هذا المتغير المنجز وتهيئته إلى true لتحديد أن هذا المتغير

10:36.590 --> 10:40.580
المنجز سيكون مساويًا لـ true عند انتهت اللعبة.

10:41.000 --> 10:45.650
لذلك سيكون هذا مفيدًا في وقت لاحق حتى لا يلعب الذكاء الاصطناعي إلى أجل غير مسمى حتى ينفجر.

10:46.690 --> 10:47.230
حسنا.

10:47.230 --> 10:54.250
كانت هذه في الأساس بداية وظيفة القطار هذه مع بعض التهيئة وبعض الأشياء التي يتعين علينا القيام

10:54.250 --> 10:55.150
بها.

10:55.180 --> 11:00.370
كان الجزء الأكثر أهمية هنا هو أنه يتعين علينا مزامنة كل وكيل تدريب.

11:00.370 --> 11:04.870
إذن هذا هو مبدأ 1/1 من نموذج a3c الذي يتعين علينا تطبيقه.

11:04.870 --> 11:09.660
والآن في البرنامج التعليمي التالي ، سننتقل إلى المزامنة مع النموذج المشترك.

11:09.670 --> 11:14.530
دعونا لا ننسى أن هناك نماذج مختلفة ، ولكن أيضًا النموذج المشترك ، وهو نموذج يشترك

11:14.530 --> 11:15.940
فيه جميع الوكلاء.

11:15.940 --> 11:21.850
ولذا يتعين علينا المزامنة مع هذا النموذج المشترك بحيث يمكن لكل وكيل الحصول على هذا النموذج المشترك

11:21.850 --> 11:25.420
للمضي قدمًا في استكشاف صغير لعدد معين من الخطوات.

11:25.720 --> 11:27.940
هذا ما سنفعله في الدرس التالي.

11:27.940 --> 11:29.260
وحتى ذلك الحين ، استمتع.

11:29.260 --> 11:29.770
أنا.
