[PYTHON] [Einführung in die Stärkung des Lernens] Stärkung des Lernens, um sich vorerst zu bewegen

Einführung

Ich hatte nur ein Bild davon, das Lernen zu stärken, also habe ich es vorerst tatsächlich versucht. Dieses Mal führen wir den erweiterten Lernalgorithmus auf einem Tool namens OpenAI Gym aus.

Ich versuche nur, es vorerst zu verschieben, daher habe ich den Algorithmus zum Lernen der Verstärkung nicht im Detail erklärt.

Zielgruppe

――Ich möchte das Lernen der Verstärkung tatsächlich verschieben

Was ist Bestärkungslernen?

Intensiviertes Lernen ist ein Mechanismus, der Aktionen lernt, um die Belohnungen durch Ausprobieren in einer bestimmten Umgebung zu maximieren **. Mit dem Aufkommen des tiefen Lernens kann mehr getan werden, und das berühmte AlphaGo verwendet auch verbessertes Lernen.

Was ist OpenAI Gym?

OpenAI Gym ist ein Tool zum Entwickeln / Vergleichen erweiterter Lernalgorithmen. Sie können den erweiterten Lernalgorithmus in verschiedenen Umgebungen wie Stockständen, Bergsteigen mit dem Auto und Space Invaders ausprobieren.

Referenz: Liste der Umgebungen, die mit dem Fitnessstudio verwendet werden können

Versuche dich zu bewegen

Lassen Sie uns vorerst das Fitnessstudio bewegen. Hier wird es in einer Stockstandumgebung betrieben.

Die Aktion (ob die Stelle, an der der Stock steht, nach links oder rechts verschoben werden soll) wird nach dem Zufallsprinzip festgelegt.

import gym

#Umweltgenerierung
env = gym.make('CartPole-v0')

for i_episode in range(20):
    #Initialisieren Sie die Umgebung und erhalten Sie Obsersavation
    observation = env.reset()
    for t in range(100):
        env.render()
        print(observation)
        #Handlungsentscheidung(zufällig)
        action = env.action_space.sample()
        #Daten nach Aktion abrufen
        observation, reward, done, info = env.step(action)
        if done:
            print("Episode finished after {} timesteps".format(t+1))
            break
env.close()

random.gif

Da die Aktion zufällig entschieden wird, wird sie sofort zusammenbrechen.

Bewegen Sie sich mit verstärkendem Lernen

Verwenden Sie dann den erweiterten Lernalgorithmus, um die Aktion auszuwählen. Dieses Mal werden wir mit einem Algorithmus namens DQN (Deep Q-Learning) trainieren.

Bibliothek zu verwenden

Verwenden Sie keras-rl für die erweiterte Lernbibliothek. Beachten Sie jedoch, dass Sie Keras-rl2 ** verwenden müssen, wenn Sie Keras verwenden, das aus ** tensorflow 2 integriert ist.

Die diesmal verwendete Version der Bibliothek lautet wie folgt.

keras-rl2==1.0.4
tensorflow==2.3.0

Lernen Sie mit DQN

Lassen Sie uns tatsächlich mit DQN lernen.

Eine Episode entspricht dem Ende des Stockständers, und eine Aktion zum Verschieben der Stelle, an der der Stock nach links oder rechts steht, entspricht einem Schritt. Hier werden wir bis zu 50.000 Schritte trainieren.

import gym
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, Flatten
from tensorflow.keras.optimizers import Adam
from rl.agents.dqn import DQNAgent
from rl.policy import BoltzmannQPolicy
from rl.memory import SequentialMemory

#Umweltgenerierung
env = gym.make('CartPole-v0')
nb_actions = env.action_space.n

#Modelldefinition
model = Sequential()
model.add(Flatten(input_shape=(1,) + env.observation_space.shape))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(nb_actions))
model.add(Activation('linear'))

#Agenteneinstellungen
memory = SequentialMemory(limit=50000, window_length=1)
policy = BoltzmannQPolicy()
dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10,
               target_model_update=1e-2, policy=policy)
dqn.compile(Adam(lr=1e-3), metrics=['mae'])

#Lernen
dqn.fit(env, nb_steps=50000, visualize=True, verbose=2)

#Testen Sie das Modell
dqn.test(env, nb_episodes=5, visualize=True)

Nach dem Lernen von 64 Folgen ...

dqn_64.gif

Nach dem Lernen von 216 Folgen ...

dqn_216.gif

Test mit trainiertem Modell

Durch das Erlernen von 50.000 Schritten wurde es möglich, einen Stock wie folgt stabil zu halten.

dqn_test.gif

Kaggle Wettbewerb

Selbst bei kaggle, einer Plattform für Wettbewerbe zum maschinellen Lernen, gab es einen Wettbewerb, bei dem in intensivem Lernen trainierte Modelle gegeneinander antreten.

Connect X | Kaggle image.png

Dieser Wettbewerb findet in einem Format namens Connect Four statt, in dem die ausgebildeten Agenten gegeneinander kämpfen, um die Rate und den Rang zu bestimmen. Es ist ziemlich interessant, den Agenten, den Sie gemacht haben, kämpfen zu lassen, also versuchen Sie es bitte.

Es gibt auch einen Vortrag in Kaggle, in dem Sie durch den Connect X-Wettbewerb Spiel-KI und verbessertes Lernen lernen können. Ich denke, es ist eine gute Idee, es von hier aus zu versuchen. Learn Intro to Game AI and Reinforcement Learning Tutorials | Kaggle

Zusammenfassung

In Zukunft möchte ich den Algorithmus im Inneren genau verstehen.

Referenz

Recommended Posts

[Einführung in die Stärkung des Lernens] Stärkung des Lernens, um sich vorerst zu bewegen
Molekulardynamiksimulation vorerst versuchen
Versuchen Sie es vorerst mit LINE Notify
Versuchen Sie zum ersten Mal, in Qiita zu posten
[Python] [Maschinelles Lernen] Anfänger ohne Wissen versuchen vorerst maschinelles Lernen
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
Flow Memo, um LOCUST vorerst zu verschieben
Neben Excel jupyter Notebook vorerst
Versuchen Sie, Pfeffer ein externes Modul hinzuzufügen. Vorerst in Anfragen.
Versuchen Sie Q-Lernen in einem Kampf im Drakue-Stil [Einführung in die Stärkung des Lernens]
Versuchen Sie vorerst, die Docomo-Chat-Dialog-API zu verwenden
Ich möchte vorerst eine Docker-Datei erstellen.
Einführung in Deep Learning zum ersten Mal (Chainer) Erkennung japanischer Zeichen Kapitel 1 [Umgebungskonstruktion]
Der Java-Programmierer versuchte (vorerst), die Sprache Go zu berühren.
Vor der Einführung in das maschinelle Lernen. ~ Techniken, die für anderes maschinelles Lernen als maschinelles Lernen erforderlich sind ~
Vorerst möchte ich jede Datei mit ffmpeg konvertieren !!
Versuchen Sie vorerst, FireBase Cloud Firestore mit Python zu verwenden
Eine Einführung in OpenCV für maschinelles Lernen
Versuchen wir zum ersten Mal Linux
Eine Einführung in Python für maschinelles Lernen
[Lernen stärken] Suche nach der besten Route
[Einführung] Stärkung des Lernens
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 3 [Zeichenerkennung anhand eines Modells]
Lassen Sie uns die kostenlose "Einführung in Python für maschinelles Lernen" bis zum 27. April online stellen
So verwenden Sie MkDocs zum ersten Mal
Machen Sie vorerst ein Histogramm (matplotlib)
Verwenden Sie vorerst Logger mit Python
Führen Sie yolov4 "vorerst" in Windows aus
Ich habe vorerst mit Floydhub gespielt
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 2 [Modellgenerierung durch maschinelles Lernen]
virtualenv Das ist vorerst alles!
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
GTUG Girls + PyLadiesTokyo Meetup Ich ging zum ersten maschinellen Lernen
Stärkung des Lernens der dritten Zeile
Einführung in das maschinelle Lernen
Führen Sie es vorerst mit CentOS7 + Apache2.4 + Python3.6 aus
Versuchen Sie vorerst, Arch Linux zu installieren.
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 4 [Verbesserung der Erkennungsgenauigkeit durch Erweiterung der Daten]
Erster Kaggle (Kaggle ①)
[Lernmemorandum] Einführung in vim
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Eine Einführung in das maschinelle Lernen
Ich habe vorerst versucht, PIFuHD unter Windows auszuführen
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
[Einführung in matplotlib] Lesen Sie die Endzeit aus den COVID-19-Daten ♬
Kaguru zum ersten Mal
Ich möchte vorerst die Desktop-Umgebung von Ubuntu auf Android verwenden (Termux-Version)
Ich möchte vorerst Ubuntus Desktop-Umgebung auf Android verwenden (UserLAnd-Version)
Einführung in Deep Learning ~ Lernregeln ~
Super Einführung in das maschinelle Lernen
Einführung in Python For, While
Einführung in Deep Learning ~ Backpropagation ~
Wenn Sie zum ersten Mal Linux lernen, tun Sie dies!
Ich habe eine Funktion erstellt, um zu überprüfen, ob der Webhook vorerst in Lambda empfangen wird
Unterschiede, die C # -Ingenieure beim ersten Erlernen von Python verspürten
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 8 Einführung in Numpy
Grundlegendes zur Python-Klasse Kampf (1) Verschieben wir sie vorerst
Python-Lernnotiz für maschinelles Lernen von Chainer Kapitel 10 Einführung in Cupy
[Einführung in Python] Wie verwende ich den Operator in in der for-Anweisung?
Fordern Sie die Bildklassifizierung durch TensorFlow2 + Keras 1-Move vorerst heraus.