شعار زيفيرنت

دورة التعلم التعزيزي العملي ، الجزء الثاني

التاريخ:

By باو لابارتا باجو، عالم رياضيات وعالم بيانات.

سيارات الأجرة في البندقية هيلينا يانكوفيتشوفا كوفاتشوفا تبدأ من Pexels.

هذا هو الجزء الثاني من الدورة التدريبية العملية حول التعلم المعزز ، والتي تأخذك من الصفر إلى HERO. سنتعرف اليوم على Q-Learning ، وهي خوارزمية RL كلاسيكية ولدت في التسعينيات.

إذا فاتك جزء 1، يرجى قراءته للحصول على مصطلحات التعلم المعزز والأساسيات.

اليوم نقوم بحل مشكلة التعلم الأولى لدينا ...

سنقوم بتدريب وكيل لقيادة سيارة أجرة!

حسنًا ، نسخة مبسطة من بيئة سيارات الأجرة ، لكن سيارة أجرة في نهاية اليوم.

سنستخدم Q-learning ، وهي واحدة من أقدم خوارزميات RL وأكثرها استخدامًا.

وبالطبع بايثون.

كل الأكواد الخاصة بهذا الدرس موجودة في هذا جيثب الريبو. Git استنساخه لمتابعة مشكلة اليوم.

1. مشكلة قيادة سيارات الأجرة

سنقوم بتعليم وكيل قيادة سيارة أجرة باستخدام التعلم المعزز.

قيادة سيارة أجرة في العالم الحقيقي مهمة معقدة للغاية لتبدأ بها. لهذا السبب ، سنعمل في بيئة مبسطة تلتقط الأشياء الثلاثة الأساسية التي يقوم بها سائق التاكسي الجيد ، وهي:

  • اصطحاب الركاب وإسقاطهم في وجهتهم المرغوبة.
  • القيادة بأمان ، مما يعني عدم حدوث حوادث.
  • دفعهم في أقصر وقت ممكن.

سوف نستخدم بيئة من OpenAI Gym تسمى تاكسي- v3 بيئة.

هناك أربعة مواقع محددة في عالم الشبكة المشار إليها بواسطة R (ed) و G (reen) و Y (ellow) و B (lue).

عندما تبدأ الحلقة ، تبدأ سيارة الأجرة في مربع عشوائي ، ويكون الراكب في موقع عشوائي (R ، G ، Y ، أو B).

تقود سيارة الأجرة إلى موقع الراكب ، وتلتقط الراكب ، وتقود إلى وجهة الراكب (موقع آخر من المواقع الأربعة المحددة) ، ثم تنزل الراكب. أثناء القيام بذلك ، يحتاج سائق التاكسي لدينا إلى القيادة بعناية لتجنب الاصطدام بأي جدار تم وضع علامة عليه كـ |. بمجرد إنزال الراكب ، تنتهي الحلقة.

هذه هي الطريقة التي سنبني بها عامل q-Learning الذي سنقوم ببنائه اليوم:

قبل أن نصل إلى هناك ، دعونا نفهم جيدًا ما هي الإجراءات والحالات والمكافآت لهذه البيئة.

2. البيئة ، الإجراءات ، الدول ، المكافآت

دفاتر الملاحظات / 00_environment.ipynb

لنقم أولاً بتحميل البيئة:

ما هي الإجراءات يمكن للوكيل الاختيار من بينها في كل خطوة؟

  • 0 بالسيارة لأسفل
  • 1 قيادة
  • 2 قيادة الحق
  • 3 محرك اليسار
  • 4 - اصطحاب راكب
  • 5 ـ إنزال راكب

وعلى الولايات?

  • 25 موقعًا محتملاً لسيارات الأجرة لأن العالم عبارة عن شبكة 5 × 5.
  • 5 مواقع محتملة للراكب ، وهي R و G و Y و B ، بالإضافة إلى الحالة عندما يكون الراكب في سيارة الأجرة.
  • 4 مواقع الوجهة

وهو ما يعطينا 25 × 5 × 4 = 500 حالة.

ماذا عن المكافآت?

  • -1 مكافأة افتراضية لكل خطوة.
    لماذا -1 وليس 0 فقط؟ لأننا نريد أن نشجع الوكيل على قضاء أقصر وقت ، وذلك بمعاقبة كل خطوة إضافية. هذا ما تتوقعه من سائق تاكسي ، أليس كذلك؟
  • 20 مكافأة تسليم المسافر إلى الوجهة الصحيحة.
  • -10 مكافأة لتنفيذ عملية النقل أو النزول في الموقع الخطأ.

يمكنك قراءة المكافآت وتحولات البيئة (حالة ، إجراء) → next_state تبدأ من بي.

بالمناسبة ، يمكنك عرض البيئة تحت كل حالة للتحقق مرة أخرى من هذه البيئة.

من الدولة = 123:

يتحرك الوكيل للعمل الجنوبي = 0 للوصول إلى الحالة = 223:

والمكافأة هي -1 ، حيث لم تنته الحلقة ولم يتم اختيار أو إسقاط السائق بشكل غير صحيح.

3. عامل الأساس العشوائي

دفاتر الملاحظات / 01_random_agent_baseline.ipynb

قبل البدء في تنفيذ أي خوارزمية معقدة ، يجب عليك دائمًا إنشاء نموذج أساسي.

لا تنطبق هذه النصيحة على مشكلات التعلم المعزز فحسب ، بل تنطبق أيضًا على مشكلات التعلم الآلي بشكل عام.

من المغري جدًا القفز مباشرة إلى الخوارزميات المعقدة / الفاخرة ، ولكن ما لم تكن خبيرًا حقًا ، فسوف تفشل بشكل رهيب.

لنستخدم عامل عشوائي كنموذج أساسي.

يمكننا أن نرى كيف يعمل هذا العامل لحالة ابتدائية معينة = 198:

3,804،XNUMX خطوة كثير!

يرجى مشاهدته بنفسك في هذا الفيديو:

للحصول على مقياس أكثر تمثيلاً للأداء ، يمكننا تكرار نفس حلقة التقييم n = 100 مرة بدءًا من كل مرة بحالة عشوائية.

إذا كنت مؤامرة الخطوات_ل_الحلقة و  العقوبات_ لكل_حلقة يمكنك ملاحظة أن أيا منها لا يتناقص كلما أكمل الوكيل المزيد من الحلقات. بمعنى آخر ، الوكيل لا يتعلم أي شيء.

إذا كنت تريد إحصائيات موجزة عن الأداء ، يمكنك أخذ المتوسطات:

تطبيق الوكلاء الذين يتعلمون هو هدف التعلم المعزز ، وهذه الدورة أيضًا.

دعونا ننفذ أول وكيل "ذكي" لدينا باستخدام Q-Learning ، أحد أقدم خوارزميات RL وأكثرها استخدامًا.

4. وكيل التعلم Q

دفاتر الملاحظات / 02_q_agent.ipynb

س-التعلم (من قبل كريس والكينز و  بيتر ديان) هي خوارزمية للعثور على دالة q-value المثلى.

كما قلنا في جزء 1، وظيفة q-value س (ق ، أ) المرتبطة بسياسة π هو إجمالي المكافأة التي يتوقع الوكيل الحصول عليها عندما يكون في الولاية s الوكيل يتخذ الإجراءات a ويتبع السياسة π بعد ذلك.

دالة q-value المثلى س * (ق ، أ)هي دالة q-value المرتبطة بالسياسة المثلى π *.

إذا كنت تعرف س * (ق ، أ) ، يمكنك استنتاج π *: على سبيل المثال ، يمكنك اختيار الإجراء الذي يزيد Q * (s ، a) للحالة الحالية كإجراء تالي.

Q-Learning هي خوارزمية تكرارية لحساب تقديرات تقريبية أفضل وأفضل لوظيفة q-value المثلى س * (ق ، أ)، بدءًا من تخمين أولي تعسفي Q⁰ (s ، a).

في بيئة جدولية مثل Taxi-v3 مع عدد محدود من الحالات والإجراءات ، فإن الدالة q هي أساسًا مصفوفة. يحتوي على عدد من الصفوف مثل الحالات والأعمدة مثل الإجراءات ، أي 500 × 6.

طيب، ولكن كيف تحسب بالضبط التقريب التالي Q¹ (s، a) من Q⁰ (s، a)؟

هذه هي الصيغة الأساسية في Q-Learning:

نظرًا لأن وكيلنا يتنقل في البيئة ويلاحظ الحالة التالية ق ' والمكافأة r، تقوم بتحديث مصفوفة القيمة q الخاصة بك بهذه الصيغة.

ما هو معدل التعلم 𝛼 في هذه الصيغة؟

• معدل التعليم (كالمعتاد في التعلم الآلي) هو رقم صغير يتحكم في حجم التحديثات التي يتم إجراؤها على وظيفة q. تحتاج إلى ضبطه ، حيث أن قيمة كبيرة جدًا ستؤدي إلى تدريب غير مستقر ، وقد لا يكون الحجم الصغير جدًا كافيًا للهروب من الحدود الدنيا المحلية.

وهذا عامل الخصم 𝛾?

• عامل الخصم هي معلمة (مفرطة) بين 0 و 1 تحدد مدى اهتمام وكيلنا بالمكافآت في المستقبل البعيد مقارنة بتلك الموجودة في المستقبل القريب.

  • عندما تكون 𝛾 = 0 ، فإن الوكيل يهتم فقط بتعظيم المكافأة الفورية. كما يحدث في الحياة ، فإن تعظيم المكافأة الفورية ليس أفضل وصفة لتحقيق أفضل النتائج على المدى الطويل. يحدث هذا أيضًا في وكلاء RL.
  • عندما 𝛾 = 1 ، يقوم الوكيل بتقييم كل إجراء من أفعاله بناءً على المجموع الإجمالي لجميع مكافآته المستقبلية. في هذه الحالة ، يزن الوكيل المكافآت الفورية والمكافآت المستقبلية بالتساوي.

عادة ما يكون عامل الخصم قيمة وسيطة ، على سبيل المثال ، 0.6.

لتلخيص ، إذا كنت

  • تدريب طويل بما فيه الكفاية
  • مع معدل تعلم لائق وعامل خصم
  • ويستكشف الوكيل مساحة كافية للدولة
  • وتقوم بتحديث مصفوفة q-value باستخدام صيغة Q-Learning ،

سوف يتقارب التقريب الأولي الخاص بك في النهاية إلى مصفوفة q المثلى. هاهو!

دعنا ننفذ فئة Python لعامل Q بعد ذلك.

API الخاص به هو نفسه بالنسبة لـ عشوائي أعلاه ، ولكن بطريقة إضافية update_parameters (). تأخذ هذه الطريقة ناقل الانتقال (حالة, عمل, مكافأة, الدولة التالية) ويقوم بتحديث تقريب مصفوفة القيمة q self.q_table باستخدام صيغة Q-Learning من الأعلى.

الآن ، نحتاج إلى توصيل هذا العامل بحلقة تدريب واستدعاء طريقة update_parameters () في كل مرة يجمع فيها الوكيل تجربة جديدة.

تذكر أيضًا أننا بحاجة إلى ضمان أن يستكشف الوكيل مساحة كافية للولاية. تذكر معلمة الاستكشاف والاستغلال التي تحدثنا عنها جزء 1؟ هذا عندما تدخل معلمة epsilon في اللعبة.

دعونا ندرب الوكيل على n_الحلقات = 10,000 والاستخدام إبسيلون = 10٪:

والمؤامرة الخطوات_ل_الحلقة و  العقوبات_ لكل_حلقة:

لطيف - جيد! تبدو هذه الرسوم البيانية أفضل بكثير من RandomAgent. يتناقص كلا المقياسين مع التدريب ، مما يعني أن وكيلنا يتعلم.

يمكننا في الواقع أن نرى كيف يقود الوكيل بدءًا من نفس الحالة = 123 كما استخدمنا لـ عشوائي.

رحلة لطيفة من قبل وكيلنا Q!

إذا كنت تريد مقارنة الأرقام الثابتة ، فيمكنك تقييم أداء q-agent على ، دعنا نقول ، 100 حلقة عشوائية وحساب متوسط ​​عدد الطوابع الزمنية والعقوبات المتكبدة.

قليلا عن سياسات إبسيلون الجشع

عند تقييم العامل ، يظل استخدام قيمة إبسيلون موجبة وليس إبسيلون = 0 ممارسة جيدة.

Wهاي هكذا؟ ألا يتم تدريب وكيلنا بشكل كامل؟ لماذا نحتاج إلى الاحتفاظ بمصدر العشوائية هذا عندما نختار الإجراء التالي؟

السبب هو منع فرط التجهيز.

حتى بالنسبة لمثل هذه الحالة الصغيرة ، مساحة العمل في Taxi-v3 (أي 500 × 6) ، فمن المحتمل أنه أثناء التدريب ، لم يقم وكيلنا بزيارة حالات معينة كافية. ومن ثم ، قد لا يكون أداؤه في هذه الحالات مثاليًا بنسبة 100٪ ، مما يتسبب في "القبض" على العامل في حلقة لا نهائية تقريبًا من الإجراءات دون المستوى الأمثل. إذا كان إبسيلون عبارة عن رقم موجب صغير (على سبيل المثال ، 5٪) ، فيمكننا مساعدة العامل على الهروب من هذه الحلقات اللانهائية من الإجراءات دون المستوى الأمثل.

باستخدام إبسيلون صغير في التقييم ، فإننا نعتمد ما يسمى استراتيجية إبسيلون الجشع.

دعونا نقيم وكيلنا المدرب على n_ الحلقات = 100 باستخدام إبسيلون = 0.05. لاحظ كيف تبدو الحلقة تقريبًا تمامًا مثل حلقة القطار أعلاه ، ولكن بدون الاتصال بـ update_parameters ():

تبدو هذه الأرقام أفضل بكثير من تلك الخاصة بـ عشوائي.

يمكننا القول أن وكيلنا قد تعلم قيادة سيارة الأجرة!

تعطينا Q-Learning طريقة لحساب قيم q المثلى. ولكن، ماذا عن البارامترات الفائقة alpha و gamma و epsilon؟

لقد اخترتهم من أجلك ، بشكل تعسفي إلى حد ما. ولكن في الممارسة العملية ، سوف تحتاج إلى ضبطها وفقًا لمشكلات RL الخاصة بك.

دعنا نستكشف تأثيرهم على التعلم للحصول على حدس أفضل لما يجري.

5. ضبط فرط المعلمة

دفاتر الملاحظات / 03_q_agent_hyperparameters_analysis.ipynb

دعنا ندرب وكيلنا باستخدام قيم مختلفة لـ alpha (معدل التعلم) و gamma (عامل الخصم). بالنسبة إلى إبسيلون ، نحافظ عليه عند 10٪.

من أجل الحفاظ على الكود نظيفًا ، قمت بتغليف تعريف q-agent بالداخل src / q_agent.py وحلقة التدريب داخل قطار() وظيفة في src / loops.py.

دعونا نرسم الخطوات الزمنية لكل حلقة لكل مجموعة من المعلمات المفرطة.

يبدو الرسم البياني فنيًا ولكنه صاخب جدًا.

ومع ذلك ، هناك شيء يمكنك ملاحظته ، وهو أنه عندما يكون alpha = 0.01 يكون التعلم أبطأ. يتحكم alpha (معدل التعلم) في مقدار تحديث قيم q في كل تكرار. القيمة الصغيرة جدًا تعني التعلم البطيء.

دعنا نتجاهل alpha = 0.01 ونقوم بإجراء 10 دورات تدريبية لكل مجموعة من المعلمات المفرطة. نحسب متوسط ​​الخطوات الزمنية لكل رقم حلقة ، من 1 إلى 1000 ، باستخدام هذه 10 مرات.

لقد أنشأت الوظيفة train_many_runs () في src / loops.py للحفاظ على نظافة رمز الكمبيوتر الدفتري:

يبدو مثل ألفا = 1.0 هي القيمة التي تعمل بشكل أفضل ، بينما يبدو أن تأثير جاما أقل.

تهانينا! لقد قمت بضبط معدل التعلم الأول الخاص بك في هذه الدورة.

يمكن أن يكون ضبط المعلمات الفائقة مضيعة للوقت ومملة. هناك مكتبات ممتازة لأتمتة العملية اليدوية التي اتبعناها للتو ، مثل أوبتونا، ولكن هذا شيء سنلعب به لاحقًا في الدورة. في الوقت الحالي ، استمتع بتسريع التدريبات التي وجدناها للتو.

انتظر ، ماذا يحدث مع epsilon = 10٪ الذي أخبرتك أن تثق بي فيه؟

هل قيمة 10٪ الحالية هي الأفضل؟

دعونا نتحقق من ذلك بأنفسنا.

نأخذ أفضل ما وجدناه من ألفا وجاما ، على سبيل المثال ،

  • ألفا = 1.0
  • جاما = 0.9 (كان بإمكاننا أخذ 0.1 أو 0.6 أيضًا)

وتدرّب باستخدام إبسيلونات مختلفة = [0.01 ، 0.1 ، 0.9]

ورسم منحنيات الخطوات والعقوبات الناتجة:

كما ترى ، يبدو أن كلا من epsilon = 0.01 و epsilon = 0.1 يعملان بشكل جيد ، حيث أنهما يحققان التوازن الصحيح بين الاستكشاف والاستغلال.

على الجانب الآخر ، فإن قيمة epsilon = 0.9 كبيرة جدًا ، مما يتسبب في "الكثير" من العشوائية أثناء التدريب ويمنع مصفوفة q الخاصة بنا من التقارب إلى المستوى الأمثل. لاحظ كيفية استقرار الأداء عند حوالي 250 خطوة زمنية لكل حلقة.

بشكل عام ، فإن أفضل استراتيجية لاختيار المعلمة المفرطة epsilon هي تسوس إبسيلون التدريجي. أي في بداية التدريب ، عندما يكون الوكيل غير متأكد من تقديره لقيمة q ، فمن الأفضل زيارة أكبر عدد ممكن من الحالات ، ولهذا السبب ، يكون إبسيلون كبير رائعًا (على سبيل المثال ، 50٪)

مع تقدم التدريب وصقل الوكيل لتقديره لقيمة q ، لم يعد من الأفضل استكشاف ذلك القدر. بدلاً من ذلك ، من خلال تقليل إبسيلون ، يمكن للوكيل أن يتعلم تحسين قيم q وضبطها لجعلها تتقارب بشكل أسرع مع القيم المثلى. يمكن أن يتسبب حجم epsilon الكبير جدًا في حدوث مشكلات في التقارب ، كما نرى في epsilon = 0.9.

سنقوم بضبط epsilons على طول المسار ، لذلك لن أصر كثيرًا في الوقت الحالي. مرة أخرى ، استمتع بما قمنا به اليوم. إنه أمر رائع جدا.

أحسنت! (صورة المؤلف).

الملخص

تهانينا (على الأرجح) على حل مشكلتك الأولى في التعلم المعزز.

هذه هي الدروس الأساسية التي أريدك أن تنام عليها:

  • ترتبط صعوبة مشكلة التعلم المعزز ارتباطًا مباشرًا بعدد الإجراءات والحالات الممكنة. Taxi-v3 هي بيئة مجدولة (أي عدد محدود من الحالات والإجراءات) ، لذا فهي بيئة سهلة.
  • Q-Learning هي خوارزمية تعليمية تعمل بشكل ممتاز في البيئات المجدولة.
  • بغض النظر عن خوارزمية RL التي تستخدمها ، هناك معلمات مفرطة تحتاج إلى ضبطها للتأكد من أن وكيلك يتعلم الاستراتيجية المثلى.
  • تعد عملية ضبط المعلمات الفائقة عملية تستغرق وقتًا طويلاً ولكنها ضرورية لضمان تعلم وكلائنا. سوف نتحسن في هذا مع تقدم الدورة.

الواجبات

دفاتر الملاحظات / 04_homework.ipynb

هذا ما أريدك أن تفعله:

  1. استنساخ Git الريبو إلى جهازك المحلي.
  2. اقامة البيئة لهذا الدرس 01_taxi.
  3. ساعات العمل 01_taxi / otebooks / 04_homework.ipynb وحاول إكمال التحديين.

أسميها تحديات (وليس تمارين) لأنها ليست سهلة. أريدك أن تجربهم ، وأن تتسخ يديك ، و (ربما) تنجح.

في التحدي الأول ، أتحداك أن تقوم بتحديث وظيفة القطار () src / loops.py لقبول epsilon المعتمد على الحلقة.

في التحدي الثاني ، أريدك أن تقوم بترقية مهاراتك في Python وتنفيذ المعالجة المتوازية لتسريع تجربة المعلمات الفائقة.

كالعادة ، إذا واجهتك مشكلة وتحتاج إلى تعليقات ، راسلني على [البريد الإلكتروني محمي]

سأكون أكثر من سعيد لمساعدتك.

إذا كنت ترغب في الحصول على تحديثات حول الدورة التدريبية ، قم بالاشتراك في آلات البيانات النشرة.

أصلي. تم إعادة النشر بإذن.

المصدر: https://www.kdnuggets.com/2021/12/hands-on-reinforcement-learning-part-2.html

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة