مرحبًا ومرحبًا بكم في برنامج Python التعليمي هذا.
حسنًا ، الآن في الوظيفة التالية التي نحن على وشك تنفيذها ، سنقوم بتدريب الشبكة العصبية
العميقة الموجودة داخل ذكاءنا الاصطناعي.
لذلك بشكل أساسي ، سنقوم بالعملية الكاملة للانتشار الأمامي ثم التكاثر
الخلفي حتى نحصل على مخرجاتنا ، وسنحصل على الهدف.
سنقارن الناتج بالهدف لحساب الخطأ الأخير.
ثم سنعيد نشر هذا الخطأ الأخير في الشبكة العصبية.
وباستخدام النسب المتدرج العشوائي ، سنقوم بتحديث الأوزان وفقًا لمقدار مساهمتها
في تقليل الخطأ.
لذلك دعونا نفعل كل هذا.
بالنسبة لأولئك القادمين من دورة التعلم العميق ، ستكون هذه أشياء أطفال ، لكن بالنسبة للآخرين
، لا تقلق ، سأشرح ذلك مرة أخرى.
لذلك سنسمي هذه الوظيفة الجديدة "تعلم".
وستتطلب وظيفة التعلم هذه عدة حجج.
الذات الأولى ، بالطبع ، ستشير إلى موضوع الطبقة المختلفة.
ثم سنأخذ حالة الدُفعات الخاصة بنا للحالة الحالية ، ثم الحالة التالية للدفعة ، ثم مكافأة المجموعة
، وأخيرًا إجراء المجموعة الخاص بنا.
فلماذا نأخذ هذا؟
ربما تعرفت على ما هو المسلسل؟
حسنًا ، هذا ، بالطبع ، انتقال ، انتقال لعملية اتخاذ قرار ماركوف التي هي
أساس التعلم العميق.
ولماذا نأخذهم جميعًا في بعض الدفعات؟
حسنًا ، هذا بسبب ، تذكر ، أننا لا نأخذ في الاعتبار التحولات من خلال سلسلة من أعلى الحالة الحالية
، والمكافأة الحالية ، والإجراء الحالي.
لقد أنشأنا بعض دفعات العينات هنا بفضل وظيفة العينة.
والآن أصبحت انتقالاتنا في النموذج ، الدفعة الأولى للحالة ، الدفعة الثانية للتاريخ
التالي ، مجموعة المكافأة ، ومجموعة الإجراء.
هذا هو شكل انتقالاتنا الآن ، وكلها متوافقة جيدًا فيما يتعلق بالوقت ، بفضل
هذا التسلسل الذي قمنا به هنا فيما يتعلق بالبعد الأول.
لذا فالنقطة الآن لدينا هذا الانتقال من الدُفعات ، دفعة واحدة لكل ولاية ، ومكافأة الحالات
التالية والعمل.
ونفعل كل هذا لأننا نستخدم خدعة التجربة هذه في إعادة العرض حتى تتمكن شبكتنا العصبية العميقة
من تعلم شيء ما.
تذكر ، إذا كانت لدينا التحولات فقط من تلقاء نفسها ، فسيكون ذلك بمثابة تعلم فوري.
أو إذا كنت تريد تعلم ذاكرة قصيرة جدًا ، وبالتالي لن يتعلم النموذج شيئًا.
لذلك علينا أن نأخذ هذه الدُفعات من الذاكرة التي أصبحت انتقالاتنا ، وبعد ذلك في النهاية سنحصل على المخرجات
المختلفة لكل حالة من حالات حالة دفعة الإدخال.
وسنفعل ذلك من أجل حالة الدُفعة والحالة التالية للدفعة لأننا سنحتاج إلى كليهما لحساب
الخسارة.
سأذكر قريبًا معادلة التوازن الموجودة في قلب خوارزمية التعلم العميق.
لننتقل الآن إلى الدالة ودعنا نحصل أولاً على مخرجات حالة الدُفعة.
لذلك سأسمي هذا أول مخرجات متغيرة.
وبعد ذلك سنأخذ بالطبع نموذجنا الذاتي.
لذا فإن النموذج الذي يدرس ذاتيًا لأننا نريد الحصول على مخرجات نموذجنا لحالات الإدخال لحالة الدُفعة.
ونظرًا لأن نموذجنا يتوقع في الواقع مجموعة من حالات الإدخال ، حسنًا ، يمكننا تمامًا إدخال حالة الدُفعات
الآن لإدخال النموذج.
هذا هو بالضبط كيف قمنا بتهيئة الحالات التي تدخل الشبكة مع موتر الشعلة بهذا
البعد المزيف للدفعة.
لذلك هذا مثالي.
نحصل الآن على مخرجات النموذج ، ولكن هناك خدعة فنية أخرى.
إذا قمنا فقط بأنفسنا بأن هذه الدُفعة النموذجية جيدة ، فسنحصل على مخرجات جميع الإجراءات الممكنة ، كما تعلمون
، صفر واحد واثنان.
لكن هذا ليس ما نريده.
نحن مهتمون فقط بالأفعال التي تم اختيارها ، الإجراءات التي قررت الشبكة
أن تلعبها في كل مرة.
ومن أجل الحصول على هذه الإثارة التي نحن مهتمون بها ، فهذه هي الإجراءات التي يتم لعبها بشكل جيد.
علينا استخدام وظيفة التجميع هذه حيث نقوم بإدخال واحدة لأننا نريد فقط الإجراء الذي تم اختياره.
ثم نضيف إجراءً دفعيًا مع هذا الإجراء ، الإجراء الواحد والدُفعي الذي سنجمعه في كل مرة أفضل إجراء يتم تشغيله لكل
حالة من حالات الإدخال لحالة الدُفعات.
نريد فقط الإجراء الذي يتم لعبه ، الإجراء الذي تم اختياره ، ونحصل على هذا من خلال إجراء التجميع
واحد والدُفعات.
ولكن بعد ذلك كن حذرا.
حالة الدُفعات هنا لها هذا البعد المزيف المطابق للإجراء الدُفعي ولم يتم استعادته مرة
أخرى ، هل تعرفه؟
لأننا نستخدم الإدخالات هنا ، لكننا لم نستخدم أيًا منها عند الضغط على الإجراءات.
لذلك يتعين علينا إضافته هنا بحيث يكون لإجراء الدُفعة نفس بُعد حالة الدُفعة بالضبط.
إذن سنضيف نقطة على الضغط صفر.
هنا.
وفي الواقع ، هذا ليس صفراً ، ولكنه واحد لأن الصفر يتوافق مع البعد الإيماني للدولة وسيتوافق
المرء مع البعد الوهمي للأفعال.
وأخيرًا ، آخر شيء يتعين علينا القيام به هنا هو أننا بحاجة إلى قتل هذه المجموعة المزيفة بضغطة واحدة.
ولماذا نحن بحاجة للقيام بذلك؟
لأننا الآن خارج الشبكة العصبية.
لدينا مخرجاتنا ، لكننا لا نريدها دفعة واحدة.
نريدهم في موتر بسيط ، متجه بسيط ، متجه للإخراج.
الدفعة هي فقط عندما نعمل في الشبكة العصبية ، لأن الشبكة العصبية تتوقع تنسيق
المستشعرات في دفعة.
لكن الآن لدينا مخرجاتنا وفي المعادلة المتوازنة التالية للتعلم العميق ، لن نحتاجها
في دفعة.
لذلك أنا أقتل الدفعة هنا.
أنا أقتل البعد الزائف لاستعادة الشكل البسيط لمخرجاتنا.
لذلك أنا فقط أضيف هنا ، نقطة ثم ضغط.
ثم منذ ذلك الحين أريد أن أقتل البعد المزيف المقابل لمجموعة العمل.
حسنًا ، نظرًا لأن هذا البعد الزائف يحتوي على فهرس واحد ، فأنا أضيف واحدًا هنا.
حسنا.
والآن ، ها نحن ذا.
لدينا مخرجاتنا ، OC.
لدينا القليل من التحذير.
ما هذا؟
يتم تعيين مخرجات المتغير المحلي ولكن لم يتم استخدامها أبدًا.
حسنا.
سوف نستخدمه بسرعة كبيرة.
إذن هذه هي مخرجاتنا.
والآن نريد أن نحصل على التالي.
النواتج.
الآن ربما تفكر ، لماذا نحتاج إلى الناتج التالي؟
حسنًا ، لفهم هذا ، نحتاج إلى العودة إلى خوارزمية التعلم العميق ، الموجودة هنا.
هذا جزء من كتيب المنطق.
هذه هي عملية التعلم العميق برمتها.
في البداية ، نقوم بتهيئة جميع القيم ثم في كل مرة.
تي حسنا ، ها نحن ذا.
نختار الإجراء باستخدام soft max.
هذا ما فعلناه بوظيفة Select Action.
ثم نلحق الانتقال ثم كما ترى ، نحصل على التنبؤ ، نحصل على الهدف ونحسب
الخسارة.
فلماذا نحتاج إلى النواتج التالية أيضًا؟
هذا بسبب الهدف.
الهدف يساوي أوقات جاما ، الناتج التالي بالإضافة إلى المكافأة ، وسوف نحسب الهدف بعد
ذلك مباشرة.
ولكن نظرًا لأننا نحتاج إلى الناتج التالي للهدف ، فلنحسب هذا أولاً.
لذا مرة أخرى ، للحصول على الناتج التالي ، هذا بسيط للغاية.
سيكون الإخراج التالي نتيجة لشبكتنا العصبية عندما يتم إدخالها في التاريخ التالي
كمدخلات.
ببساطة شديدة ، نأخذ نموذجنا الذي هو شبكتنا العصبية ، ثم هذه المرة ستكون مدخلات الشبكة
العصبية هي المجموعة في التاريخ التالي.
تاريخ الدفعة التالي.
لكن الآن ، تذكر ، إذا عدنا إلى خوارزمية التعلم العميق ، حسنًا ، يمكنك أن ترى أن الناتج التالي هو
الحد الأقصى لقيم قائمة الانتظار للمجموعة التالية فيما يتعلق بجميع الإجراءات.
الآن ، للحصول على الناتج التالي ، نحتاج إلى الحصول على الحد الأقصى لقيم Q هذه.
وبالتالي ، سأفعل هنا فصلًا ، كما تعلمون ، لفصل جميع مخرجات النموذج لأن لدينا العديد من الحالات في
هذه الدفعة التالية ، وهذه هي مجموعة جميع الحالات التالية في جميع الانتقالات
المأخوذة من عينة عشوائية من ذاكرتنا.
لذا أقوم بفصلهم جميعًا باستخدام وظيفة الفصل ، ثم أقوم بأخذ الحد الأقصى لجميع قيم قائمة الانتظار
هذه.
ونظرًا لأننا نأخذ الحد الأقصى من قيم Q هذه فيما يتعلق بالإجراء ، حسنًا ، علينا
أن نحدد أنه فيما يتعلق بالإجراء.
ونظرًا لأن الإجراء يمثله المؤشر الأول ، حسنًا ، مرة أخرى ، علينا وضع الفهرس
هنا ثم علينا تحديد أننا نأخذ قيم Q لـ s t زائد واحد وهي الحالة التالية.
ويتم تمثيل الحالة التالية بالرقم القياسي صفر لأن مؤشر الصفر يتوافق مع الحالة.
ومن ثم ، علينا هنا إضافة قوسين بحيث يكون الفهرس صفرًا.
بهذه الطريقة نحصل على الحد الأقصى لقيم Q للحالة التالية التي يمثلها مؤشر الصفر وفقًا لجميع
الإجراءات التي يمثلها الفهرس واحد.
والآن مثالي.
نحصل على ناتجنا التالي.
هذه دولة جديدة.
هذا هو المكان الذي تلقينا فيه التحذير.
لكن هذا جيد.
سنستخدمه الآن لحساب الهدف.
وبالحديث عن الهدف ، هذه هي الخطوة التالية لوظيفة التعلم هذه.
لذا ها نحن ذا.
الهدف يساوي.
الآن دعنا نعود إلى كتيب الذكاء الاصطناعي الخاص بنا.
الهدف يساوي المكافأة بالإضافة إلى أوقات جاما.
الإخراج التالي هو الحد الأقصى لقيم Q في التاريخ التالي وفقًا للإجراءات.
لذا ها نحن ذا.
دعونا نحسب ذلك.
لذلك هذا يساوي الذات ، تلك الجاما والذات ، تلك الجاما تمت تهيئتها هنا يتم تقديمها.
إذن ، هذا متغير من GQ وذات الكائن الذي يضاعف جاما الناتج التالي كما قلنا للتو بالإضافة إلى المكافأة التي هي مكافأة
الدُفعات التي نعمل بها مع الدُفعات هنا بالإضافة إلى الدُفعات.
جائزة.
وهذا هو الهدف في عينة واحدة من الذاكرة.
ضرب جاما في النواتج التالية ، بالإضافة إلى المكافأة.
حسنًا ، رائع.
والآن لدينا مخرجاتنا.
لدينا أيضا هدفنا.
وبالتالي ، يمكننا حساب الخسارة ، الخسارة التي تمثل خطأ التنبؤ.
لذلك دعونا نسمي هذه الخسارة.
خسارة TD هي ، بالطبع ، للاختلاف الزمني الذي هو مرة أخرى في قلب تعلم CU وستكون خسارة
TD هذه مساوية لخسارة Huber التي تحسن كثيرًا من تعلم Q.
هذه هي الوظيفة الأخيرة التي سنختارها لذكائنا الاصطناعي.
بالنسبة لأولئك القادمين من دورة التعلم العميق ، هذه هي الخسارة التي أوصي بها إذا كنت
ترغب في تنفيذ التعلم العميق.
فكيف سنحصل على خسارة هوبر هذه؟
حسنًا ، مرة أخرى ، سنأخذ دالة من الوحدة الوظيفية التي تمثلها F.
وبالتالي ، سأستخدم الوحدة الوظيفية F dot و Hubble كما يمكن الحصول عليها بفضل الوظيفة
السلسة لخسارة واحدة يتم الضغط على إدخال واحد وهي حقًا أفضل وظيفة مفقودة أوصي بها للتعلم
العميق.
إنه يحسن حقًا تعلم Q ، لكن هذه وظيفة.
لذلك أقوم بإضافة بعض الأقواس والآن لا يوجد شيء أكثر بساطة من الحجج التي نحتاجها لإدخال
توقعاتنا والأهداف.
لذا فإن التنبؤات هي بالطبع مخرجاتنا لأن هذا هو ناتج الشبكة العصبية.
كما تعلمون ، ناتج الشبكة العصبية هو ما تتوقعه الشبكة العصبية.
إذن هذا هو التوقع.
لذا فإن الحجة الأولى هنا هي المخرجات.
ثم الحجة الثانية ، بالطبع ، هي الهدف.
الشيء الذي نحاول الحصول عليه وقد تم حسابه بشكل مثالي بالفعل ، يمكننا إدخال الهدف بشكل مثالي والآن
لدينا الخسارة.
فقط نسيت قليلا ر هنا.
هناك نذهب.
الآن يجب أن يختفي التحذير.
نعم ممتاز.
والآن بعد أن حصلنا على الخطأ الأخير ، يمكننا إعادة نشر هذا الخطأ مرة أخرى في الشبكة لتحديث الأوزان
باستخدام نزول متدرج عشوائي.
وهذا بالضبط ما سنفعله في الخطوة التالية.
لذلك بالطبع ، ما يتعين علينا فعله الآن ، كما قد تتخيل ، هو استخدام المُحسِّن الخاص بنا.
مُحسِّننا ، الذي قدمناه هنا مرة أخرى ، قمنا بتهيئته ، وهو مُحسِّن الذرة ، وهو في
الواقع كائن من فئة الذرة ومُزود بالفعل بمعلمات نموذجنا وقد اخترنا بالفعل
معدل التعلم 0. 1 بالمائة.
مثالي جدًا ، مُحسِّننا جاهز ، لكننا الآن بحاجة إلى تطبيقه على الخطأ الأخير لإجراء النسب المتدرج
العشوائي وأوزان البيانات.
لذلك عند العمل مع PyTorch ، فإن أول شيء يتعين علينا القيام به هو إعادة تهيئته في كل تكرار للحلقة.
يجب إعادة تهيئة المُحسِّن من تكرار إلى آخر في حلقة هبوط التدرج العشوائي
وإعادة تهيئته في كل مدة الحلقة.
حسنًا ، سنستخدم الطريقة التالية وهي الشبكة الصفرية.
هنا نبدأ ، ستعيد الشبكة الصفرية تهيئة المحسن الخاص بك في كل تكرار للحلقة.
ثم دعونا لا ننسى الأقواس.
في احسن الاحوال.
والآن بعد أن تمت إعادة تهيئته ، حسنًا ، يمكننا إجراء نشر عكسي باستخدام مُحسِّننا.
وكيف لنا أن نفعل ذلك؟
حسنًا ، نأخذ خسارة TD الخاصة بنا وسنعيد نشرها مرة أخرى في الشبكة ولإعادة نشرها
في الشبكة ، نحتاج إلى استخدام الوظيفة الخلفية.
وداخل هذه الوظيفة العكسية ، أوصي بإدخال المتغيرات والاحتفاظ بها وتأكيدها وتعيينها على
أنها صحيحة.
أوصي بالقيام بذلك لأن هذا سيؤدي إلى تحسين التكاثر الخلفي.
استخدام متغيرات الإرجاع يساوي صحيحًا لتحرير بعض الذاكرة ونحتاج إلى تحرير
الذاكرة لأننا سنخسر عدة مرات.
لذلك سيؤدي ذلك بالتأكيد إلى تحسين أداء التدريب.
وأخيرًا ، تتمثل الخطوة الأخيرة في وظيفة التعلم هذه في تحديث الأوزان وفقًا للانتشار الخلفي
، أي وفقًا لمقدار الوزن الذي ساهم في حدوث الخطأ.
وللقيام بذلك ، نأخذ مُحسِّننا مرة أخرى ، والذي تمت تهيئته وإعادة تهيئته ونستخدم وظيفة الخطوة وببساطة
مع هذا السطر من التعليمات البرمجية باستخدام وظيفة الخطوة ، سيؤدي ذلك إلى تحديث الأوزان.
هذا هو سطر التعليمات البرمجية الذي يقوم بتحديث الوزن.
ينشر هذا السطر من التعليمات البرمجية الخطأ في الشبكة العصبية ويستخدم هذا السطر من التعليمات البرمجية المُحسِّن
لتحديث الأوزان.
وها نحن ذا.
لدينا شبكة التعلم العصبية.
حسنا.
لذا تهانينا.
ربما كان هذا هو الجزء الأكثر تقنية وصعوبة في كل نموذج التعلم العميق هذا.
أعلم أن PyTorch يمكن أن تكون خادعة في بعض الأحيان مع هؤلاء والضغط والضغط ، لكن في
النهاية أعدك أنك ستحصل على شبكة عصبية وظيفية للغاية وبالتالي نموذج التعلم العميق وفي النهاية
ذكاء اصطناعي رائع.
لذا دعنا الآن ننتقل إلى الخطوة التالية من نموذج التعلم العميق الخاص بنا ، والتي ستكون وظيفة التحديث
التي سيتم تحديثها بوضوح عندما يكتشف الذكاء الاصطناعي الحالة الجديدة.
لذلك ، كما تعلم ، سوف يكتشف الحالة الجديدة وبعد ذلك سيحصل على المكافأة اعتمادًا على الإجراء
الذي لعبته للتو وهذه الحالة الجديدة.
لذلك سنهتم بهذا من خلال وظيفة التحديث وسنفعل ذلك في البرنامج التعليمي التالي.
حتى ذلك الحين ، استمتع.
أنا.