[PYTHON] Apprentissage par renforcement dans les plus brefs délais avec Keras avec OpenAI Gym

introduction

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.

Préparer l'environnement

Cet environnement

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.

Installation

pip install gym
pip install keras-rl

Les deux installations peuvent être effectuées avec `` pip '' On suppose que les keras sont inclus.

CartPole

Qu'est-ce que 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.

Screen Shot 2017-07-23 at 1.44.51.png

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.

résultat

1er épisode

openaigym.video.0.43046.video000001.gif

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.

Épisode 216

openaigym.video.0.43046.video000216.gif

Oh ... ça tient le coup ...

À la fin

Recommended Posts

Apprentissage par renforcement dans les plus brefs délais avec Keras avec OpenAI Gym
Explorez le labyrinthe avec l'apprentissage augmenté
Renforcer l'apprentissage 11 Essayez OpenAI acrobot avec ChainerRL.
Résolvez OpenAI Gym Copy-v0 avec Sarsa
Ouvrez AI Gym pour apprendre avec le poteau de chariot contrôlé par PD
Seq2Seq (1) avec chainer
Créez un environnement Open AI Gym avec Bash sur Windows 10
Utiliser tensorboard avec Chainer
Apprentissage par renforcement dans les plus brefs délais avec Keras avec OpenAI Gym
[Mac] J'ai essayé de renforcer l'apprentissage avec Open AI Baselines
9 étapes pour devenir un expert en apprentissage automatique dans les plus brefs délais [Entièrement gratuit]
Renforcer l'apprentissage 3 Installation d'OpenAI
Modifier le fuseau horaire dans Oracle Database Docker
Bilan du premier défi du machine learning avec Keras
Essayez de faire une stratégie de blackjack en renforçant l'apprentissage (② Enregistrer l'environnement dans le gymnase)
[TensorFlow 2 / Keras] Comment exécuter l'apprentissage avec CTC Loss dans Keras
Renforcer l'apprentissage 28 collaboratif + OpenAI + chainerRL
Apprentissage amélioré à partir de Python
[Comprendre au plus court] Principes de base de Python pour l'analyse des données
Essayez de faire une stratégie de blackjack en renforçant l'apprentissage (③ Renforcer l'apprentissage dans votre propre environnement OpenAI Gym))
[Apprentissage de renforcement d'introduction] Renforcement de l'apprentissage pour bouger pour le moment
J'ai essayé de décrire le trafic en temps réel avec WebSocket
Créez un environnement Selenium sur Amazon Linux 2 dans les plus brefs délais
[Renforcer l'apprentissage] Comment dessiner OpenAI Gym sur Google Corab (version 2020.6)
Renforcer l'apprentissage 13 Essayez Mountain_car avec ChainerRL.
Résolvez OpenAI Gym Copy-v0 avec Sarsa
Essayez Cython dans les plus brefs délais
Validez le modèle d'entraînement avec Pylearn2
Défiez la classification des images avec TensorFlow2 + Keras CNN 1 ~ Bougez pour le moment ~
Comment obtenir la différence de date et d'heure en secondes avec Python
Obtenez et convertissez l'heure actuelle dans le fuseau horaire local du système avec python
J'ai fait GAN avec Keras, donc j'ai fait une vidéo du processus d'apprentissage.
[Renforcer l'apprentissage] DQN avec votre propre bibliothèque
Comportement lors du retour dans le bloc with
Afficher Python 3 dans le navigateur avec MAMP
MongoDB avec Python pour la première fois
[Python] Essayez facilement l'apprentissage amélioré (DQN) avec Keras-RL
[Renforcer l'apprentissage] Rechercher le meilleur itinéraire
Visualisez les informations du capteur d'accélération de la carte micro-ordinateur en temps réel avec mbed + Python
Essayez Fine Tuning (apprentissage par transfert), qui est le courant dominant avec des images avec keras, avec apprentissage des données
Comprendre les images de diverses opérations matricielles utilisées dans Keras (Tensorflow) avec des exemples
Ce que j'ai fait quand je suis resté coincé dans le délai avec lambda python
Transformez plusieurs listes avec l'instruction for en même temps en Python
Présentation du livre "Créer une IA rentable avec Python" qui vous permet d'apprendre l'apprentissage automatique dans le cours le plus court