[PYTHON] Deep Strengthening Learning 3 Édition pratique: Briser des blocs

Aidemy 2020/11/22

introduction

Bonjour, c'est Yope! Je suis une école littéraire croustillante, mais j'étais intéressé par les possibilités de l'IA, alors je suis allé à l'école spécialisée en IA "Aidemy" pour étudier. Je voudrais partager les connaissances acquises ici avec vous, et je les ai résumées dans Qiita. Je suis très heureux que de nombreuses personnes aient lu l'article de synthèse précédent. Merci! Ceci est le troisième article de Deep Strengthening Learning. Ravi de vous rencontrer.

Quoi apprendre cette fois ・ ・

Renforcer la pratique d'apprentissage en brisant des blocs

Créer un environnement

-Créez un environnement avec la même méthode __ (gym.make ()) __ que dans le chapitre 2. En cas de rupture de bloc, spécifiez __ "Breakout Deterministic-v4" __ comme argument. -Le nombre d'actions peut être confirmé par __ "env.action_space.n" __.

·code スクリーンショット 2020-11-20 14.52.49.png

Construire un modèle

・ Ici, un réseau neuronal multicouche est construit. L'entrée est __ "4 images de l'écran de rupture de bloc" __. De plus, afin de réduire la quantité de calcul, l'image est redimensionnée à __ échelle de gris 84 × 84 pixels __. -Le modèle utilise Sequential (). Comme dans le chapitre 2, lissez l'entrée avec __Flatten () __, ajoutez la couche entièrement connectée avec Dense et la fonction d'activation avec Activation. -Depuis cette fois que nous entrons une image (bidimensionnelle), nous utiliserons __ "Convolution2D ()" __, qui est une couche de convolution bidimensionnelle. Le premier argument est __ "filter" __, qui spécifie le nombre de dimensions __ de l'espace de sortie, et le second argument est __ "kernel_size" __, la largeur et la hauteur de la fenêtre __ réduite. Spécifiez __. __ "foulées" __ spécifie la foulée, c'est-à-dire la largeur et la hauteur de la fenêtre __ qui se déplace en même temps __.

·code スクリーンショット 2020-11-20 15.21.21.png

Historique et paramètres de stratégie

-Similaire au chapitre 2, définissez __History __ et __Measures __ requis pour créer un agent. -Utilisez __ "SequentialMemory ()" __ pour l'historique. Spécifiez limit et window_length comme arguments. -Utiliser __ "BoltzmannQPolicy ()" __ lors de l'utilisation de la politique de Boltzmann, et __ "EpsGreedyQPolicy ()" __ lors de l'utilisation de la méthode ε-greedy. -De plus, lors de la modification du paramètre ε en Linear, utilisez __ "LinearAnnealedPolicy ()" __. Lorsque l'argument est spécifié comme indiqué dans le code ci-dessous, cela signifie que le paramètre ε est transformé en une ligne linéaire avec un maximum de 1,0 et un minimum de 0,1 en 10 étapes pendant l'entraînement, et fixé à 0,05 pendant le test.

·code スクリーンショット 2020-11-20 15.59.01.png

Paramètres de l'agent

-Un agent peut être créé en passant model, memory, policy, nb_actions, nb_steps_warmup à l'argument de __ "DQNAgent ()" __. Après cela, vous pouvez spécifier la méthode d'apprentissage avec __ "dqn.compile ()" __. Spécifiez __optimization algorithm __ dans le premier argument et __evaluation function __ dans le second argument.

・ Code![Capture d'écran 2020-11-20 16.08.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/22bcf494-f1c6-0c09- 0a70-8f2b885c4b41.png)

Mise en œuvre de l'apprentissage

・ Après avoir terminé les réglages de la section précédente, effectuez l'apprentissage à l'aide de l'algorithme DQN. __ "dqn.fit ()" __, spécifiez l'environnement dans le premier argument et le nombre d'étapes à apprendre dans "nb_steps" dans le deuxième argument. -En outre, le résultat d'apprentissage peut être sauvegardé au format hdf5 avec __ "dqn.save_weights ()" __. Le premier argument est le nom du fichier et le second argument est "écraser" pour spécifier s'il faut écraser.

·code スクリーンショット 2020-11-21 11.15.16.png

Réalisation du test

-Test avec un agent qualifié. __ Faites avec "dqn.test ()" __. L'argument est le même que fit, et le nombre d'épisodes "nb_episodes" est spécifié au lieu du nombre de pas nb_steps. ・ Au fait, dans ce blocage de bloc, c'est un épisode jusqu'à ce que la balle tombe.

Dueling DQN

Qu'est-ce que le DQN de duel?

-__ Dueling DQN (DDQN) __ est une version avancée de DQN, qui est une modification de la fin de la couche réseau DQN. -Dans DQN, la valeur Q a été sortie via la couche entièrement connectée après les trois premières "couches de convolution", mais DDQN divise cette couche __ entièrement connectée en deux __, tandis que l'état . Valeur de sortie V et sortie action A d'autre part. En trouvant la valeur Q de la dernière couche entièrement connectée qui prend ces deux comme entrées, les performances sont supérieures à DQN.

・ Figure![Capture d'écran 2020-11-21 11.32.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/eaf40627-b0cc-5f53- 1bfe-5bf6e6330637.png)

Implémentation DQN en duel

-L'implémentation DQN Dueling est la même que DQN jusqu'à l'ajout de couche. Il peut être implémenté en définissant __ "enable_dueling_network = True" __ comme argument et en spécifiant la méthode de calcul de la valeur Q __ "dueling_type" __ dans __ (DQNAgent ()) __ lors de la configuration de l'agent. __ "'avg', 'max', 'naive'" __ peut être spécifié pour dueling_type.

・ Code![Capture d'écran 2020-11-21 12.12.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/1d6b9e57-b793-07c2- 684c-856785593a98.png)

・ Résultat![Capture d'écran 2020-11-21 12.13.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/698700/3445992d-30e4-50c0- defc-754ab85a2bb4.png)

Sommaire

-Même si le bloc est cassé, l'environnement peut être défini comme dans le chapitre 2. -Pour la construction du modèle, cette fois, nous utilisons la reconnaissance d'image bidimensionnelle, nous utiliserons donc la convolution. __ Utilisez le calque "Convolution 2D" __. ・ Dans cette mesure, la méthode ε-gourmande est utilisée, mais le paramètre ε doit être changé linéairement. Dans ce cas, utilisez __ "LinearAnnealedPolicy ()" __ pour modifier __ linéairement . -Le modèle qui a été formé peut être enregistré au format hdf5 en utilisant __ "dqn.save_weights ()" . - DuelingDQN est un DQN qui divise la liaison __full en deux __, calcule respectivement la valeur d'état V et l'action A, et obtient la valeur Q des deux de la dernière couche. L'implémentation doit spécifier __ "enable_dueling_network" __ et __ "dueling_type" __ dans __DQNAgent () __.

Recommended Posts

Deep Strengthening Learning 3 Édition pratique: Briser des blocs
Renforcer l'apprentissage 1 édition introductive
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Apprentissage par renforcement profond 2 Mise en œuvre de l'apprentissage par renforcement
L'apprentissage en profondeur
Introduction au Deep Learning ~ Dropout Edition ~
Apprenez en faisant! Apprentissage par renforcement profond_1
Apprentissage amélioré pour apprendre de zéro à profond
Apprentissage profond à partir de zéro (propagation vers l'avant)
<Cours> Deep Learning Day4 Renforcement de l'apprentissage / flux de tension
[Introduction] Renforcer l'apprentissage
Mémorandum d'apprentissage profond
Apprentissage par renforcement futur_1
Apprentissage en profondeur Python
Apprentissage profond × Python
Premier apprentissage profond ~ Lutte ~
Investissement en actions par apprentissage approfondi (méthode du gradient de politique) (1)
Apprentissage amélioré 1 installation de Python
Renforcer l'apprentissage 3 Installation d'OpenAI
Python: pratique du Deep Learning
Fonctions d'apprentissage en profondeur / d'activation
Apprentissage profond à partir de zéro
Deep learning 1 Pratique du deep learning
Renforcer l'apprentissage de la troisième ligne
Apprentissage profond / entropie croisée
Premier apprentissage profond ~ Préparation ~
Première solution d'apprentissage en profondeur ~
J'ai essayé le deep learning
[Renforcer l'apprentissage] Tâche de bandit
Technologie d'apprentissage en profondeur à grande échelle
Apprentissage amélioré Python + Unity (apprentissage)
Fonction d'apprentissage profond / softmax
Chanson auto-exploitée par apprentissage en profondeur (édition Stacked LSTM) [DW Day 6]
Renforcer l'apprentissage 18 Colaboratory + Acrobat + ChainerRL
Apprentissage profond à partir de zéro 1 à 3 chapitres
Essayez l'apprentissage en profondeur avec TensorFlow
Apprentissage amélioré 7 Sortie du journal des données d'apprentissage
Deep Learning Gaiden ~ Programmation GPU ~
Renforcer l'apprentissage 17 Colaboratory + CartPole + ChainerRL
Renforcer l'apprentissage 28 collaboratif + OpenAI + chainerRL
Renforcer l'apprentissage 19 Colaboratory + Mountain_car + ChainerRL
Renforcement de l'apprentissage 2 Installation de chainerrl
Reconnaissance d'image par apprentissage profond 1 théorie
[Renforcer l'apprentissage] Suivi par multi-agents
Deep running 2 Réglage de l'apprentissage profond
Renforcer l'apprentissage 6 First Chainer RL
Apprentissage amélioré à partir de Python
Renforcer l'apprentissage 20 Colaboratoire + Pendule + ChainerRL
Apprentissage profond / code de travail LSTM
<Cours> Apprentissage en profondeur: Jour 1 NN
Apprentissage profond du noyau avec Pyro
Apprentissage par renforcement 5 Essayez de programmer CartPole?
Apprentissage par renforcement 9 Remodelage magique ChainerRL
Apprentissage profond pour la formation composée?
Présentation d'Udacity Deep Learning Nanodegree
Mémo pratique du système d'apprentissage automatique
Sujets> Deep Learning: Day3 RNN
Introduction au Deep Learning ~ Règles d'apprentissage ~
Apprendre avec l'enseignant (retour) 2 édition avancée