Aidemy 2020/11/22
Einführung
Hallo, es ist ja! Ich bin eine knusprige Literaturschule, aber ich war an den Möglichkeiten der KI interessiert, also ging ich zur KI-Fachschule "Aidemy", um zu studieren. Ich möchte das hier gewonnene Wissen mit Ihnen teilen und habe es in Qiita zusammengefasst. Ich freue mich sehr, dass viele Menschen den vorherigen zusammenfassenden Artikel gelesen haben. Vielen Dank!
Dies ist der dritte Beitrag von Deep Strengthing Learning. Freut mich, dich kennenzulernen.
- Dieser Artikel ist eine Zusammenfassung dessen, was Sie in "Aidemy" "in Ihren eigenen Worten" gelernt haben. Es kann Fehler und Missverständnisse enthalten. Bitte beachten Sie.
Was diesmal zu lernen
・
・
Stärkung der Lernpraxis durch Brechen von Blöcken
Eine Umgebung schaffen
- Erstellen Sie eine Umgebung mit der gleichen Methode __ (gym.make ()) __ wie in Kapitel 2. Geben Sie im Falle eines Blockbruchs __ "Breakout Deterministic-v4" __ als Argument an.
-Die Anzahl der Aktionen kann durch __ "env.action_space.n" __ bestätigt werden.
·Code
Ein Modell bauen
・ Hier wird ein mehrschichtiges neuronales Netzwerk aufgebaut. Die Eingabe ist __ "4 Frames Block Breaking Screen" __. Um den Rechenaufwand zu verringern, wird die Bildgröße auf den Graustufenmaßstab 84 × 84 Pixel geändert.
-Das Modell verwendet Sequential (). Glätten Sie wie in Kapitel 2 die Eingabe mit __Flatten () __, fügen Sie die vollständig verbundene Ebene mit Dense und die Aktivierungsfunktion mit Activation hinzu.
- Da wir dieses Mal ein Bild (zweidimensional) eingeben, verwenden wir __ "Convolution2D ()" __, eine zweidimensionale Faltungsschicht. Das erste Argument ist __ "filter" __, das die Anzahl der Dimensionen __ des Ausgaberaums angibt, und das zweite Argument ist __ "kernel_size" __, die Breite und Höhe des reduzierten __ Fensters. Geben Sie __ an. __ "Schritte" __ gibt den Schritt an, dh die Breite und Höhe des __ Fensters, das sich gleichzeitig bewegt __.
·Code
Verlaufs- und Richtlinieneinstellungen
- Legen Sie ähnlich wie in Kapitel 2 __History __ und __Measures __ fest, die zum Erstellen eines Agenten erforderlich sind.
-Verwenden Sie __ "SequentialMemory ()" __ für den Verlauf. Geben Sie limit und window_length als Argumente an.
-Verwenden Sie __ "BoltzmannQPolicy ()" __, wenn Sie die Boltzmann-Richtlinie verwenden, und __ "EpsGreedyQPolicy ()" __, wenn Sie die ε-greedy-Methode verwenden.
- Wenn Sie den Parameter ε in Linear ändern, verwenden Sie __ "LinearAnnealedPolicy ()" __. Wenn das Argument wie im folgenden Code angegeben angegeben wird, bedeutet dies, dass der Parameter ε während des Trainings in 10 Schritten in eine lineare Linie mit einem Maximum von 1,0 und einem Minimum von 0,1 umgewandelt und während des Tests auf 0,05 festgelegt wird.
·Code
Agenteneinstellungen
- Ein Agent kann erstellt werden, indem Modell, Speicher, Richtlinie, nb_actions, nb_steps_warmup an das Argument __ "DQNAgent ()" __ übergeben werden. Danach können Sie die Lernmethode mit __ "dqn.compile ()" __ angeben. Geben Sie im ersten Argument den Optimierungsalgorithmus __ und im zweiten Argument die Bewertungsfunktion __ an.
・ Code![Screenshot 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)
Umsetzung des Lernens
・ Führen Sie nach Abschluss der Einstellungen im vorherigen Abschnitt das Lernen mit dem DQN-Algorithmus durch. __ "dqn.fit ()" __, geben Sie die Umgebung im ersten Argument an und wie viele Schritte in "nb_steps" im zweiten Argument zu lernen sind.
-Auch das Lernergebnis kann im HDF5-Format mit __ "dqn.save_weights ()" __ gespeichert werden. Das erste Argument ist der Dateiname, und das zweite Argument ist "überschreiben", um anzugeben, ob überschrieben werden soll.
·Code
Test durchführen
-Test mit einem ausgebildeten Agenten. __ Mach mit "dqn.test ()" __. Das Argument ist dasselbe wie fit, und die Anzahl der Episoden "nb_episodes" wird anstelle der Anzahl der Schritte nb_steps angegeben.
・ Übrigens ist es in diesem Blockbruch eine Episode, bis der Ball fallen gelassen wird.
Dueling DQN
Was ist Duell DQN?
-__ Dueling DQN (DDQN) __ ist eine erweiterte Version von DQN, bei der es sich um eine Modifikation des Endes der DQN-Netzwerkschicht handelt.
-In DQN wurde der Q-Wert nach den ersten drei "Faltungsschichten" über die vollständig verbundene Schicht ausgegeben, aber DDQN teilt diese __ vollständig verbundene Schicht in zwei __ auf, während der __ Zustand vorliegt. Ausgabewert V__ und Ausgabeaktion A__ dagegen. Durch Ermitteln des Q-Werts aus der letzten vollständig verbundenen Schicht, die diese beiden als Eingaben verwendet, ist die Leistung höher als bei DQN.
・ Abbildung![Screenshot 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)
Duell DQN Implementierung
- Die DQN-Implementierung wird bis zum Hinzufügen der Schicht mit der DQN-Implementierung identisch. Sie kann implementiert werden, indem __ "enable_dueling_network = True" __ als Argument festgelegt und die Q-Wert-Berechnungsmethode __ "dueling_type" __ in __ (DQNAgent ()) __ beim Festlegen des Agenten angegeben wird. __ "'avg', 'max', 'naive'" __ kann für dueling_type angegeben werden.
・ Code![Screenshot 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)
・ Ergebnis![Screenshot 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)
Zusammenfassung
- Auch wenn der Block beschädigt ist, kann die Umgebung wie in Kapitel 2 definiert werden.
-Für die Modellkonstruktion verwenden wir diesmal die zweidimensionale Bilderkennung, also verwenden wir die Faltung. __ Verwenden Sie die Ebene "Convolution 2D" .
・ Bei dieser Maßnahme wird die ε-gierige Methode verwendet, der Parameter ε muss jedoch linear geändert werden. Verwenden Sie in einem solchen Fall __ "LinearAnnealedPolicy ()" , um __ linear __ zu ändern.
-Das trainierte Modell kann mit __ "dqn.save_weights ()" __ im HDF5-Format gespeichert werden.
- DuelingDQN ist ein DQN, der die __full-Bindung in zwei __ teilt, den Zustandswert V bzw. die Aktion A berechnet und den Q-Wert von den beiden in der letzten Schicht erhält. Die Implementierung sollte __ "enable_dueling_network" __ und __ "dueling_type" __ in __DQNAgent () __ angeben.