مرحبًا ومرحبًا بكم في برنامج Python التعليمي هذا.
حسنًا ، في قسم الكود الجديد هذا ، سنقوم بتنفيذ تجربة إعادة التشغيل.
لذلك سنقوم بعمل فصل جديد ، والذي سنسميه ذاكرة إعادة التشغيل والتي ستنفذ التجربة ، وتعيد
عرضها تمامًا كما رأيت في محاضرات الحدس.
لكن أولاً ، دعنا نعطي تذكيرًا سريعًا بشأن إعادة التشغيل ذات الخبرة.
لذا ، كما تعلمون ، كل هذا الذكاء الاصطناعي يعتمد على عمليات اتخاذ القرار التي يقوم بها ماركوف.
وتتألف عمليات اتخاذ القرار ماركوف من النظر في سلسلة من الأحداث.
لذا فإن الأحداث ، على سبيل المثال ، تنتقل من حالة S-T إلى الحالة التالية مثل T plus one.
ولكن إذا كانت الأحداث على هذا النحو ، حسنًا ، نظرًا لأن الحالة التالية مرتبطة جدًا بالحالة الحالية
، حسنًا ، لن تتعلم الشبكة جيدًا.
لذلك بالنسبة لأولئك القادمين من دورة التعلم العميق ، هذا هو بالضبط نفس المكان الذي تعلمنا فيه السلسلة
الزمنية الخاصة بنا بخطوة زمنية واحدة فقط.
لم يكن تعلم أي شيء لأن خطوة واحدة لم تكن كافية لنموذجنا لتعلم
فهم العلاقات طويلة المدى.
لذلك هذا هو نفسه هنا ، ولهذا السبب يتعين علينا تنفيذ تجربة إعادة التشغيل.
فكيف يعمل؟
حسنًا ، هذا بسيط جدًا.
بدلاً من النظر فقط في الحالات الحالية ، هذه حالة واحدة فقط في كل مرة.
T سوف نفكر أكثر في الماضي ، لذلك تمامًا مثل أقل من TMS وبالتالي لن تكون
سلسلة أحداثنا SD و SD plus one.
ستكون هذه ، على سبيل المثال ، الولايات المائة في الماضي.
لذلك مثل T -100 مثل T -99 حتى C ناقص واحد ثم s T.
بعبارة أخرى ، نضع 100 انتقال أقل في ما نسميه الذاكرة ، وهذا هو المكان الذي لدينا فيه
ذاكرة طويلة المدى بدلاً من الذاكرة قصيرة المدى أو حتى ذاكرة فورية.
وهذا يجعل عملية التعلم العميق بأكملها تعمل بشكل أفضل.
وبعد ذلك ، بمجرد إنشاء هذه الذاكرة لآخر 100 حدث سنقوم بأخذ عينات ، أي أننا سنأخذ بعض المجموعات
العشوائية من هذه الانتقالات لإجراء التحديث التالي.
هذه هي خطوتنا التالية باختيار الإجراء التالي.
وبالتالي ، في فئة ذاكرة إعادة التشغيل هذه التي نطبقها للتجربة ، سنقوم
بثلاث وظائف.
بادئ ذي بدء ، تعمل init كالمعتاد.
هذا هو الحال بالنسبة لأي فئة.
وهكذا في هذه الوظيفة ، سنحدد المتغيرات التي سيتم إرفاقها بالمثيلات المستقبلية للفئة ، وهي
الكائنات المستقبلية التي سيتم إنشاؤها من هذه الفئة.
وببساطة شديدة ، ستكون هذه المتغيرات هي ذاكرة 100 انتقال إلى 100 حدث والسعة
التي هي الرقم 100 الذي سيكون موضع ترحيب لتجربة ذاكرة أطول من خلال زيادة السعة.
إذن هذه هي الوظيفة الأولى في الدالة.
وبعد ذلك سنقوم بعمل وظيفتين أخريين ، وظيفة دفع واحدة للتأكد من أن الذاكرة لا تحتوي
أبدًا على أكثر من 100 انتقال.
ولهذا ، سنستخدم السعة من خلال تنفيذ شرط واحد بسيط ، ثم في النهاية
سنجعل دالة العينة.
وسيكون ذلك بالطبع لأخذ عينات من بعض التحولات في هذه الذاكرة لآخر 100 انتقال.
حسنا.
لنبدأ بتقديم الفصل.
لذا كالعادة ، نبدأ بالفصل ثم نعطي اسمًا للفصل.
لذلك نسميها ذاكرة إعادة التشغيل.
ثم بين قوسين ، أدخلنا الكائن ، ثم العمود ، ثم ها نحن ذا.
نبدأ بالدالة الأولى ، وظيفة init.
هذا هو بالضبط ما كان عليه قبل أن نبدأ بالموت.
ثم للتأكيد عليه ، للتأكيد مرة أخرى ثم المتغيرات.
لذلك هناك بالطبع self وهو المتغير المرتبط بالمثيلات المستقبلية للفئة ، الكائنات
المستقبلية.
ومن ثم سيكون لدينا متغير آخر لتتمكن من تجربة تجربة أخرى ، واستبدال بعض
الذكريات الأخرى ، وستكون هذه هي السعة.
لذا فإن هذه السعة ستكون ببساطة هي الرقم 100 لأننا سنقوم بتجربة إعادة التشغيل
مع 100 انتقال أخير.
حسنا.
ثم كولين وها نحن ذا.
دعنا ندخل داخل الدالة ودعنا نحدد متغيرات كائنات ذاكرة إعادة التشغيل الخاصة بنا.
لذا فإن أول واحد سيكون سعة النقطة الذاتية.
وكما فهمت على الأرجح ، ستكون هذه هي السعة التي تمثل الحد الأقصى لعدد التحولات التي
نريدها في ذاكرتنا للأحداث.
وسيكون هذا مساويًا للحجة التي سندخلها عند إنشاء كائن من فئة ذاكرة إعادة التشغيل
، وبالتالي فهذه هي السعة.
هذه هي سعة دالة init.
حتى القدرة.
لذا مرة أخرى ، لا ينبغي الخلط ، فالقدرة الذاتية هي اسم المتغير المرتبط بالكائن
والقدرة.
هذه هي الحجة التي سندخلها عند إنشاء كائن من فئة ذاكرة إعادة التشغيل.
حسنا.
ثم لدينا متغير ثان.
هذا بالطبع الذاكرة.
حتى الذاكرة الذاتية.
حسنا.
فماذا سيساوي متغير الذاكرة هذا؟
حسنًا ، من المفترض أن تحتوي هذه الذاكرة على آخر 100 حدث ، وبالتالي ، يجب أن تكون هذه قائمة
بسيطة ، كما تعلم ، قائمة تحتوي على آخر 100 حدث ، وآخر 100 انتقال.
ولتهيئة القائمة ، لا يوجد شيء أكثر بساطة.
نضيف فقط بعض الأقواس هكذا ، وها نحن ذا.
ذاكرتنا مهيأة.
لذلك بالطبع ، في بداية التجربة ، أو بشكل أكثر دقة ، بداية الاستكشاف ، ستكون
الذاكرة قائمة فارغة.
وبعد ذلك سنضع التحولات في كل مرة نصل فيها إلى حالة مستقبلية.
وبالحديث عن ذلك ، هذا بالضبط ما سنفعله بالوظيفة التالية التي سنسميها
وظيفة الدفع.
سنقوم بوظيفة الدفع هذه لإلحاق الأحداث في قائمة الذاكرة هذه.
وبعد ذلك سنستخدم السعة للتأكد من أن قائمة الذاكرة هذه تحتوي دائمًا على 100 حدث وليس أكثر من
ذلك.
حسنًا ، لنفعل ذلك في الدرس التالي.
وحتى ذلك الحين ، استمتع.
أنا.