Salut! Je m'appelle Eric Yu, et j'ai écrit ce référentiel pour aider les débutants à démarrer dans l'écriture de l'optimisation de la politique proximale (PPO) à partir de zéro à l'aide de Pytorch. Mon objectif est de fournir un code pour PPO qui est à nu (petits / pas de trucs de fantaisie) et extrêmement bien documentés / stylisés et structurés. Je cible particulièrement les gens qui sont fatigués de lire des implémentations PPO sans fin et de n'avoir absolument aucune idée de ce qui se passe.
Si vous ne venez pas de Medium, veuillez d'abord lire ma série.
J'ai écrit ce code en supposant que vous avez une certaine expérience des algorithmes Python and Renforcement Learning (RL), y compris comment les algorithmes de gradient de politique (PG) et le travail PPO (pour PPO, devraient simplement être familiers avec le niveau théorique. Après tout, ce code devrait vous aider à mettre en pratique PPO). Si cela ne connaît pas RL, PG ou PPO, suivez les trois liens ci-dessous dans l'ordre:
Si ce n'est pas familier avec RL, lisez l'introduction d'Openai à RL (toutes les 3 parties)
Si ce n'est pas familier avec PG, lisez une explication intuitive du gradient politique
Si ce n'est pas familier avec la théorie PPO, lisez le post de débordement de pile PPO
Si vous ne savez pas les 3, passez par ces liens ci-dessus dans l'ordre de haut en bas.
Veuillez noter que cette implémentation PPO suppose un espace d'observation et d'action continu, mais vous pouvez changer soit discret relativement facilement. Je suis le pseudocode fourni dans le spinning d'Openai pour PPO: https://spinningup.openai.com/en/latest/algorithms/ppo.html; Les numéros de ligne pseudocode sont spécifiés en "ALG étape #" dans ppo.py.
J'espère que cela est utile, car j'aurais aimé avoir une ressource comme celle-ci lorsque j'ai commencé mon voyage dans l'apprentissage du renforcement.
Un merci spécial à Zhirui Xia pour avoir fait la partie 4 de ce tutoriel.
Je recommande d'abord de créer un environnement virtuel Python:
python -m venv venv
source venv/bin/activate
pip install -r requirements.txt
S'entraîner à partir de zéro:
python main.py
Pour tester le modèle:
python main.py --mode test --actor_model ppo_actor.pth
Pour s'entraîner avec les modèles acteurs / critiques existants:
python main.py --actor_model ppo_actor.pth --critic_model ppo_critic.pth
Remarque: Pour changer les hyperparamètres, les environnements, etc., faites-le dans main.py; Je ne les avais pas comme arguments de ligne de commande parce que je n'aime pas combien de temps cela fait la commande.
main.py est notre exécutable. Il analysera les arguments à l'aide d'arguments.py, puis d'initialisera notre environnement et notre modèle PPO. Selon le mode que vous spécifiez (entraîner par défaut), il entraînera ou testera notre modèle. Pour former notre modèle, tout ce que nous avons à faire est d'appeler la fonction learn ! Ceci a été conçu avec la façon dont vous entraînez PPO2 avec STABLE_BASELLes à l'esprit.
arguments.py est ce que Main appellera pour analyser les arguments de la ligne de commande.
PPO.py contient notre modèle PPO. Toute la magie d'apprentissage se produit dans ce fichier. Veuillez lire ma série médiane pour voir comment cela fonctionne. Une autre méthode que je recommande consiste à utiliser quelque chose appelé pdb , ou Python Debugger, et à passer par mon code à partir de quand j'appelle learn in Main.py.
Network.py contient un échantillon de réseau de neurones en avant de flux que nous pouvons utiliser pour définir nos réseaux acteurs et critiques dans PPO.
EVAL_POLICY.py contient le code pour évaluer la politique. Il s'agit d'un module complètement séparé de l'autre code.
Le répertoire Graph_code contient le code pour collecter automatiquement les données et générer des graphiques. Prend ~ 10 heures sur un ordinateur décent pour générer toutes les données de mon article moyen. Toutes les données de l'article Medium doivent toujours être dans graph_code/graph_data au cas où vous seriez intéressé; Si vous le souhaitez, vous pouvez régénérer les graphiques que j'utilise avec les données. Pour plus de détails, lisez le Readme dans graph_code.
Voici un excellent tutoriel PDB pour commencer: https://www.youtube.com/watch?v=vqjcx3p89yk&ab_channel=tutorialedged
Ou si vous êtes un expert avec Debuggers, voici la documentation: https://docs.python.org/3/library/pdb.html
Voici une liste d'environnements que vous pouvez essayer. Notez que dans cette implémentation PPO, vous ne pouvez utiliser celles Box pour les espaces d'observation et d'action.
Des hyperparamètres peuvent être trouvés ici.
Veuillez vous référer à mon article moyen.
Si vous avez des questions ou souhaitez me contacter, vous pouvez me trouver ici:
Courriel: [email protected]
LinkedIn: https://www.linkedin.com/in/eric-yu-engineer/