الحالة: صيانة (توقع إصلاحات الأخطاء والتحديثات الطفيفة)
OpenAI Baselines عبارة عن مجموعة من التطبيقات عالية الجودة لخوارزميات التعلم المعزز.
ستسهل هذه الخوارزميات على مجتمع البحث تكرار الأفكار الجديدة وتحسينها وتحديدها، كما ستنشئ خطوط أساس جيدة لبناء الأبحاث عليها. إن تطبيق DQN الخاص بنا ومتغيراته يتساوى تقريبًا مع النتائج الواردة في الأبحاث المنشورة. ونتوقع أن يتم استخدامها كقاعدة يمكن إضافة أفكار جديدة حولها، وكأداة لمقارنة النهج الجديد مع النهج الحالي.
تتطلب الخطوط الأساسية python3 (>=3.5) مع رؤوس التطوير. ستحتاج أيضًا إلى حزم النظام CMake وOpenMPI وzlib. يمكن تثبيتها على النحو التالي
sudo apt-get update && sudo apt-get install cmake libopenmpi-dev python3-dev zlib1g-dev
يتطلب تثبيت حزم النظام على نظام Mac توفر برنامج Homebrew. بعد تثبيت Homebrew، قم بتشغيل ما يلي:
brew install cmake openmpi
من المنظور العام لسلامة حزمة بايثون، من الجيد استخدام البيئات الافتراضية (virtualenvs) للتأكد من أن الحزم من مشاريع مختلفة لا تتداخل مع بعضها البعض. يمكنك تثبيت virtualenv (وهو في حد ذاته حزمة نقاط) عبر
pip install virtualenv
Virtualenvs هي في الأساس مجلدات تحتوي على نسخ من python قابلة للتنفيذ وجميع حزم python. لإنشاء Virtualenv يسمى venv باستخدام python3، يتم تشغيله
virtualenv /path/to/venv --python=python3
لتنشيط Virtualenv:
. /path/to/venv/bin/activate
يمكن العثور على المزيد من البرامج التعليمية الشاملة حول virtualenvs والخيارات هنا
يدعم الفرع الرئيسي Tensorflow من الإصدار 1.4 إلى 1.14. للحصول على دعم Tensorflow 2.0، يرجى استخدام فرع tf2.
استنساخ الريبو والقرص المضغوط فيه:
git clone https://github.com/openai/baselines.git
cd baselines
إذا لم يكن TensorFlow مثبتًا لديك بالفعل، فقم بتثبيت النسخة المفضلة لديك من TensorFlow. في معظم الحالات، يمكنك استخدام
pip install tensorflow-gpu==1.14 # if you have a CUDA-compatible gpu and proper drivers
أو
pip install tensorflow==1.14
لتثبيت Tensorflow 1.14، وهو أحدث إصدار من Tensorflow المدعوم من الفرع الرئيسي. ارجع إلى دليل تثبيت TensorFlow لمزيد من التفاصيل.
تثبيت حزمة خطوط الأساس
pip install -e .
تستخدم بعض الأمثلة الأساسية جهاز محاكاة الفيزياء MuJoCo (ديناميكيات متعددة المفاصل في الاتصال)، وهي ملكية خاصة وتتطلب ثنائيات وترخيصًا (يمكن الحصول على ترخيص مؤقت لمدة 30 يومًا من www.mujoco.org). يمكن العثور على تعليمات حول إعداد MuJoCo هنا
يمكن تشغيل جميع اختبارات الوحدات في خطوط الأساس باستخدام pytest runner:
pip install pytest
pytest
يتم استخدام معظم الخوارزميات في مستودعات خطوط الأساس على النحو التالي:
python -m baselines.run --alg= < name of the algorithm > --env= < environment_id > [additional arguments]
على سبيل المثال، لتدريب شبكة متصلة بالكامل تتحكم في الروبوت MuJoCo باستخدام PPO2 لمدة 20 مليون خطوة زمنية
python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7
لاحظ أنه بالنسبة لبيئات mujoco، تكون الشبكة المتصلة بالكامل هي الشبكة الافتراضية، لذا يمكننا حذف --network=mlp
يمكن التحكم في المعلمات الفائقة لكل من الشبكة وخوارزمية التعلم عبر سطر الأوامر، على سبيل المثال:
python -m baselines.run --alg=ppo2 --env=Humanoid-v2 --network=mlp --num_timesteps=2e7 --ent_coef=0.1 --num_hidden=32 --num_layers=3 --value_network=copy
سيتم ضبط معامل الإنتروبيا على 0.1، وإنشاء شبكة متصلة بالكامل بثلاث طبقات تحتوي كل منها على 32 وحدة مخفية، وإنشاء شبكة منفصلة لتقدير دالة القيمة (بحيث لا تتم مشاركة معلماتها مع شبكة السياسة، ولكن البنية هي نفسها )
راجع سلاسل المستندات في common/models.py للحصول على وصف معلمات الشبكة لكل نوع من النماذج، وسلسلة المستندات الخاصة بخطوط الأساس/ppo2/ppo2.py/learn() للحصول على وصف معلمات ppo2 الفائقة.
تعد DQN مع Atari في هذه المرحلة إحدى كلاسيكيات المعايير. لتشغيل تطبيق DQN الأساسي على Atari Pong:
python -m baselines.run --alg=deepq --env=PongNoFrameskip-v4 --num_timesteps=1e6
لم يتم توحيد واجهة برمجة تطبيقات تسلسل الخوارزميات بشكل صحيح بعد؛ ومع ذلك، هناك طريقة بسيطة لحفظ/استعادة النماذج المدربة. يقوم خيار سطر الأوامر --save_path
و --load_path
بتحميل حالة Tensorflow من مسار معين قبل التدريب، ويحفظها بعد التدريب، على التوالي. لنتخيل أنك ترغب في تدريب ppo2 على Atari Pong، واحفظ النموذج ثم تصور لاحقًا ما تعلمته.
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2
من المفترض أن يصل هذا إلى متوسط المكافأة لكل حلقة حوالي 20. لتحميل النموذج وتصوره، سنقوم بما يلي - تحميل النموذج وتدريبه على 0 خطوة، ثم التصور:
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=0 --load_path= ~ /models/pong_20M_ppo2 --play
ملاحظة: تتطلب بيئات Mujoco التطبيع لتعمل بشكل صحيح، لذلك نقوم بتغليفها باستخدام غلاف VecNormalize. حاليًا، لضمان حفظ النماذج بالتطبيع (بحيث يمكن استعادة النماذج المدربة وتشغيلها دون مزيد من التدريب) يتم حفظ معاملات التطبيع كمتغيرات Tensorflow. يمكن أن يؤدي هذا إلى تقليل الأداء إلى حد ما، لذا إذا كنت تحتاج إلى خطوات عالية الإنتاجية مع Mujoco ولا تحتاج إلى حفظ/استعادة النماذج، فقد يكون من المنطقي استخدام التسوية غير الواضحة بدلاً من ذلك. للقيام بذلك، قم بتعيين 'use_tf=False` في baselines/run.py.
افتراضيًا، يتم حفظ جميع البيانات التلخيصية، بما في ذلك التقدم والمخرجات القياسية، في دليل فريد في مجلد مؤقت، يتم تحديده عن طريق استدعاء ملف tempfile.gettempdir() الخاص بـ Python. يمكن تغيير الدليل باستخدام خيار سطر الأوامر --log_path
.
python -m baselines.run --alg=ppo2 --env=PongNoFrameskip-v4 --num_timesteps=2e7 --save_path= ~ /models/pong_20M_ppo2 --log_path= ~ /logs/Pong/
ملاحظة: يرجى العلم أن المُسجل سوف يقوم بالكتابة فوق الملفات التي تحمل نفس الاسم في دليل موجود، وبالتالي فمن المستحسن أن يتم إعطاء أسماء المجلدات طابعًا زمنيًا فريدًا لمنع استبدال السجلات.
هناك طريقة أخرى يمكن من خلالها تغيير الدليل المؤقت وهي استخدام متغير البيئة $OPENAI_LOGDIR
.
للحصول على أمثلة حول كيفية تحميل بيانات التدريب وعرضها، انظر هنا.
نتائج المعايير الخاصة بـ Mujoco (مليون خطوة زمنية) وAtari (10 مليون خطوة زمنية) متاحة هنا لـ Mujoco وهنا لـ Atari على التوالي. لاحظ أن هذه النتائج قد لا تكون موجودة في أحدث إصدار من التعليمات البرمجية، ويتم تحديد تجزئة الالتزام المحددة التي تم الحصول على النتائج من خلالها في صفحة المعايير.
للاستشهاد بهذا المستودع في المنشورات:
@misc{baselines,
author = {Dhariwal, Prafulla and Hesse, Christopher and Klimov, Oleg and Nichol, Alex and Plappert, Matthias and Radford, Alec and Schulman, John and Sidor, Szymon and Wu, Yuhuai and Zhokhov, Peter},
title = {OpenAI Baselines},
year = {2017},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {url{https://github.com/openai/baselines}},
}