أحد مخططات الشبكة العصبية الكلاسيكية لتطبيق خوارزمية RL هي كما يلي:
حيث: المدخلات - المدخلات إلى الشبكة العصبية ؛ بنية طبقة مخفية FC - (متصلة بالكامل) أو بنية طبقة مخفية بنية CNN - FC (اعتماداً على ما يتم تغذية المدخلات) مخرجات - مخرجات الشبكة. غالبًا ما تكون مخرجات الشبكة عبارة عن طبقة softmax توفر احتمالية أحد الإجراءات من مجموعة كافة الإجراءات الممكنة.
عيب هذه البنية هو أنه من الصعب تنفيذ اختيار العديد من الإجراءات التي يتم تنفيذها في وقت واحد.
لحل هذه المشكلة ، يتم اقتراح هندسة ذات طبقة قناع. الهيكل المقترح هو كما يلي:
تتوافق هذه البنية تمامًا مع البنية الكلاسيكية ، ولكنها تتضمن أيضًا طبقة قناع الحركة. هناك طريقة واحدة فقط للخروج من هذه البنية - هذه هي قيمة قيمة الإجراء (مجموعة من الإجراءات التي يتم تنفيذها في وقت واحد). يمكن تنفيذ طبقة قناع الإجراء وفقًا للرمز الزائف أدناه:
import numpy as np class Layer: def __init__(self, items, item_size, extra_size): assert(items > 0) assert(item_size > 0) assert(extra_size >= 0) self.items = items self.item_size = item_size self.extra_size = extra_size def build(self): self._expand_op = np.zeros((self.items, self.items*self.item_size), \ dtype=np.float32) for i in range(self.items): self._expand_op[i,i*self.item_size:(i+1)*self.item_size] = np.float32(1.0) def call(self, inputs, ops): op_mask_part = inputs[:self.items*self.item_size] if self.extra_size > 0: ext_part = inputs[self.items*self.item_size:] else: ext_part = None
واستخدام هذا الرمز يوضح مقتطف الشفرة التالي:
items = 5 item_size = 10 extra_size = 20 l = Layer(items=items, item_size=item_size, extra_size=extra_size) l.build() inputs = np.random.rand(items*item_size+extra_size) ops = np.random.randint(0, 2, (items,), dtype="int") ops = ops.astype(dtype=np.float32) - np.float32(0.5) result = l.call(inputs,ops)
يمكن ملاحظة ذلك من خلال كود الطبقة الذي تتعلمه الشبكة العصبية في كل إجراء لتشكيل بعض التمثيل للعمل في شكل سلسلة من الأوزان. وتذهب هذه العروض إلى الشبكة بعد طبقة القناع أم لا. اعتمادًا على العملية ، يمكن أن تحدث هذه الأوزان بمهمة بعض العمليات على مجموعة أوزان الحركة بأكملها (وليس فقط الضرب بـ [0،1]). وبالتالي ، يتم تشكيل مهمة الإجراءات لحساب قيمة مجموعة الإجراءات التي تقوم بها الشبكة. (في الحالة الكلاسيكية ، تحسب طبقة softmax قيمة جميع الإجراءات ؛ في البنية المقترحة ، تحسب الشبكة العصبية قيمة مجموعة من الإجراءات المحددة.)
(للحصول على تعريف لقيمة إجراء ما ، انظر ، على سبيل المثال ، R.S. Sutton ، E. Barto Reinforced Learning.)
أمثلة على استخدام الهيكل المقترح
لعبة تتريس
فكرة استخدام هذه البنية للعب تتريس هي كما يلي. عند المدخلات ، نرسل صورة كأس لعبة تتريس (بكسل واحد مربع). نقوم بتجميع الإجراءات الفردية في مجموعات العمل. يعتبر تقييم إجراء واحد للشبكة العصبية قناعًا للموضع النهائي لشخص ما في كوب. يتم تعيين الشكل بواسطة مربعاته في قناع الإجراء في طبقة قناع الإجراء في الشبكة العصبية. لتحديد مجموعة من الإجراءات ، نختار الحد الأقصى لتقييم الإجراء (خروج) من قائمة جميع المواضع النهائية للشكل الحالي.
الشكل. يظهر الحقل (الخلايا الزرقاء) والشكل الساقط (الخلايا الرمادية الفاتحة). الموضع النهائي للشكل هو جميع المواضع المحتملة التي لا يمكن للشخص نقلها وفقًا لقواعد اللعبة (غير موضحة).
وكيل محاكاة حركة السيارة
في هذه الحالة ، تم تصميم كل إجراء تسريع (عدة تسارع تسارع) ، فرامل (عدة تسارع محتمل أثناء الكبح) ، وكذلك عدة درجات من التدوير كإجراءات أولية. من المفهوم أنه في الوقت نفسه قد يكون هناك دوران وأحد التسارع ، أو إجراء دوران واحد أو إجراء تسريع واحد فقط. في هذه الحالة ، تسمح لك البنية بتحديد إجراءات أولية متعددة في نفس الوقت لتشكيل إجراء معقد.
الشكل. بالإضافة إلى مجال تنفيذ الإجراءات من خلال طراز السيارة (الذي يشار إليه على هدف الوقوف بخطوط حمراء وخضراء) ، يتم أيضًا عرض مدخلات الشبكة العصبية (أدناه) وقيم تقييم الإجراءات لجميع الإجراءات الممكنة في هذه الحالة من النموذج.
التطبيقات الأخرى الممكنة للهندسة المعمارية
وبالمثل ، مع استخدام لعبة tetris في لعبة ما ، يمكن استخدام الهندسة المعمارية في ألعاب أخرى ، حيث يمكن تعيين سلسلة من الأشكال والعديد من الإجراءات في الميدان في نفس الوقت (على سبيل المثال ، التنقل في ساحة اللعب).
في علم الروبوتات ، يمكن أن تكون هذه البنية بمثابة شبكة ميتا تنسق العناصر الهيكلية الفردية إلى مجموعة مشتركة.
أيضًا ، تسمح لك هذه البنية باستخدام تعلم النقل لنقل جزء CNN مسبقًا ، والعكس بالعكس في البداية لتدريب جزء RL من الشبكة العصبية ، ثم تدريب جزء CNN على شبكة RL المدربة بالفعل على بيانات النموذج. في المثال ، عند برمجة لعبة Tetris ، تم تطبيق تعلم النقل مع التدريب في بداية الجزء CNN وجزء FC على طبقة قناع الإجراء (ما يتم نقله إلى الشبكة الناتجة). في مشكلة وقوف السيارات ، أخطط أيضًا لتطبيق تدريب CNN بعد تعلم الجزء RL (أي الكرز الأول).
→ أمثلة التعليمات البرمجية المصدر البرنامج يمكن العثور عليها
هنا