WEBVTT

00:00.270 --> 00:02.610
مرحبًا ومرحبًا بكم في برنامج Python التعليمي هذا.

00:02.640 --> 00:06.720
حسنًا ، لقد قمنا للتو بتحديث الذاكرة بعد الوصول إلى الحالة الجديدة.

00:06.720 --> 00:08.880
والآن دعنا نهتم بالتحديث التالي.

00:09.240 --> 00:12.240
وفقًا لك الآن ، ما هو التحديث القادم؟

00:12.570 --> 00:16.560
حسنًا ، لقد انتهينا من عملية انتقال واحدة.

00:16.590 --> 00:20.930
لقد قمنا بتأريخ العنصر الأخير في الانتقال ، وهو الدولة الجديدة.

00:20.940 --> 00:23.310
والآن يبدو الأمر كما لو أننا نبدأ من جديد.

00:23.310 --> 00:27.390
وعندما نبدأ من جديد ، كيف يبدو الأمر ، كما تعلم ، نحن في هذه الحالة الجديدة

00:27.390 --> 00:28.140
من البيئة.

00:28.140 --> 00:31.230
إذن ما الذي يتعين علينا فعله الآن بشكل طبيعي؟

00:31.260 --> 00:37.120
حسنًا ، بالطبع ، يجب أن نلعب إجراءً لأننا حصلنا بالفعل على مراقبة الحالة الجديدة.

00:37.170 --> 00:40.380
لذا فإن الشيء الذي يتعين علينا القيام به الآن هو القيام بعمل ما.

00:40.620 --> 00:46.720
وبالتالي ، ما نحتاج إلى القيام به الآن هو ، بالطبع ، استخدام وظيفة الإجراء المحدد لتشغيل الإجراء.

00:46.740 --> 00:47.580
لنفعلها اذا.

00:47.580 --> 00:54.150
لنقم بإنشاء إجراء متغير جديد ودعنا نلعب الإجراء باستخدام وظيفة الإجراء المحدد.

00:54.150 --> 01:02.100
لذا فأنا أعتبر نفسي أولًا جيدًا لتحديد أن وظيفة إجراء التحديد هي طريقة لكائن الفئة المختلفة

01:02.100 --> 01:04.220
التي سيتم إنشاؤها.

01:04.230 --> 01:08.490
لذلك حدد الإجراء الذاتي.

01:08.490 --> 01:11.010
هنا نذهب ، حدد الإجراء الذاتي.

01:11.010 --> 01:17.550
وبعد ذلك ، بالطبع ، نظرًا لأن وظيفة إجراء التحديد تأخذ الحالة كمدخلات بسبب بالطبع ، فإن وظيفة

01:17.550 --> 01:25.140
إجراء التحديد ستعيد إخراج الشبكة العصبية عندما تدخل حالة الإدخال الحالية إلى الشبكة العصبية.

01:25.230 --> 01:27.450
لذلك علينا إدخال حالة الإدخال هنا.

01:27.570 --> 01:33.450
وبما أن هذه هي الحالة التي وصلنا إليها للتو في البيئة الآن حيث تكون حالة الإدخال بالطبع

01:33.450 --> 01:40.020
حالة جديدة لأن الحالة التي وصلنا إليها للتو في الوقت الذي كنا فيه الآن هي حالة جديدة.

01:40.020 --> 01:44.970
لذلك في وظيفة إجراء التحديد ، أقوم بإدخال حالة جديدة.

01:44.970 --> 01:45.420
حسنا.

01:45.420 --> 01:51.480
لذلك مع هذا السطر من التعليمات البرمجية ، نلعب ببساطة الإجراء الجديد بعد الوصول إلى الحالة الجديدة.

01:51.990 --> 01:52.340
تمام.

01:52.350 --> 01:58.740
والآن بعد أن نلعبها في العمل ، حسنًا ، نحصل على المكافأة وبالتالي نحصل على رد فعل بالمكافأة.

01:58.740 --> 02:04.590
وبالتالي ، إذا كان لدينا أكثر من 100 عنصر في الذاكرة ، فقد حان الوقت للتعلم.

02:04.590 --> 02:10.530
وبالتالي ، ما يجب علينا فعله الآن هو ما يأتي منطقيًا بعد اختيار فعل ما ، والذي هو ، بالطبع ، لمعرفة

02:10.530 --> 02:15.600
الاحتياجات ، والبدء في التعلم إذا كان يقوم بالأشياء بالطريقة الصحيحة.

02:15.600 --> 02:22.470
والآن بما أنها لعبت الحدث حيث سنجعل الذكاء الاصطناعي يتعلم من أفعاله في

02:22.470 --> 02:23.850
آخر 100 حدث.

02:23.970 --> 02:31.260
لكن قبل أن نطبق وظيفة التعلم هذه ، علينا أن نجعل هذا الشرط للتأكد من أننا وصلنا بالفعل إلى

02:31.260 --> 02:37.260
أكثر من 100 حدث لأننا ، كما تعلمون ، نتعلم من العينات العشوائية للذاكرة.

02:37.260 --> 02:40.920
كما تعلم ، لدينا ذاكرة ضخمة تضم 10000 عنصر.

02:40.920 --> 02:45.150
نحن نأخذ بعض العينات العشوائية لذاكرة 100 عنصر.

02:45.150 --> 02:52.620
والذكاء الاصطناعي يتعلم من المعلومات الواردة في هذه العينة المكونة من 100 انتقال عشوائي.

02:52.620 --> 03:00.660
لذلك دعونا فقط نجعل هذا الشرط للتأكد من أن عدد عناصر الذاكرة ، وذاكرة النقطة الذاتية

03:00.660 --> 03:02.820
، ثم توخي الحذر.

03:02.820 --> 03:04.140
مجرد خدعة صغيرة هنا.

03:04.140 --> 03:10.680
ذاكرة النقطة الذاتية هي كائن من فئة ذاكرة إعادة التشغيل ، ولكن بعد ذلك يكون لفئة ذاكرة إعادة التشغيل

03:10.680 --> 03:12.330
سمة وهي الذاكرة.

03:12.330 --> 03:15.240
لذلك في الحقيقة نحن بحاجة إلى أن نأخذ ذاكرة ذاتية.

03:15.240 --> 03:25.140
تلك الذاكرة ، الذاكرة الأولى هي موضوع فئة ذاكرة إعادة التشغيل والذاكرة الثانية هي السمة هنا

03:25.170 --> 03:27.360
الذاكرة الذاتية.

03:27.980 --> 03:36.470
لذلك إذا كان عدد العناصر في الذاكرة هو ما نريده أن يكون أكبر من 100 ثم ملون.

03:36.680 --> 03:38.670
ثم ماذا يحدث؟

03:38.690 --> 03:45.470
حسنًا ، يمكننا التعلم ، لكن قبل التعلم ، نحتاج إلى الحصول على هذه العينة العشوائية المكونة من 100 انتقال.

03:45.470 --> 03:48.500
وهذا يمكننا الحصول عليه من خلال دالة العينة.

03:48.590 --> 03:54.500
ونظرًا لأن دالة العينة تُرجع الدُفعات المختلفة ، فإن الحالات المحددة للوقت t تكون الحالات 20 زائد

03:54.530 --> 03:55.130
واحد.

03:55.130 --> 03:57.740
الإجراءات هي الوقت t والمكافآت في ذلك الوقت t.

03:57.890 --> 04:03.320
حسنًا ، ما نحتاج إلى القيام به الآن هو إنشاء بعض المتغيرات الجديدة التي ستكون مجموعة الحالات

04:03.320 --> 04:07.840
في وقت t مجموعة الحالات التالية ومجموعة المكافآت ومجموعة الإجراءات.

04:07.850 --> 04:15.950
ويمكننا ببساطة إعطاء نفس الأسماء التي قدمناها للحجج هنا ولصقها هنا.

04:15.950 --> 04:24.650
وستكون هذه المتغيرات مساوية لما تعرضه دالة العينة لأنها تُرجع مجموعات الحالات هذه

04:24.650 --> 04:25.950
بالضبط.

04:25.970 --> 04:28.060
الدول التالية المكافآت والإجراءات.

04:28.070 --> 04:33.620
لذا ما علينا فعله الآن هو الحصول على كائن ذاكرتنا أولاً.

04:33.620 --> 04:40.280
ومن ثم من كائن الذاكرة هذا ، سنستخدم طريقة العينة التي ستأخذ كمدخلات.

04:40.280 --> 04:46.250
حسنًا ، عدد الانتقالات التي نريد أن يتعلمها الذكاء الاصطناعي من ذلك هو 100.

04:46.370 --> 04:50.300
لهذا السبب تأكدنا من أن الذاكرة بها أكثر من 100 انتقال.

04:50.300 --> 04:54.620
لذلك سيتعلم من 100 انتقال للذاكرة.

04:54.620 --> 04:56.390
لذا فإن التعلم سيكون أفضل بكثير.

04:56.390 --> 04:59.450
والآن دعونا نجعل هذا التعلم يحدث.

04:59.450 --> 05:06.350
حسنًا ، نظرًا لأن طريقة التعلم هي إحدى طرق فئة الانتشار لدينا ، حسنًا ، نحتاج إلى الوصول إلى طريقة

05:06.350 --> 05:11.720
التعلم هذه من الكائنات المستقبلية التي سيتم إنشاؤها من فئة مختلفة.

05:11.720 --> 05:14.240
وبالتالي ، ما نحتاج إلى أخذه هو الذات.

05:14.240 --> 05:23.690
لذا تشير الذات إلى هذا الكائن إلى الفصل ثم تتعلم على أنها طريقة التعلم هذه ، وتعلم الطريقة التي ندخلها.

05:23.690 --> 05:30.080
بالطبع هؤلاء الرجال هنا ، تشير الدفعة إلى الدُفعة والتاريخ التالي ومكافأة الدُفعة وإجراء المجموعة.

05:30.470 --> 05:38.900
هذه هي دفعاتنا المأخوذة من ذاكرتنا ونحصل على 100 منها لأن لدينا 100 انتقال.

05:38.900 --> 05:46.220
ومن هذه التحولات المائة نأخذ 100 حالة و 106 حالات و 100 مكافأة و 100 فعل.

05:47.190 --> 05:49.590
لذلك دعونا نلعب هذا هنا وهناك نذهب.

05:49.590 --> 05:51.480
الآن سوف يحدث التعلم.

05:51.630 --> 05:54.150
سيحدث من كل هذه الدفعات العشوائية.

05:54.480 --> 05:55.290
في احسن الاحوال.

05:55.680 --> 06:03.270
والآن ما نحتاج إلى القيام به هو آخر التحديثات بعد ، كما تعلمون ، الوصول إلى حالة جديدة ولعب

06:03.270 --> 06:04.010
حركة.

06:04.020 --> 06:10.560
حسنًا ، لقد حصلنا على الإجراء الذي يجب أن نلعبه ، لكننا ما زلنا لم نحدّث الإجراء الذي هو أنفسنا ، متغير الإجراء

06:10.560 --> 06:11.460
الأخير.

06:11.460 --> 06:13.530
لذلك دعونا نتأكد من أننا لا ننسى هذا.

06:13.530 --> 06:14.850
لنفعل ذلك الآن.

06:14.880 --> 06:24.750
سنقوم بتحديث الإجراء الأخير للنقطة الذاتية والذي يساوي الإجراء الأخير ، وبالطبع الإجراء الذي نلعبه هنا مع وظيفة

06:24.750 --> 06:26.760
الإجراء المحدد.

06:27.030 --> 06:27.450
حسنا.

06:27.450 --> 06:30.300
حتى الآن يتم تحديث الإجراء الأخير بعد ذلك.

06:30.300 --> 06:31.680
نفس الشيء بالنسبة للدولة الجديدة.

06:31.680 --> 06:38.400
لقد وصلنا إلى الحالة الجديدة ، لكننا لم نحدّث الحالة الأخيرة حتى الآن بسبب بالطبع كانت الحالة

06:38.400 --> 06:40.530
الأخيرة قبل الحالة في 20.

06:40.530 --> 06:44.760
لكن منذ الآن وصلنا إلى الحالة الجديدة مثل T زائد واحد في الوقت T زائد واحد.

06:44.760 --> 06:49.980
حسنًا ، تصبح الحالة الأخيرة هذه الحالة الجديدة هنا وبالتالي نحتاج إلى تحديثها أيضًا.

06:50.010 --> 06:56.040
الحالة الأخيرة للنقطة الذاتية تساوي حالتنا الجديدة.

06:57.120 --> 06:57.940
هناك نذهب.

06:57.960 --> 06:59.550
والآن ماذا نحتاج للتحديث؟

06:59.580 --> 07:01.460
حسنًا ، لم يتبق سوى شيء واحد.

07:01.470 --> 07:03.270
هذه ، بالطبع ، المكافأة.

07:03.420 --> 07:08.060
والمكافأة هي بالضبط المكافأة التي نحصل عليها في الواقع.

07:08.070 --> 07:14.610
إذن ستكون هذه هي حجة وظيفة التحديث هذه ، والتي إذا أجرينا الاتصال بخريطتنا ، فستكون

07:14.610 --> 07:16.920
المكافأة الأخيرة.

07:16.920 --> 07:23.210
هذه هي المكافأة التي نحصل عليها مباشرة بعد لعب الإجراء في هذه الحالة الجديدة التي وصلت إليها.

07:23.220 --> 07:28.020
لذا ، إذا واصلنا بعض الرسائل المرسلة ، فستكون هذه المكافأة الأخيرة سيئة ناقص واحد.

07:28.140 --> 07:31.950
إذا ابتعدنا عن الهدف ، فسنحصل على مكافأة أفضل قليلاً.

07:31.950 --> 07:33.330
ناقص 0. 2.

07:33.360 --> 07:38.550
إذا اقتربنا من الهدف ، فسنحصل على مكافأة مفتوحة جيدة بعض الشيء.

07:38.550 --> 07:43.320
وإذا اقتربنا جدًا من إحدى حواف الخريطة ، فسيكون ذلك بمثابة عقوبة سيئة.

07:43.320 --> 07:45.180
سنحصل على ناقص واحد لكل حافة.

07:45.210 --> 07:46.980
إذن هذا هو آخر ما حصلنا عليه.

07:46.980 --> 07:50.610
في الواقع ، هذا هو ما يحدث بشكل حقيقي على الخريطة.

07:50.610 --> 07:53.430
وستكون هذه حجة دالة التحديث.

07:53.430 --> 07:55.920
هذه الكلمة الأخيرة هنا ، هذه بالضبط هذه الكلمة.

07:55.920 --> 08:02.250
وبما أن هذه هي حجة دالة التحديث جيدًا والتي تتوافق مع هذه المكافأة

08:02.250 --> 08:11.850
هنا ، وبالتالي فهي ذاتي آخر متغير مكافأة تمت تهيئته في البداية في وظيفة init هذه هي المكافأة الجديدة

08:11.850 --> 08:13.530
التي نحصل عليها.

08:13.530 --> 08:19.260
في الواقع ، هذه مكافأة أو أنها مكافأة أقل.

08:20.620 --> 08:21.250
حسنا.

08:21.250 --> 08:23.530
حتى الآن قمنا بتحديث مكافأتنا الأخيرة.

08:23.710 --> 08:29.650
والآن بما أننا حصلنا للتو على آخر مكافأتنا ، حسنًا ، يمكننا الآن تحديث نافذة المكافأة.

08:29.680 --> 08:36.910
تتذكر نافذة المكافأة التي قمنا بتهيئتها هنا كأحد متغيرات كائن الفصل لدينا.

08:36.940 --> 08:42.340
هذه هي النافذة التي ستتبع كيفية سير هذا التدريب من خلال أخذ متوسط

08:42.340 --> 08:44.050
آخر 100 مكافأة.

08:44.140 --> 08:49.890
لذلك سيكون مثل نافذة منزلقة توضح لنا كيف يتطور متوسط المكافآت.

08:49.900 --> 08:55.180
وبما أننا حصلنا للتو على آخر مكافأة لنا ، حسنًا ، يمكننا تحديث نافذة المكافأة.

08:55.300 --> 08:56.800
فكيف نقوم بتحديثه؟

08:56.830 --> 09:00.550
حسنًا ، نحتاج ببساطة إلى إلحاق هذه المكافأة الأخيرة بالنافذة.

09:00.550 --> 09:05.200
وبالتالي ، ما سأفعله هو أخذ نافذة المكافأة الخاصة بي.

09:05.200 --> 09:07.490
تخدم نافذة المكافأة تلك.

09:07.510 --> 09:08.290
ها هو.

09:08.290 --> 09:12.280
ثم سأستخدم وظيفة الإلحاق.

09:12.280 --> 09:16.360
وداخل وظيفة الإلحاق ، نحتاج إلى إدخال العنصر.

09:16.360 --> 09:18.670
نريد إلحاق نافذة المكافأة.

09:18.670 --> 09:20.560
وهذا بالطبع المكافأة.

09:21.400 --> 09:21.760
حسنا.

09:21.760 --> 09:22.440
في احسن الاحوال.

09:22.450 --> 09:28.870
وبعد ذلك ، بما أن نافذة المكافأة هذه سيكون لها حجم ثابت ، كما تعلمون ، فلن تكون نافذة

09:28.870 --> 09:29.800
متنامية.

09:29.800 --> 09:35.200
ستكون نافذة ذات حجم ثابت تنزلق بمرور الوقت لتظهر لنا تطور المكافأة.

09:35.200 --> 09:38.560
والآن علينا أن نقرر حجم هذه النافذة.

09:38.560 --> 09:43.390
وهو ببساطة عدد وسائل المكافآت التي سنحصل عليها في هذه النافذة.

09:43.690 --> 09:49.120
وهكذا ، على سبيل المثال ، دعنا نتعرف على آخر 1000 وسيلة من آخر 100 كلمة.

09:49.120 --> 09:56.200
وللتأكد من ذلك ، سنضيف إذا ، بعد ذلك ، لين ، فإننا سنأخذ مكافأتنا.

09:57.020 --> 09:57.740
نافذة او شباك.

09:57.980 --> 10:06.410
ونضيف هنا ببساطة إذا كان عدد العناصر في نافذة المكافأة أكبر من 1000 ، حسنًا

10:06.410 --> 10:13.640
، ما نريد فعله هو حذف العنصر الأول من نافذة المكافأة هذه.

10:13.640 --> 10:18.230
والعنصر الأول في نافذة المكافأة هذه يحتوي على فهرس صفر.

10:19.060 --> 10:19.420
حسنا.

10:19.420 --> 10:24.340
والآن نتأكد من أن نافذة المكافأة هذه لن تحصل أبدًا على أكثر من 1000 عنصر.

10:24.340 --> 10:27.640
هذا يعني 1000 وسيلة من آخر 100 مكافأة.

10:27.850 --> 10:28.570
هذا ممتاز.

10:28.570 --> 10:34.510
ستكون هذه نافذة بحجم ثابت حتى نتمكن من معرفة ما إذا كان متوسط المكافآت يتزايد ، وبالتالي إذا

10:34.510 --> 10:36.640
كان التدريب يسير على ما يرام.

10:36.640 --> 10:39.130
وبناءً على ذلك ، إذا كانت البطاقة تفعل ما نريد.

10:39.730 --> 10:40.570
في احسن الاحوال.

10:40.720 --> 10:44.650
والآن يتبقى لك شيء صغير جدًا عليك القيام به.

10:44.650 --> 10:45.920
ماذا تريد ان تكون؟

10:45.940 --> 10:52.090
حسنًا ، تذكر أن وظيفة التحديث هذه لا تقوم فقط بتحديث العناصر المختلفة للانتقال في نافذة المكافأة

10:52.090 --> 10:57.910
، ولكنها تقوم أيضًا بإرجاع الإجراء الذي تم لعبه عند الوصول إلى هذه الحالة الجديدة.

10:57.940 --> 11:02.690
لهذا السبب لدينا في الخريطة الإجراء يساوي تحديث نقطة الدماغ.

11:02.710 --> 11:04.090
الكلمة الأخيرة ، الإشارة الأخيرة.

11:04.240 --> 11:09.370
وبالتالي من المفترض أن تعيد شيئًا ما وهناك شيء من المفترض أن تعيده هو بالطبع

11:09.370 --> 11:10.330
الفعل.

11:10.570 --> 11:16.720
لذا فإن الشيء الأخير البسيط الذي يتعين علينا القيام به هنا هو إعادة الإجراء.

11:17.080 --> 11:20.020
الإجراء الذي تم عرضه عند الوصول إلى الحالة الجديدة.

11:20.380 --> 11:21.310
وهذا كل شيء.

11:21.520 --> 11:23.600
وظيفة التحديث لدينا جاهزة.

11:23.620 --> 11:28.990
ستقوم بجميع التحديثات المطلوبة وستعيد الإجراء عند الوصول إلى الحالة الجديدة.

11:29.230 --> 11:30.390
هذا ممتاز.

11:30.400 --> 11:34.960
كان هذا آخر إجراء صعب يتم القيام به لكل هذه العملية.

11:34.990 --> 11:36.880
الآن الباقي سيكون أشياء طفل.

11:36.910 --> 11:41.800
سنقوم فقط بعمل وظيفة تسجيل لإرجاع وسائل المكافآت ونافذة المكافأة.

11:41.980 --> 11:47.410
ثم سنقوم بوظيفة حفظ لحفظ دماغ السيارة متى أردت إنهاء التطبيق والعودة

11:47.410 --> 11:48.520
إليه.

11:48.610 --> 11:53.440
وبالطبع ، نظرًا لأنك تريد أن تكون قادرًا على تحميل عقل سيارتك عندما تعود إليها ،

11:53.440 --> 11:54.720
فارجع إلى التطبيق.

11:54.730 --> 12:01.150
حسنًا ، سننتهي من خلال إنشاء وظيفة تحميل ستحمّل النموذج الخاص بك بعد حفظ النموذج الخاص بك

12:01.150 --> 12:02.320
مع وظيفة الحفظ.

12:02.620 --> 12:06.280
إذن ، تبقى ثلاث وظائف ، لكنها ستكون بسيطة.

12:06.280 --> 12:09.990
وبعد ذلك سيكون لدينا القسم الأكثر إثارة في هذه الوحدة الأولى.

12:10.000 --> 12:11.470
هذا هو العرض.

12:11.500 --> 12:13.650
سنرى ما إذا كانت API تعمل.

12:13.660 --> 12:17.980
سنرى ما إذا كانت السيارة تصل إلى الأهداف وسنرى كيف يمكننا تحسينها.

12:17.980 --> 12:21.670
وبعد ذلك في النهاية ستكون قد قمت ببناء أول ذكاء اصطناعي خاص بك.

12:21.940 --> 12:23.890
لذلك لا يمكنني الانتظار لبدء العرض التوضيحي.

12:23.920 --> 12:25.810
لنجعل هذه الوظائف الثلاث أولاً.

12:25.810 --> 12:27.130
وحتى ذلك الحين ، استمتع.

12:27.130 --> 12:27.670
أنا.
