[PYTHON] Probieren Sie den erweiterten Standard-Lernalgorithmus PPO von OpenAI aus

OpenAI hat [angekündigt], einen Algorithmus namens PPO (Proximal Policy Optimization) als Standardalgorithmus der Organisation zu verwenden (https://blog.openai.com/openai-baselines-ppo/). Der Code wurde ebenfalls veröffentlicht, also werde ich es versuchen. Es scheint, dass es im erweiterten Lernpaket baselines enthalten ist.

Ich habe es mit OSX 10.11.6, Python 3.5.1, TensorFlow 1.2.1 versucht.

Versuchen Sie (wieder!) Ein umgekehrtes Pendel aufzustellen.

Das Installationsverfahren wird später beschrieben und wir werden es zuerst versuchen. Das Beispiel ist run_atari.py von hier.

python run_atari.py

Ich habe angefangen, etwas auszuführen, aber es scheint, dass es in der Atari-Umgebung mit meinem MacBook Pro einige Zeit dauern wird, daher ist es etwas Leichtes wie üblich Invertiertes Pendel Lasst uns. Verwenden Sie Pendulmn-v0 von OpenAI Gym. Man könnte Ihnen sagen, wie sehr Sie den umgekehrten Pendelschwung mögen, aber es ist einfach, aber im Sinne der Leistung genau richtig. .. ..

Das ist in Ordnung, aber es gibt keinen Code, der aus Anwendersicht am meisten Spaß macht, z. B. das Speichern der Lernergebnisse und das Experimentieren mit geschulten Agenten. Nun, lass uns schreiben. .. .. Da die Handhabung der Koeffizienten problematisch ist, habe ich eine grobe Methode zum Speichern und Wiederherstellen der gesamten TensorFlow-Sitzung angewendet. Der Code wird hier angegeben [https://github.com/ashitani/PPO_pendulmn].

python run_pendulmn.py train
python run_pendulmn.py replay

Lerne und spiele mit dem trainierten Modell.

Der Lernprozess ist in monitor.json geschrieben. Zeichnen wir also den Übergang der Belohnung. Die horizontale Achse ist die Anzahl der Iterationen und die vertikale Achse ist die Belohnung.

python plot_log.py

Spuckt png mit aus.

log_linear.png

Humutty. Wie üblich ist das Verhalten nach Erreichen des höchsten Rekords nicht stabil. Nun, das stärkende Lernen, das auf instabile Systeme angewendet wird, ist bis zu diesem Punkt, aber es wäre schön, Agenten mit höheren Belohnungsrankings hinterlassen zu können.

Lassen Sie uns etwas mit Hyperparametern machen, um zu sehen, ob wir es noch ein bisschen besser machen können. Das Argument von learn () enthält einen Zeitplan, und dieses Mal habe ich versucht, die Lernrate mit Zeitplan = "linear" linear zu dämpfen. Wenn es jedoch linear ist, hat es für eine Weile keine Beruhigung. Daher wird die benutzerdefinierte Dämpfungsrate wie folgt eingestellt. Ich werde eine Weile warten, bis es extrem klein wird. Dieser Bereich befindet sich in einer Datei namens pposgd_simple.py, daher habe ich ihn geändert.

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

Wie wäre es jetzt?

log_custom.png

Ja. Es ist ein bisschen besser. Ich frage mich, ob ich es länger machen muss. Außerdem scheint Pendulmn-v0 einen zufälligen Anfangszustand zu haben, und ich denke, das wirkt sich auch darauf aus.

Lassen Sie uns die Lernergebnisse wiederholen.

out.gif

Es ist ein gutes Gefühl. Im Gegensatz zu meinem vorherigen Eintrag gibt dieser Agent manchmal eine kontinuierliche Menge aus, insbesondere nach dem Stillstand.

Impressionen

Ich kann mich nur für die Codefreigabe bedanken, da ich das PPO-Papier ausführen konnte, ohne eine einzige Zeile zu lesen. Ich denke jedoch, es wäre besser, es ein wenig zugänglicher zu machen, wenn es auf den Standardalgorithmus angehoben werden soll. Nun, ich frage mich von jetzt an.

Ich denke, dasselbe OpenAI-Fitnessstudio ist eine großartige Aufgabe, um die Benutzeroberfläche auf der Umweltseite zu vereinheitlichen. Ist es nicht möglich, dass die Agentenseite auf die gleiche Weise eine einheitliche Schnittstelle erstellt? Auf einen Blick sind sogar DQN und PPO von Baselines nicht einheitlich (ich verstehe, dass die Verallgemeinerung schwierig ist).

Ich habe noch keinen Benchmark mit DQN durchgeführt, aber ich denke, es wird einen Unterschied machen, wenn ich es nicht mit einem schwierigeren Problem mache.

Installation

Das Folgende ist übrigens das Installationsverfahren ab heute (22. Juli 2017). Schließlich wird ein Pip passieren. ..

Zunächst benötigen Sie TensorFlow 1.0.0 oder höher. Informationen zur Installation von TensorFlow finden Sie unter Dokumentation.

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

Installieren Sie dann die neueste Version von Baseline von Git. Es scheint, dass Sie mit Pip gehen können, aber ab heute scheint es eine Inkonsistenz zu geben.

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

Fügen Sie \ _ \ _ init \ _ \ _. Py mit dem folgenden Inhalt zu baselines / baselines / pposgd / hinzu.

from baselines.pposgd import *

Es ist eine Installation.

cd baselines
python setup.py install

Installieren Sie alle anderen Abhängigen.

brew install openmpi
pip install mpi4py
pip install atari_py

Zumindest das Beispiel run_atari.py ist bestanden.

Recommended Posts

Probieren Sie den erweiterten Standard-Lernalgorithmus PPO von OpenAI aus
Verstärkungslernen 5 Versuchen Sie, CartPole zu programmieren?
Lernen stärken 13 Probieren Sie Mountain_car mit ChainerRL aus.
Stärkung des Lernens 8 Versuchen Sie, die Chainer-Benutzeroberfläche zu verwenden
Stärkung des Lernens 11 Probieren Sie OpenAI Acrobot mit ChainerRL aus.
[Einführung] Stärkung des Lernens
Verstärkungslernen 10 Versuchen Sie es mit einem trainierten neuronalen Netz.
Wörterbuch-Lernalgorithmus
Zukünftiges Verstärkungslernen_2
Zukünftiges Verstärkungslernen_1
Versuchen Sie es mit Standard Scaler
[Einführung in die Stärkung des Lernens] Teil 1 - Epsilon-Greedy-Algorithmus im Banditenspiel
Ich untersuchte den stärkenden Lernalgorithmus des Algorithmushandels
Erweitertes Lernen 1 Python-Installation
Stärkung des Lernens 3 OpenAI-Installation
Stärkung des Lernens der dritten Zeile
Python + Unity Enhanced Learning (Lernen)
Stärkung des Lernens 1 Einführungsausgabe
[Einführung in die Stärkung des Lernens] Stärkung des Lernens, um sich vorerst zu bewegen
Versuchen Sie Q-Lernen in einem Kampf im Drakue-Stil [Einführung in die Stärkung des Lernens]