[PYTHON] Essayez l'algorithme d'apprentissage amélioré standard d'OpenAI PPO

OpenAI a [annoncé] qu'il utilisera un algorithme appelé PPO (Proximal Policy Optimization) comme algorithme standard (https://blog.openai.com/openai-baselines-ppo/). Le code a également été publié, je vais donc l'essayer. Il semble qu'il soit inclus dans le package d'apprentissage amélioré appelé baselines.

Je l'ai essayé avec OSX 10.11.6, Python 3.5.1, TensorFlow 1.2.1.

Essayez de mettre en place un pendule inversé (encore!)

La procédure d'installation sera décrite plus loin, et nous l'essayerons d'abord. L'exemple est run_atari.py depuis ici.

python run_atari.py

J'ai commencé à exécuter quelque chose, mais il semble que cela prendra du temps dans l'environnement atari avec mon MacBook Pro, donc c'est quelque chose de léger comme d'habitude Pendule inversé Allons. Utilisez Pendulmn-v0 de la salle de sport OpenAI. On vous dira peut-être à quel point vous aimez le balancement inversé du pendule, mais c'est facile mais c'est juste dans le sens de l'accomplissement. .. ..

C'est bien, mais du point de vue de l'utilisateur, il n'y a pas de code qui soit le plus agréable, comme la sauvegarde des résultats d'apprentissage et l'expérimentation avec des agents formés. Eh bien écrivons. .. .. Étant donné que la gestion des coefficients est gênante, je l'ai fait avec une méthode approximative d'enregistrement et de restauration de toute la session TensorFlow. Le code est donné ici [https://github.com/ashitani/PPO_pendulmn).

python run_pendulmn.py train
python run_pendulmn.py replay

Apprenez et jouez avec le modèle formé respectivement.

Le processus d'apprentissage est écrit sur monitor.json, donc traçons la transition de la récompense. L'axe horizontal est le nombre d'itérations et l'axe vertical est la récompense.

python plot_log.py

Crache png avec.

log_linear.png

Humutty. Comme d'habitude, le comportement après avoir atteint le record le plus élevé n'est pas stable. Eh bien, l'apprentissage de renforcement appliqué aux systèmes instables est à ce point, mais ce serait bien de pouvoir laisser des agents avec des classements de récompense plus élevés.

Faisons quelque chose avec des hyper paramètres pour voir si nous pouvons l'améliorer encore un peu. Il y a un planning dans l'argument de learn (), et cette fois j'ai essayé d'atténuer linéairement le taux d'apprentissage avec schedule = "linear", mais s'il est linéaire, cela n'a pas pour effet de se calmer pendant un certain temps. Par conséquent, le taux d'atténuation personnalisé est défini comme suit. J'attendrai un moment après qu'il soit devenu extrêmement petit. Cette zone se fait dans un fichier appelé pposgd_simple.py, je l'ai donc modifié.

cur_lrmult =  max(1.0 - float(timesteps_so_far) / (max_timesteps/2), 0)
if cur_lrmult<1e-5:
    cur_lrmult =  1e-5

Et maintenant?

log_custom.png

Oui. C'est un peu mieux. Je me demande si je dois le faire plus longtemps. De plus, Pendulmn-v0 semble avoir un état initial aléatoire, et je pense que cela l'affecte également.

Rejouons les résultats d'apprentissage.

out.gif

C'est un sentiment agréable. Contrairement à mon [entrée] précédente (http://qiita.com/ashitani/items/bb393e24c20e83e54577), cet agent génère parfois un montant continu, surtout après la mise au repos.

Impressions

Je ne peux que vous remercier pour la publication du code car j'ai pu exécuter le papier PPO sans lire une seule ligne. Cependant, je pense qu'il serait préférable de le rendre un peu plus accessible s'il doit être élevé à l'algorithme standard. Eh bien, je me demande à partir de maintenant.

Je pense que le même gymnase OpenAI est un excellent travail en termes d'unification de l'interface du côté de l'environnement. N'est-il pas possible pour le côté agent de créer une interface unifiée de la même manière? En un coup d'œil, même le DQN et le PPO des lignes de base ne sont pas unifiés (enfin, je comprends que la généralisation est difficile).

Je n'ai pas effectué de benchmark avec DQN, mais je pense que cela fera une différence si je ne le fais pas avec un problème plus difficile.

Installation

À propos, voici la procédure d'installation à partir d'aujourd'hui (22 juillet 2017). Finalement, un pip passera. ..

Tout d'abord, vous avez besoin de TensorFlow 1.0.0 ou supérieur. Pour installer TensorFlow, consultez la Documentation.

pip install --upgrade https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-1.2.1-py3-none-any.whl

Ensuite, installez la dernière version de baseline de git. Il semble que vous puissiez utiliser pip, mais à partir d'aujourd'hui, il semble y avoir une incohérence.

git clone https://github.com/openai/baselines.git

Ajoutez \ _ \ _ init \ _ \ _. Py avec le contenu suivant à baselines / baselines / pposgd /.

from baselines.pposgd import *

C'est une installation.

cd baselines
python setup.py install

Installez toute autre personne à charge.

brew install openmpi
pip install mpi4py
pip install atari_py

Au moins, l'exemple run_atari.py a réussi.

Recommended Posts

Essayez l'algorithme d'apprentissage amélioré standard d'OpenAI PPO
Apprentissage par renforcement 5 Essayez de programmer CartPole?
Renforcer l'apprentissage 13 Essayez Mountain_car avec ChainerRL.
Renforcer l'apprentissage 8 Essayez d'utiliser l'interface utilisateur de Chainer
Renforcer l'apprentissage 11 Essayez OpenAI acrobot avec ChainerRL.
[Introduction] Renforcer l'apprentissage
Apprentissage par renforcement 10 Essayez d'utiliser un réseau neuronal formé.
Algorithme d'apprentissage du dictionnaire
Apprentissage par renforcement futur_2
Apprentissage par renforcement futur_1
Essayez le détartreur standard
[Introduction au renforcement de l'apprentissage] part.1-Algorithme Epsilon-Greedy dans Bandit Game
J'ai étudié l'algorithme d'apprentissage de renforcement du trading d'algorithmes
Apprentissage amélioré 1 installation de Python
Renforcer l'apprentissage 3 Installation d'OpenAI
Renforcer l'apprentissage de la troisième ligne
Apprentissage amélioré Python + Unity (apprentissage)
Renforcer l'apprentissage 1 édition introductive
[Apprentissage de renforcement d'introduction] Renforcement de l'apprentissage pour bouger pour le moment
Essayez l'apprentissage Q dans une bataille de style Drakue [Introduction au renforcement de l'apprentissage]