[PYTHON] Ich habe das Toho-Projekt mit Deep Learning aufgenommen ... ich wollte.

(Nachtrag vom 16.08.2017)

Dieser Artikel basiert auf diesem Wissen der Zeit. Es enthält offensichtliche Fehler, daher hoffe ich, dass Sie sich mäßig darauf beziehen können.


Es ist noch etwas früh Mitte Februar, aber es ist jeden Tag eine zweistellige Temperatur und es ist Frühlingswetter. Ich denke, dass die Nachricht von "Sakurasaku" begonnen hat, die Leute zu erreichen, die hier zuschauen. ~~ Andererseits habe ich 5 Jobs in Folge verloren. ~~

Übrigens, vor ungefähr drei Wochen "Googles Go AI'AlphaGo'wins der professionelle Spieler zum ersten Mal in der Geschichte" Schockierende Nachrichten kamen herein. Go wird als ungelöstes Problem angesehen, und ich hatte neulich gerade darüber gesprochen, dass "dies zur Bewertung verwendet werden könnte". Daher war ich sehr überrascht über die Nachricht, dass es bereits im Oktober letzten Jahres beigelegt worden war. Gleichzeitig habe ich darüber nachgedacht.

"Gibt es nicht viele Probleme, die bereits gelöst wurden, nur weil wir es nicht wissen? 』\

Es mag überraschend erscheinen, aber tatsächlich haben einige Spiele bereits besseres Verhalten als Menschen lernen. .. (Hier ist sehr detailliert) Das in diesem Video verwendete Deep Q-Network ist eine Methode aus dem Jahr 2013, und das Papier verwendete zu diesem Zeitpunkt ein sehr einfaches Modell. Auf der anderen Seite hat die Forschung im Bereich der Bildverarbeitung in den letzten Jahren Fortschritte gemacht, und die Wirksamkeit eines Modells, das weitaus schwieriger ist als das im Deep Q-Network verwendete Modell, wurde erkannt. Das Ergebnis von AlphaGo ist auch das Feedback einer solchen Bildverarbeitung. "Wenn Sie eine Bildverarbeitungstechnologie wie AlphaGo einführen, die noch weiter fortgeschritten ist als AlphaGo, können Sie möglicherweise komplizierte Actionspiele erfassen, die nicht ohne Verwendung von Insiderinformationen ausprobiert wurden." Ich dachte.

Dies ist eine zweiwöchige Flugbahn eines Studenten, der darüber nachdachte und handelte.

Hintergrund

Deep Q-Network und ähnliche Studien verwenden hauptsächlich das 1977 veröffentlichte Atari 2600-Spiel als Benchmark. Dies liegt zum Teil daran, dass die Bibliothek vollständig ist, aber der Hauptgrund ist, dass es schwierig ist, komplexere Spiele als den Atari 2600 zu erfassen. 3D-Actionspiele werden als schwierig angesehen, insbesondere aufgrund der Schwierigkeit der dreidimensionalen Informationsverarbeitung.

Daher habe ich mich darauf konzentriert, dass 2D-Schießspiele schwieriger als Atari 2600, einfacher und angemessener als 3D sind. 2D-Schießspiele sind 2D-Spiele und erfordern nicht so viele Informationen wie 3D, erfordern jedoch mehr Komplexität und Geschwindigkeit als Atari 2600-Spiele. Diesmal ist die Testversion kostenlos und leicht zu erhalten Toho Konjuden ~ Legacy of Lunatic Kingdom ) Wurde für die Erfassung gezielt.

~~ Eigentlich ist der Grund, warum ich das Toho-Projekt mag, größer ~~

Design

image.png

Grob gesagt ist es ein Mechanismus, der Screenshots des Spielbildschirms zwischen Windows und Ubuntu austauscht und den Vorgang an das Spiel zurückgibt.

Beispiel für den tatsächlichen Betrieb

Einfaches Video ist auf Twitter verfügbar.

Programm

Die Hauptprogramme außer Modell werden auf github veröffentlicht ... Im Prototypzustand befindet es sich jedoch immer noch in der Spitzeneinstellung. Ich denke nicht, dass es geeignet ist, etwas basierend darauf zu schreiben.

Programm Beschreibung

Der Client macht einen Screenshot mit PIL, numpiert ihn und sendet das Bild mit Socket.

Wenn der Server es mit Socket empfängt, formatiert er es mit numpy und OpenCV, und Chainer trifft ein Todesurteil und eine Handlungsentscheidung. Wenn kein Tod festgestellt wird, wird die Aktion mit Socket zurückgegeben. Wenn eine Todesentscheidung getroffen wird, wird ein Metasatz zurückgegeben und die Episode endet. Außerdem werden wir je nach Fall mit Chainer lernen.

Als Antwort auf die Antwort sendet der Client eine Aktion, die Direct Input (DirectX-Spieleingabesystem) entspricht, mit Send Input. Wenn die Meta-Erklärung des Todesurteils zurückgegeben wird, wird die Operation angehalten und wartet. Es wird weiter warten, wenn das Lernen stattfindet, andernfalls wird der Betrieb wieder aufgenommen.

Todesurteil

img0006010.jpg

In Toho Konjuden werden zum Zeitpunkt des Todes die Wörter "Fehler beim Erfassen" angezeigt. Daher wird dies verwendet, um den Tod zu bestimmen. Insbesondere gibt die Serverseite an, dass der Bereich, in dem dieser Charakter angezeigt wird, ausgeschnitten ist und ob es sich um ein Spielbild handelt oder nicht, anhand eines einfachen Modells mit drei Ebenen beurteilt wird. Dies könnte mit einer Leistung von 99% oder mehr beurteilt werden. (Es ist jedoch ein Ball, der manchmal versagt)

Handlungsentscheidung

img0000012.jpg

Wählen Sie die Aktion mit der höchsten Bewertung für ein einzelnes Bild aus, wie oben gezeigt. Es gibt insgesamt 18 Verhaltensmuster, und diese sind wie folgt.

z (Schussknopf) z (Schussknopf) + 8 Richtungen z (Aufnahmetaste) + UMSCHALT (langsame Bewegung) z (Aufnahmetaste) + UMSCHALT (langsame Bewegung) + 8 Richtungen

Darüber hinaus erfolgte die Bewertung in Form von Lernen und Schätzen durch Kombination von Verhalten und Überlebenszeit.

Wie war die Leistung?

Ich habe verschiedene Kombinationen basierend auf Lunatic (höchster Schwierigkeitsgrad) ausprobiert, aber ich konnte das erste Kapitel nicht hinter mich bringen.

Wie Sie dem einfachen Video entnehmen können, wird die Aktion eindeutig entschieden, wenn sie nicht ZUFÄLLIG ist. Damit ist es unvermeidlich, den operativen Charakter anzugreifen und du wirst sterben. Dies ist wahrscheinlich auf schlechtes Lernen zurückzuführen.

Im obigen Video habe ich versucht, die Bewertung zu lernen, indem ich das Lernen jedes Mal eingeklemmt habe, wenn ich die Aktion bis zu einem gewissen Grad beendet habe. Das Obige ist das Ergebnis des Lernens, indem tatsächlich ungefähr 2000 Bilder jeweils fünfmal verwendet werden. Dies ist ein Betrag, von dem selbst bei der allgemeinen Bildverarbeitung nicht gesagt werden kann, dass er ausreichend lernt.

Es ist jedoch ein beträchtlicher Rechenaufwand erforderlich, um mit dem Modell von 100 Schichten oder mehr zu trainieren, das derzeit in der Bildverarbeitung verwendet wird. In meiner Umgebung dauerte es fast eine Stunde, um alle Bilder einmal zu verarbeiten, selbst wenn es nur wenige Tausend waren. Selbst wenn Sie es einmal behandeln, können Sie es genug lösen, wenn es sich um ein einfaches Klassifizierungsproblem handelt, aber soweit ich es diesmal versucht habe, scheint es nicht so einfach zu sein.

Wie kann ich dann das Toho-Projekt erfassen? ??

Verwenden Sie für weitere Informationen eine parallele GPU-Berechnungsbibliothek wie "Distributed TensorFlow", die in Kürze veröffentlicht wird. Ich denke es ist notwendig. In dem obigen Artikel wird ein Beispiel für die 300-mal höhere Parallelverarbeitung mit 500 Einheiten vorgestellt. Wenn diese 300-fache Verarbeitung verwendet werden kann, kann das obige Problem gelöst werden. (Wenn Sie dies tatsächlich verwenden, kann AlphaGo, für das fast 700 Tage Rechenzeit erforderlich sind, in nur 2 Tagen erlernt werden.) [^ 1]

[^ 1]: Ich hatte ein wenig Zeit, also habe ich verschiedene Dokumente überprüft, aber ich war skeptisch, dass "dies ein Missverständnis war und es zwei Jahre her ist, seit ich überhaupt zerstreut wurde". Ich werde es für eine Weile im Originaltext veröffentlichen, bis ich es bestätigen kann. (Hinzugefügt am 13.03.2016)

Wenn Sie jedoch 500 TitanX kaufen, die derzeit leistungsstärksten GPUs auf dem Markt, werden dies allein über 70 Millionen sein. Es ist kein Betrag, der an arme Schüler gezahlt werden kann, aber ist dieser Berechnungsbetrag nicht überschaubar?

~~ Ich möchte vorher einen Job bekommen, aber ich frage mich, ob das möglich ist ... ~~

Verweise

Geschichte von DQN + Deep Q-Network in Chainer geschrieben Machen Sie einen Screenshot mit Pillow for Python Bilder von Raspberry Pi mit OpenCV übertragen Simulate Python keypresses for controlling a game

Korrektur und Entschuldigung (hinzugefügt am 18. Februar 2016)

AlphaGo verwendet eine Technik namens Deep Q-Network.

Im ersten Entwurf wurde der obige Satz am Anfang veröffentlicht. Ich wurde jedoch darauf hingewiesen, dass "obwohl bei der Optimierung des Modells Verstärkungslernen durchgeführt wird, Deep Q-Network nicht verwendet wird und es sich um einen eindeutigen Fehler handelt", und ich habe es korrigiert.

Wir möchten diese Gelegenheit nutzen, um uns für die Veröffentlichung falscher Informationen zu entschuldigen.

Recommended Posts

Ich habe das Toho-Projekt mit Deep Learning aufgenommen ... ich wollte.
Ich wollte mit der Bezier-Kurve spielen
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Ich wollte das ABC164 A ~ D-Problem mit Python lösen
Ich wollte ABC160 mit Python lösen
Ich wollte ABC172 mit Python lösen
Ich wollte unbedingt mit Selen kopieren
Ich habe versucht, Deep Learning zu implementieren, das nicht nur mit NumPy tiefgreifend ist
Ich habe versucht, das Modell mit der Low-Code-Bibliothek für maschinelles Lernen "PyCaret" zu visualisieren.
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Die Geschichte des tiefen Lernens mit TPU
Ich wollte den NOMURA Contest 2020 mit Python lösen
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich wollte Python 3.4.3 mit Homebrew + pyenv installieren
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Ich habe versucht, Cifar10 mit der SONY Deep Learning Library NNabla [Nippon Hurra] zu implementieren.
Ich habe versucht, Deep Learning mit Spark × Keras × Docker 2 Multi-Host-Edition skalierbar zu machen
Ich habe versucht, tief zu lernen
[Deep Learning von Grund auf neu] Ich habe die Affine-Ebene implementiert
Ich habe versucht, maschinelles Lernen (Objekterkennung) mit TouchDesigner zu verschieben
Ich wollte auch Typhinweise mit numpy überprüfen
Ich habe den Deep Learning Library Chainer installiert und verwendet
Ich möchte mit verstärkendem Lernen einen Berg besteigen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich wollte die Python-Bibliothek von MATLAB verwenden
Ich möchte mit Python-Datenklasse nach hinten erben
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, Dropout zu erklären
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
Ich habe dir geschrieben, dass du das Signal mit Go sehen sollst
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 16) Ich habe versucht, SimpleConvNet mit Keras zu erstellen
"Deep Learning from Grund" Memo zum Selbststudium (Nr. 17) Ich habe versucht, DeepConvNet mit Keras zu erstellen
Ich wollte nur die Daten des gewünschten Datums und der gewünschten Uhrzeit mit Django extrahieren
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe versucht, die Emotionen des gesamten Romans "Wetterkind" zu analysieren
Versuchen Sie es mit TensorFlow
Versuchen Sie, ein Deep Learning / Neuronales Netzwerk mit Scratch aufzubauen
[Teil 1] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
Ich wollte den Motor mit einer Raspeltorte laufen lassen, also habe ich versucht, das Motor Driver Board von Waveshare zu verwenden
[Teil 3] Verwenden Sie Deep Learning, um das Wetter anhand von Wetterbildern vorherzusagen
[Evangelion] Versuchen Sie, mit Deep Learning automatisch Asuka-ähnliche Linien zu erzeugen
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, die Zugverspätungsinformationen mit LINE Notify zu benachrichtigen
Eine Geschichte, bei der ich darüber nachdachte, die Informationen über die Fülle des Parkplatzes anhand des von der Webkamera und Razpai erhaltenen Bildes und durch tiefes Lernen zu ermitteln.
Deep Kernel Learning mit Pyro
[Deep Learning von Grund auf neu] Ich habe versucht, die Gradientenbestätigung auf leicht verständliche Weise zu erklären.
Versuchen Sie Deep Learning mit FPGA
Ich möchte mit Numpy die japanische Flagge in die Palau-Flagge ändern
Was ich getan habe, um die Python2 EOL mit Zuversicht zu begrüßen
Erkennen Sie Ihren Chef mit Deep Learning und verbergen Sie den Bildschirm
Mayungos Python Learning Episode 3: Ich habe versucht, Zahlen zu drucken
"Tiefe Kopie" und "flache Kopie", um mit dem kleinsten Beispiel zu verstehen
Ich habe versucht, ListNet of Rank Learning mit Chainer zu implementieren
[TF] Ich habe versucht, das Lernergebnis mit Tensorboard zu visualisieren
Ich kann mich mit Django 3 nicht auf der Admin-Seite anmelden
Einführung in Deep Learning ~ Lernregeln ~
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens