WEBVTT

00:00.180 --> 00:02.610
مرحبًا ومرحبًا بكم في برنامج Python التعليمي هذا.

00:02.820 --> 00:07.710
حسنًا ، في قسم الكود الجديد هذا ، سنقوم بتنفيذ تجربة إعادة التشغيل.

00:07.710 --> 00:13.770
لذلك سنقوم بعمل فصل جديد ، والذي سنسميه ذاكرة إعادة التشغيل والتي ستنفذ التجربة ، وتعيد

00:13.770 --> 00:16.590
عرضها تمامًا كما رأيت في محاضرات الحدس.

00:16.590 --> 00:21.330
لكن أولاً ، دعنا نعطي تذكيرًا سريعًا بشأن إعادة التشغيل ذات الخبرة.

00:21.330 --> 00:26.550
لذا ، كما تعلمون ، كل هذا الذكاء الاصطناعي يعتمد على عمليات اتخاذ القرار التي يقوم بها ماركوف.

00:26.550 --> 00:31.710
وتتألف عمليات اتخاذ القرار ماركوف من النظر في سلسلة من الأحداث.

00:31.710 --> 00:38.610
لذا فإن الأحداث ، على سبيل المثال ، تنتقل من حالة S-T إلى الحالة التالية مثل T plus one.

00:38.850 --> 00:44.310
ولكن إذا كانت الأحداث على هذا النحو ، حسنًا ، نظرًا لأن الحالة التالية مرتبطة جدًا بالحالة الحالية

00:44.310 --> 00:46.740
، حسنًا ، لن تتعلم الشبكة جيدًا.

00:46.740 --> 00:52.380
لذلك بالنسبة لأولئك القادمين من دورة التعلم العميق ، هذا هو بالضبط نفس المكان الذي تعلمنا فيه السلسلة

00:52.380 --> 00:54.750
الزمنية الخاصة بنا بخطوة زمنية واحدة فقط.

00:54.780 --> 01:00.030
لم يكن تعلم أي شيء لأن خطوة واحدة لم تكن كافية لنموذجنا لتعلم

01:00.030 --> 01:02.550
فهم العلاقات طويلة المدى.

01:02.850 --> 01:06.960
لذلك هذا هو نفسه هنا ، ولهذا السبب يتعين علينا تنفيذ تجربة إعادة التشغيل.

01:06.960 --> 01:08.160
فكيف يعمل؟

01:08.160 --> 01:09.180
حسنًا ، هذا بسيط جدًا.

01:09.180 --> 01:13.890
بدلاً من النظر فقط في الحالات الحالية ، هذه حالة واحدة فقط في كل مرة.

01:13.890 --> 01:20.430
T سوف نفكر أكثر في الماضي ، لذلك تمامًا مثل أقل من TMS وبالتالي لن تكون

01:20.430 --> 01:23.610
سلسلة أحداثنا SD و SD plus one.

01:23.640 --> 01:27.240
ستكون هذه ، على سبيل المثال ، الولايات المائة في الماضي.

01:27.240 --> 01:33.600
لذلك مثل T -100 مثل T -99 حتى C ناقص واحد ثم s T.

01:33.750 --> 01:40.230
بعبارة أخرى ، نضع 100 انتقال أقل في ما نسميه الذاكرة ، وهذا هو المكان الذي لدينا فيه

01:40.230 --> 01:46.080
ذاكرة طويلة المدى بدلاً من الذاكرة قصيرة المدى أو حتى ذاكرة فورية.

01:46.080 --> 01:49.740
وهذا يجعل عملية التعلم العميق بأكملها تعمل بشكل أفضل.

01:50.040 --> 01:57.240
وبعد ذلك ، بمجرد إنشاء هذه الذاكرة لآخر 100 حدث سنقوم بأخذ عينات ، أي أننا سنأخذ بعض المجموعات

01:57.240 --> 02:02.100
العشوائية من هذه الانتقالات لإجراء التحديث التالي.

02:02.100 --> 02:05.580
هذه هي خطوتنا التالية باختيار الإجراء التالي.

02:05.910 --> 02:12.000
وبالتالي ، في فئة ذاكرة إعادة التشغيل هذه التي نطبقها للتجربة ، سنقوم

02:12.000 --> 02:13.260
بثلاث وظائف.

02:13.260 --> 02:15.630
بادئ ذي بدء ، تعمل init كالمعتاد.

02:15.630 --> 02:17.250
هذا هو الحال بالنسبة لأي فئة.

02:17.250 --> 02:23.250
وهكذا في هذه الوظيفة ، سنحدد المتغيرات التي سيتم إرفاقها بالمثيلات المستقبلية للفئة ، وهي

02:23.250 --> 02:27.060
الكائنات المستقبلية التي سيتم إنشاؤها من هذه الفئة.

02:27.270 --> 02:33.150
وببساطة شديدة ، ستكون هذه المتغيرات هي ذاكرة 100 انتقال إلى 100 حدث والسعة

02:33.150 --> 02:39.510
التي هي الرقم 100 الذي سيكون موضع ترحيب لتجربة ذاكرة أطول من خلال زيادة السعة.

02:39.510 --> 02:42.060
إذن هذه هي الوظيفة الأولى في الدالة.

02:42.210 --> 02:48.480
وبعد ذلك سنقوم بعمل وظيفتين أخريين ، وظيفة دفع واحدة للتأكد من أن الذاكرة لا تحتوي

02:48.480 --> 02:51.000
أبدًا على أكثر من 100 انتقال.

02:51.000 --> 02:56.580
ولهذا ، سنستخدم السعة من خلال تنفيذ شرط واحد بسيط ، ثم في النهاية

02:56.580 --> 02:58.590
سنجعل دالة العينة.

02:58.590 --> 03:04.740
وسيكون ذلك بالطبع لأخذ عينات من بعض التحولات في هذه الذاكرة لآخر 100 انتقال.

03:05.340 --> 03:05.670
حسنا.

03:05.670 --> 03:08.340
لنبدأ بتقديم الفصل.

03:08.340 --> 03:12.510
لذا كالعادة ، نبدأ بالفصل ثم نعطي اسمًا للفصل.

03:12.510 --> 03:15.690
لذلك نسميها ذاكرة إعادة التشغيل.

03:16.980 --> 03:23.340
ثم بين قوسين ، أدخلنا الكائن ، ثم العمود ، ثم ها نحن ذا.

03:23.340 --> 03:26.730
نبدأ بالدالة الأولى ، وظيفة init.

03:26.970 --> 03:30.600
هذا هو بالضبط ما كان عليه قبل أن نبدأ بالموت.

03:30.600 --> 03:36.480
ثم للتأكيد عليه ، للتأكيد مرة أخرى ثم المتغيرات.

03:36.480 --> 03:42.330
لذلك هناك بالطبع self وهو المتغير المرتبط بالمثيلات المستقبلية للفئة ، الكائنات

03:42.330 --> 03:43.350
المستقبلية.

03:43.440 --> 03:49.170
ومن ثم سيكون لدينا متغير آخر لتتمكن من تجربة تجربة أخرى ، واستبدال بعض

03:49.170 --> 03:52.410
الذكريات الأخرى ، وستكون هذه هي السعة.

03:52.710 --> 03:58.230
لذا فإن هذه السعة ستكون ببساطة هي الرقم 100 لأننا سنقوم بتجربة إعادة التشغيل

03:58.230 --> 04:00.180
مع 100 انتقال أخير.

04:00.810 --> 04:01.230
حسنا.

04:01.230 --> 04:03.810
ثم كولين وها نحن ذا.

04:03.810 --> 04:10.170
دعنا ندخل داخل الدالة ودعنا نحدد متغيرات كائنات ذاكرة إعادة التشغيل الخاصة بنا.

04:10.170 --> 04:14.670
لذا فإن أول واحد سيكون سعة النقطة الذاتية.

04:15.970 --> 04:22.060
وكما فهمت على الأرجح ، ستكون هذه هي السعة التي تمثل الحد الأقصى لعدد التحولات التي

04:22.060 --> 04:24.580
نريدها في ذاكرتنا للأحداث.

04:24.580 --> 04:31.630
وسيكون هذا مساويًا للحجة التي سندخلها عند إنشاء كائن من فئة ذاكرة إعادة التشغيل

04:31.630 --> 04:34.210
، وبالتالي فهذه هي السعة.

04:34.300 --> 04:36.430
هذه هي سعة دالة init.

04:36.430 --> 04:37.660
حتى القدرة.

04:37.960 --> 04:45.160
لذا مرة أخرى ، لا ينبغي الخلط ، فالقدرة الذاتية هي اسم المتغير المرتبط بالكائن

04:45.160 --> 04:46.180
والقدرة.

04:46.180 --> 04:52.030
هذه هي الحجة التي سندخلها عند إنشاء كائن من فئة ذاكرة إعادة التشغيل.

04:52.710 --> 04:53.550
حسنا.

04:53.550 --> 04:55.770
ثم لدينا متغير ثان.

04:55.860 --> 04:57.750
هذا بالطبع الذاكرة.

04:57.750 --> 05:00.240
حتى الذاكرة الذاتية.

05:01.630 --> 05:02.290
حسنا.

05:02.620 --> 05:05.650
فماذا سيساوي متغير الذاكرة هذا؟

05:05.770 --> 05:13.240
حسنًا ، من المفترض أن تحتوي هذه الذاكرة على آخر 100 حدث ، وبالتالي ، يجب أن تكون هذه قائمة

05:13.240 --> 05:18.880
بسيطة ، كما تعلم ، قائمة تحتوي على آخر 100 حدث ، وآخر 100 انتقال.

05:19.210 --> 05:22.030
ولتهيئة القائمة ، لا يوجد شيء أكثر بساطة.

05:22.030 --> 05:25.900
نضيف فقط بعض الأقواس هكذا ، وها نحن ذا.

05:25.900 --> 05:27.610
ذاكرتنا مهيأة.

05:27.610 --> 05:32.590
لذلك بالطبع ، في بداية التجربة ، أو بشكل أكثر دقة ، بداية الاستكشاف ، ستكون

05:32.620 --> 05:34.330
الذاكرة قائمة فارغة.

05:34.330 --> 05:38.320
وبعد ذلك سنضع التحولات في كل مرة نصل فيها إلى حالة مستقبلية.

05:38.320 --> 05:43.390
وبالحديث عن ذلك ، هذا بالضبط ما سنفعله بالوظيفة التالية التي سنسميها

05:43.390 --> 05:44.590
وظيفة الدفع.

05:44.590 --> 05:49.570
سنقوم بوظيفة الدفع هذه لإلحاق الأحداث في قائمة الذاكرة هذه.

05:49.570 --> 05:56.530
وبعد ذلك سنستخدم السعة للتأكد من أن قائمة الذاكرة هذه تحتوي دائمًا على 100 حدث وليس أكثر من

05:56.530 --> 05:56.980
ذلك.

05:57.340 --> 05:59.500
حسنًا ، لنفعل ذلك في الدرس التالي.

05:59.500 --> 06:00.820
وحتى ذلك الحين ، استمتع.

06:00.820 --> 06:01.330
أنا.
