Apprentissage par renforcement Je ne suis pas sûr, mais c'est pour les gens impatients qui veulent bouger et voir pour le moment à cause de la théorie. En d'autres termes, c'est un humain comme moi. OpenAI Gym fournit un environnement d'apprentissage intensif, je vais donc l'utiliser. OpenAI Gym n'est qu'un environnement, et vous avez besoin de quelque chose d'autre pour réellement apprendre. Quand j'ai cherché, il y avait une personne qui a écrit keras-rl pour renforcer l'apprentissage avec Keras, et il semblait facile d'essayer de l'utiliser, alors je l'ai utilisé. Je vais. Merci à mes ancêtres.
Au début, je l'ai fait sur un serveur sans écran, mais c'était ennuyeux, alors je l'ai fait dans un environnement local. Au fait, il semble que vous devriez faire de votre mieux avec Xvfb même sur un serveur sans écran. Il semble que ce soit celui qui reproduit l'affichage sur la mémoire virtuelle.
pip install gym
pip install keras-rl
Les deux installations peuvent être effectuées avec `` pip '' On suppose que les keras sont inclus.
CartPole
CartPole est un jeu dans lequel une perche est sur le chariot et le chariot est déplacé pour l'équilibrer afin de ne pas le faire tomber (?) est.
Cette.
Le chariot ne peut se déplacer qu'à gauche et à droite. Par conséquent, il existe deux valeurs pour prendre un chariot, à droite et à gauche. En fonction de l'environnement actuel, choisissez droite ou gauche pour obtenir un bon équilibre. Cela peut être confirmé comme suit.
import gym
env = gym.make('CartPole-v0')
env.action_space
# Discrete(2)
env.action_space.sample()
# 0
Aussi, pour des informations sur l'environnement dans lequel le chariot peut être obtenu,
env.observation_space
# Box(4,)
env.observation_space.sample()
# array([ 4.68609638e-01, 1.46450285e+38, 8.60908446e-02, 3.05459097e+37])
Ces quatre valeurs. À leur tour, l'emplacement du chariot, la vitesse du chariot, l'angle du poteau et la vitesse à laquelle le poteau tourne. (Kart et Paul sont trop tôt, non?)
sample()
La méthode est une méthode d'échantillonnage approprié du comportement et de l'environnement.
DQN example Il existe un exemple qui fait cela avec DQN dans keras-rl, alors utilisez-le tel quel. Je voulais un diagramme pour écrire cet article, donc je n'ai ajouté que deux lignes. (Où il est dit Ajouter)
À propos de DQN Habituez-vous à Keras lors de l'implémentation de [Python] Enhanced Learning (DQN) Renforcer l'apprentissage de zéro à profond La région sera utile.
Il semble que la fonction de valeur d'action soit un réseau neuronal profond. Dans ce cas, c'est la partie de la fonction qui exprime que lorsque la perche est inclinée vers la droite, l'action de déplacer le chariot vers la droite est plus précieuse.
import numpy as np
import gym
from gym import wrappers #ajouter à
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') #ajouter à
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)
Dans cet exemple, la politique `` BoltzmannQPolicy () '' est utilisée, mais il s'agit d'une action selon Future Strengthening Learning. Il semble que cela soit décidé par la fonction softmax de la valeur de la fonction de valeur d'action lors de la sélection. Plus vous avez d'action, mieux vous choisissez.
Un épisode est une unité d'apprentissage de l'apprentissage par renforcement, et un épisode jusqu'à ce que la victoire ou la défaite du jeu devienne claire. Et comme c'est le résultat du premier épisode, je n'ai encore rien appris et c'est complètement aléatoire.
Le chariot se déplace vers la gauche même si Paul est sur le point de tomber à droite.
La raison pour laquelle c'est un peu fou est que le jeu se termine lorsque le CartPole est incliné de 15 degrés ou plus, donc aucun dessin supplémentaire n'est fait. De plus, il se terminera même s'il se déplace trop vers la gauche ou la droite.
Oh ... ça tient le coup ...
Recommended Posts