[PYTHON] [Apprentissage de renforcement d'introduction] Renforcement de l'apprentissage pour bouger pour le moment

introduction

Je n'avais qu'une image de renforcement de l'apprentissage, alors je l'ai essayé pour le moment. Cette fois, nous exécutons l'algorithme d'apprentissage amélioré sur un outil appelé OpenAI Gym.

J'essaie juste de le déplacer pour le moment, donc je n'ai pas expliqué en détail l'algorithme d'apprentissage par renforcement.

Public cible

――Je veux réellement déplacer l'apprentissage par renforcement

Qu'est-ce que l'apprentissage par renforcement?

L'apprentissage intensifié est un mécanisme qui apprend des actions pour maximiser les récompenses par essais et erreurs dans un certain environnement **. Avec l'avènement de l'apprentissage profond, vous pouvez faire plus, et le célèbre AlphaGo utilise également l'apprentissage amélioré.

Qu'est-ce que OpenAI Gym?

OpenAI Gym est un outil pour développer / comparer des algorithmes d'apprentissage améliorés. Vous pouvez essayer l'algorithme d'apprentissage amélioré dans divers environnements tels que les bâtons, l'alpinisme en voiture et les envahisseurs de l'espace.

Référence: Liste des environnements pouvant être utilisés avec Gym

Essayez de bouger

Pour le moment, déplaçons la salle de gym. Ici, il est utilisé dans un environnement de support de bâton.

L'action (de déplacer l'endroit où se trouve le bâton vers la gauche ou la droite) est décidée au hasard.

import gym

#Génération d'environnement
env = gym.make('CartPole-v0')

for i_episode in range(20):
    #Initialisez l'environnement et obtenez l'observation
    observation = env.reset()
    for t in range(100):
        env.render()
        print(observation)
        #Décision d'action(Aléatoire)
        action = env.action_space.sample()
        #Obtenez des données après l'action
        observation, reward, done, info = env.step(action)
        if done:
            print("Episode finished after {} timesteps".format(t+1))
            break
env.close()

random.gif

Puisque l'action est décidée au hasard, elle s'effondrera immédiatement.

Bougez avec l'apprentissage par renforcement

Utilisez ensuite l'algorithme d'apprentissage amélioré pour sélectionner l'action. Cette fois, nous nous entraînerons à l'aide d'un algorithme appelé DQN (Deep Q-Learning).

Bibliothèque à utiliser

Utilisez keras-rl pour la bibliothèque d'apprentissage améliorée. Cependant, veuillez noter que si vous utilisez ** Keras intégré à partir de tensorflow 2, vous devez utiliser keras-rl2 **.

La version de la bibliothèque utilisée cette fois est la suivante.

keras-rl2==1.0.4
tensorflow==2.3.0

Apprenez avec DQN

Apprenons en fait à utiliser DQN.

Un épisode correspond à la fin du stand de bâton, et une action pour déplacer l'endroit où se tient le bâton vers la gauche ou la droite correspond à un pas. Ici, nous formerons jusqu'à 50 000 pas.

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

#Génération d'environnement
env = gym.make('CartPole-v0')
nb_actions = env.action_space.n

#Définition du modèle
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'))

#Paramètres de l'agent
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'])

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

#Tester le modèle
dqn.test(env, nb_episodes=5, visualize=True)

Après avoir appris 64 épisodes ...

dqn_64.gif

Après avoir appris 216 épisodes ...

dqn_216.gif

Test avec un modèle entraîné

Suite à l'apprentissage de 50 000 pas, il est devenu possible de tenir un bâton de manière stable comme suit.

dqn_test.gif

compétition kaggle

Même chez kaggle, qui est une plate-forme pour les compétitions d'apprentissage automatique, il y avait une compétition dans laquelle des modèles formés à l'apprentissage intensif se faisaient concurrence.

Connect X | Kaggle image.png

Cette compétition est dans un format appelé Connect Four, dans lequel les agents formés se battent les uns contre les autres pour déterminer le taux et le rang. C'est assez intéressant de laisser l'agent que vous avez créé se battre, alors essayez-le.

Il y a aussi une conférence en kaggle où vous pouvez apprendre l'IA de jeu et un apprentissage amélioré grâce au concours Connect X, donc je pense que c'est une bonne idée de l'essayer à partir d'ici. Learn Intro to Game AI and Reinforcement Learning Tutorials | Kaggle

Sommaire

À l'avenir, j'aimerais bien comprendre l'algorithme à l'intérieur.

référence

Recommended Posts

[Apprentissage de renforcement d'introduction] Renforcement de l'apprentissage pour bouger pour le moment
Simulation de dynamique moléculaire à essayer pour le moment
Essayez d'utiliser LINE Notify pour le moment
Essayez de publier sur Qiita pour la première fois
[Python] [Apprentissage automatique] Les débutants sans aucune connaissance essaient l'apprentissage automatique pour le moment
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Mémo de flux pour déplacer LOCUST pour le moment
À côté d'Excel, le notebook Jupyter pour le moment
Essayez d'ajouter un module externe au poivre. Pour le moment, en demandes.
Essayez l'apprentissage Q dans une bataille de style Drakue [Introduction au renforcement de l'apprentissage]
Pour le moment, essayez d'utiliser l'API de dialogue de discussion docomo
Je veux créer un Dockerfile pour le moment.
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance des caractères japonais Chapitre 1 [Construction de l'environnement]
Le programmeur Java a essayé de toucher le langage Go (pour le moment)
Avant l'introduction à l'apprentissage automatique. ~ Technologie requise pour l'apprentissage automatique autre que l'apprentissage automatique ~
Pour le moment, je veux convertir n'importe quel fichier avec ffmpeg !!
Essayez d'utiliser FireBase Cloud Firestore avec Python pour le moment
Une introduction à OpenCV pour l'apprentissage automatique
Essayons Linux pour la première fois
Une introduction à Python pour l'apprentissage automatique
[Renforcer l'apprentissage] Rechercher le meilleur itinéraire
[Introduction] Renforcer l'apprentissage
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 3 [Reconnaissance de caractères à l'aide d'un modèle]
Prenons la version gratuite "Introduction à Python pour l'apprentissage automatique" en ligne jusqu'au 27/04
Comment utiliser MkDocs pour la première fois
Faire un histogramme pour le moment (matplotlib)
Utilisez Logger avec Python pour le moment
Exécutez yolov4 "pour le moment" dans Windows
J'ai joué avec Floydhub pour le moment
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 2 [Génération de modèles par apprentissage automatique]
virtualenv Pour le moment, c'est tout!
[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
GTUG Girls + PyLadiesTokyo Meetup Je suis allé au premier machine learning
Renforcer l'apprentissage de la troisième ligne
Introduction à l'apprentissage automatique
Exécutez avec CentOS7 + Apache2.4 + Python3.6 pour le moment
Essayez d'installer Arch Linux pour le moment.
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 4 [Amélioration de la précision de la reconnaissance en développant les données]
Premier Kaggle (kaggle ①)
[Mémorandum d'apprentissage] Introduction à vim
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Une introduction à l'apprentissage automatique
J'ai essayé d'exécuter PIFuHD sur Windows pour le moment
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
[Introduction à matplotlib] Lire l'heure de fin à partir des données COVID-19 ♬
Kaguru pour la première fois
Je souhaite utiliser l'environnement de bureau d'Ubuntu sur Android pour le moment (version Termux)
Je souhaite utiliser l'environnement de bureau d'Ubuntu sur Android pour le moment (version UserLAnd)
Introduction au Deep Learning ~ Règles d'apprentissage ~
Super introduction à l'apprentissage automatique
Introduction à Python pour, pendant
Introduction au Deep Learning ~ Rétropropagation ~
Si vous apprenez Linux pour la première fois, faites-le!
J'ai créé une fonction pour vérifier si le webhook est reçu dans Lambda pour le moment
Différences que les ingénieurs C # ont ressenties lors de l'apprentissage de Python pour la première fois
Comprendre la classe python Struggle (1) Déplaçons-la pour le moment
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 10 Introduction à Cupy
[Introduction à Python] Comment utiliser l'opérateur in dans l'instruction for?
Challenge classification des images par TensorFlow2 + Keras 1-Move pour le moment-