أهلاً! اسمي إريك يو ، وقد كتبت هذا المستودع لمساعدة المبتدئين على البدء في كتابة تحسين السياسة القريبة (PPO) من نقطة الصفر باستخدام Pytorch. هدفي هو توفير رمز لـ PPO الذي هو عاري (حيل صغيرة/لا يتوهم) وموثقة بشكل جيد للغاية/مصممة ومنظم. أنا أستهدف بشكل خاص الأشخاص الذين سئموا من قراءة تطبيقات PPO التي لا نهاية لها وليس لديهم أي فكرة على الإطلاق عما يحدث.
إذا كنت لا تأتي من المتوسط ، فيرجى قراءة سلسلتي أولاً.
لقد كتبت هذا الرمز بافتراض أن لديك بعض الخبرة مع Python والتعلم التعزيز (RL) ، بما في ذلك كيف يجب أن تكون خوارزميات التدرج السياسي (PG) وعمل PPO (ل PPO ، على دراية بالمستوى النظري. إذا لم يكن مألوفًا لـ RL أو PG أو PPO ، اتبع الروابط الثلاثة أدناه بالترتيب:
إذا كان غير مألوف مع RL ، اقرأ مقدمة Openai إلى RL (جميع الأجزاء الثلاثة)
إذا لم يكن مألوفًا لـ PG ، فاقرأ شرحًا بديهيًا لتدرج السياسة
إذا لم يكن مألوفًا لنظرية PPO ، فاقرأ PPO Stack Overflow Post
إذا كان غير مألوف مع كل الثلاثة ، فانتقل إلى هذه الروابط أعلاه بالترتيب من أعلى إلى أسفل.
يرجى ملاحظة أن تطبيق PPO هذا يفترض مساحة مراقبة ومراقبة مستمرة ، ولكن يمكنك التغيير إما إلى منفصلة بسهولة نسبيًا. أنا أتابع رمز Pseudocode المتوفر في Openai's Ginning Up for PPO: https://spinningup.openai.com/en/latest/algorithms/ppo.html ؛ يتم تحديد أرقام خط الترميز الكاذب على أنها "ALG STEP #" في ppo.py.
آمل أن يكون هذا مفيدًا ، كما أتمنى لو كان لدي مورد مثل هذا عندما بدأت رحلتي في التعلم التعزيز.
شكر خاص لـ Zhirui Xia على القيام الجزء 4 من هذا البرنامج التعليمي.
أولاً أوصي بإنشاء بيئة افتراضية للبيثون:
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
للتدريب من الصفر:
python main.py
لاختبار النموذج:
python main.py --mode test --actor_model ppo_actor.pth
للتدريب مع نماذج الممثل/الناقد الحالي:
python main.py --actor_model ppo_actor.pth --critic_model ppo_critic.pth
ملحوظة: لتغيير أجهزة التقدمية والبيئات وما إلى ذلك ، قم بذلك في Main.py ؛ لم يكن لديهم كوسائط سطر الأوامر لأنني لا أحب المدة التي يجعل الأمر هو الأمر.
Main.py هو لدينا التنفيذ. ستحلّل الوسائط باستخدام الوسيطات ، ثم تهيئة بيئتنا ونموذج PPO. اعتمادًا على الوضع الذي تحدده (التدريب بشكل افتراضي) ، سيتم تدريب أو اختبار نموذجنا. لتدريب نموذجنا ، كل ما علينا فعله هو استدعاء وظيفة learn ! تم تصميم هذا مع كيفية تدريب PPO2 مع وضع stable_baselines في الاعتبار.
encuments.py هو ما سوف يتصل به Main إلى تحليل الوسائط من سطر الأوامر.
يحتوي ppo.py على نموذج PPO الخاص بنا. كل سحر التعلم يحدث في هذا الملف. يرجى قراءة سلسلتي المتوسطة لترى كيف تعمل. طريقة أخرى أوصي بها هي استخدام شيء يسمى pdb ، أو Python Debugger ، والتجول عبر الكود الخاص بي بدءًا من عندما أتصل بـ learn في Main.py.
تحتوي Network.py على شبكة عصبية للأمام عينة يمكننا استخدامها لتحديد شبكات الممثل والشبكات الناقدة في PPO.
يحتوي eval_policy.py على الرمز لتقييم السياسة. إنها وحدة منفصلة تمامًا عن الكود الآخر.
يحتوي دليل Graph_Code على الرمز لجمع البيانات تلقائيًا وإنشاء الرسوم البيانية. يستغرق حوالي 10 ساعات على جهاز كمبيوتر لائق لإنشاء جميع البيانات في مقالتي المتوسطة. يجب أن تظل جميع البيانات من المقالة المتوسطة في graph_code/graph_data أيضًا في حالة اهتمامك ؛ إذا كنت تريد ، يمكنك تجديد الرسوم البيانية التي أستخدمها مع البيانات. لمزيد من التفاصيل ، اقرأ ReadMe في Graph_Code.
إليك برنامج تعليمي رائع لـ PDB للبدء: https://www.youtube.com/watch؟v=vqjcx3p89yk&ab_channel=tutorialedge
أو إذا كنت خبيرًا في Defuggers ، فإليك الوثائق: https://docs.python.org/3/library/pdb.html
إليك قائمة بالبيئات التي يمكنك تجربتها. لاحظ أنه في تطبيق PPO هذا ، يمكنك فقط استخدام تلك التي تحتوي على Box لكل من مساحات المراقبة والعمل.
يمكن العثور على فرطاميرات هنا.
يرجى الرجوع إلى مقالتي المتوسطة.
إذا كان لديك أي أسئلة أو ترغب في التواصل معي ، يمكنك أن تجدني هنا:
البريد الإلكتروني: [email protected]
LinkedIn: https://www.linkedin.com/in/eric-yu-engineer/