Reinforcement Learning Ich bin mir nicht sicher, aber es ist für ungeduldige Menschen, die sich aufgrund der Theorie vorerst bewegen und sehen wollen. Mit anderen Worten, er ist ein Mensch wie ich. OpenAI Gym bietet eine Umgebung für intensives Lernen, daher werde ich sie verwenden. OpenAI Gym ist nur eine Umgebung, und Sie brauchen etwas anderes, um tatsächlich zu lernen. Als ich es nachgeschlagen habe, gab es eine Person, die keras-rl schrieb, um das Lernen mit Keras zu stärken, und es schien einfach zu sein, dies zu versuchen, also habe ich es verwendet. Ich werde. Danke an meine Vorfahren.
Zuerst habe ich es auf einem Server ohne Display gemacht, aber es war nervig, also habe ich es in einer lokalen Umgebung gemacht. Übrigens sollten Sie mit Xvfb auch auf einem Server ohne Anzeige Ihr Bestes geben. Es scheint derjenige zu sein, der die Anzeige im virtuellen Speicher reproduziert.
pip install gym
pip install keras-rl
Beide Installationen können mit `` `pip``` durchgeführt werden. Es wird angenommen, dass Keras enthalten sind.
CartPole
CartPole ist ein Spiel, bei dem sich eine Stange auf dem Wagen befindet und der Wagen bewegt wird, um ihn auszugleichen, um ihn nicht umzuwerfen (?) ist.
Dies.
Der Wagen kann sich nur nach links und rechts bewegen. Daher gibt es zwei Werte für die Aufnahme eines Wagens: rechts und links. Wählen Sie je nach aktueller Umgebung rechts oder links, um eine gute Balance zu erzielen. Dies kann wie folgt bestätigt werden.
import gym
env = gym.make('CartPole-v0')
env.action_space
# Discrete(2)
env.action_space.sample()
# 0
Informationen zur Umgebung, in der der Wagen erhältlich ist,
env.observation_space
# Box(4,)
env.observation_space.sample()
# array([ 4.68609638e-01, 1.46450285e+38, 8.60908446e-02, 3.05459097e+37])
Diese vier Werte. Die Position des Wagens, die Geschwindigkeit des Wagens, der Winkel der Stange und die Geschwindigkeit, mit der sich die Stange dreht. (Kart und Paul sind zu früh, oder?)
sample()
Die Methode ist eine Methode zur angemessenen Erfassung des Verhaltens und der Umgebung.
DQN example Es gibt ein Beispiel, das dies mit DQN in keras-rl tut. Verwenden Sie es also so, wie es ist. Ich wollte ein Diagramm, um diesen Artikel zu schreiben, also habe ich nur zwei Zeilen hinzugefügt. (Wo es heißt Hinzufügen)
Über DQN Gewöhnen Sie sich an Keras, während Sie [Python] Enhanced Learning (DQN) implementieren Stärkung des Lernens von null auf tief Die Gegend wird hilfreich sein.
Es scheint, dass die Aktionswertfunktion ein tiefes neuronales Netz ist. In diesem Fall ist es der Teil der Funktion, der ausdrückt, dass das Bewegen des Wagens nach rechts wertvoller ist, wenn die Stange nach rechts geneigt wird.
import numpy as np
import gym
from gym import wrappers #hinzufügen
from keras.models import Sequential
from keras.layers import Dense, Activation, Flatten
from keras.optimizers import Adam
from rl.agents.dqn import DQNAgent
from rl.policy import BoltzmannQPolicy
from rl.memory import SequentialMemory
ENV_NAME = 'CartPole-v0'
# Get the environment and extract the number of actions.
env = gym.make(ENV_NAME)
env = wrappers.Monitor(env, './CartPole') #hinzufügen
np.random.seed(123)
env.seed(123)
nb_actions = env.action_space.n
# Next, we build a very simple model.
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'))
print(model.summary())
# Finally, we configure and compile our agent. You can use every built-in Keras optimizer and
# even the metrics!
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'])
# Okay, now it's time to learn something! We visualize the training here for show, but this
# slows down training quite a lot. You can always safely abort the training prematurely using
# Ctrl + C.
dqn.fit(env, nb_steps=50000, visualize=True, verbose=2)
# After training is done, we save the final weights.
dqn.save_weights('dqn_{}_weights.h5f'.format(ENV_NAME), overwrite=True)
# Finally, evaluate our algorithm for 5 episodes.
dqn.test(env, nb_episodes=5, visualize=True)
In diesem Beispiel wird die Richtlinie "BoltzmannQPolicy ()" verwendet, dies ist jedoch eine Aktion gemäß Future Strengthing Learning. Es scheint, dass dies durch die Softmax-Funktion des Werts der Aktionswertfunktion bei der Auswahl bestimmt wird. Je mehr Action Sie haben, desto besser wählen Sie.
Eine Episode ist eine Lerneinheit des verstärkenden Lernens, und eine Episode ist so lange, bis der Sieg oder die Niederlage des Spiels klar wird. Und da dies das Ergebnis der ersten Folge ist, habe ich noch nichts gelernt und es ist völlig zufällig.
Der Wagen bewegt sich nach links, obwohl Paul im Begriff ist, nach rechts zu fallen.
Der Grund, warum es ein bisschen verrückt ist, ist, dass das Spiel endet, wenn der CartPole um 15 Grad oder mehr geneigt ist, sodass kein weiteres Zeichnen erfolgt. Es endet auch dann, wenn es sich zu stark nach links oder rechts bewegt.
Oh ... es hält ...
Recommended Posts