¡Hola! Mi nombre es Eric Yu, y escribí este repositorio para ayudar a los principiantes a comenzar a escribir la optimización de políticas proximales (PPO) desde cero usando Pytorch. Mi objetivo es proporcionar un código para PPO que sea desnudo (pequeños/sin trucos elegantes) y extremadamente bien documentado/estilizado y estructurado. Estoy especialmente apuntando a personas que están cansadas de leer implementaciones de PPO interminables y no tener absolutamente ninguna idea de lo que está sucediendo.
Si no viene de Medium, lea mi serie primero.
Escribí este código con la suposición de que tiene algo de experiencia con Python y Reffure Learning (RL), incluidos los algoritmos de gradiente de políticas (PG) y el trabajo de PPO (para PPO, solo deberían estar familiarizados con el nivel teórico. Después de todo, este código debería ayudarlo a poner en práctica PPO). Si no está familiarizado con RL, PG o PPO, siga los tres enlaces a continuación en orden:
Si no está familiarizado con RL, lea Openai Introducción a RL (las 3 partes)
Si no está familiarizado con PG, lea una explicación intuitiva del gradiente de política
Si no está familiarizado con la teoría PPO, lea PPO Stack Overflow Post
Si no está familiarizado con los 3, revise los enlaces anteriores en orden de arriba a abajo.
Tenga en cuenta que esta implementación de PPO asume una observación continua y un espacio de acción, pero puede cambiar a discretos con relativa facilidad. Sigo el pseudocódigo provisto en el spinning de OpenAI para PPO: https://spinningup.openai.com/en/latest/algorithms/ppo.html; Los números de línea de pseudocódigo se especifican como "ALG Paso #" en ppo.py.
Espero que esto sea útil, ya que desearía tener un recurso como este cuando comencé mi viaje al aprendizaje de refuerzo.
Un agradecimiento especial a Zhirui Xia por hacer la Parte 4 de este tutorial.
Primero recomiendo crear un entorno virtual de Python:
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
Para entrenar desde cero:
python main.py
Para probar el modelo:
python main.py --mode test --actor_model ppo_actor.pth
Para entrenar con los modelos de actor/crítico existentes:
python main.py --actor_model ppo_actor.pth --critic_model ppo_critic.pth
Nota: Cambiar hiperparámetros, entornos, etc. Hágalo en main.py; No los tenía como argumentos de la línea de comandos porque no me gustan cuánto tiempo hace el comando.
Main.py es nuestro ejecutable. Analizará los argumentos utilizando Arguments.py, luego inicializará nuestro entorno y modelo PPO. Dependiendo del modo que especifique (tren por defecto), entrenará o probará nuestro modelo. Para entrenar nuestro modelo, ¡todo lo que tenemos que hacer es llamar a la función learn ! Esto fue diseñado con la forma en que entrena PPO2 con stable_baselines en mente.
Arguments.py es lo que Main llamará para analizar argumentos desde la línea de comandos.
PPO.py contiene nuestro modelo PPO. Toda la magia de aprendizaje ocurre en este archivo. Lea mi serie Medium para ver cómo funciona. Otro método que recomiendo es usar algo llamado pdb , o depurador de Python, y pasar mi código a partir de cuando llamo learn en Main.py.
Network.py contiene una red neuronal de muestra de Feed Feed Feed Feed para definir nuestras redes de actores y críticos en PPO.
eval_policy.py contiene el código para evaluar la política. Es un módulo completamente separado del otro código.
El directorio Graph_Code contiene el código para recopilar automáticamente los datos y generar gráficos. Toma ~ 10 horas en una computadora decente para generar todos los datos en mi artículo medio. Todos los datos del artículo mediano aún deben estar en graph_code/graph_data también en caso de que esté interesado; Si lo desea, puede regenerar los gráficos que uso con los datos. Para más detalles, lea el ReadMe en Graph_code.
Aquí hay un gran tutorial de PDB para comenzar: https://www.youtube.com/watch?v=vqjcx3p89yk&ab_channel=tutorialdedge
O si eres un experto con debuggers, aquí está la documentación: https://docs.python.org/3/library/pdb.html
Aquí hay una lista de entornos que puede probar. Tenga en cuenta que en esta implementación de PPO, solo puede usar los que tienen Box para espacios de observación y acción.
Los hiperparámetros se pueden encontrar aquí.
Consulte mi artículo mediano.
Si tiene alguna pregunta o desea comunicarse conmigo, puede encontrarme aquí:
Correo electrónico: [email protected]
LinkedIn: https://www.linkedin.com/in/eric-yu-ingineer/