Seminararbeit der Vorlesung Angewandtes Maschinelles Lernen an der Hochschule für angewande Wissenschaften Hof des Sommersemesters 2020.
- Entwicklen, Traninern und Testen eines Neuronalen Netzes zum absovlieren von Super Mario Bros. (1985)
- Verständnis von Neuronalen Netzten und RL-Algorithmen (insbesondere Deep-Q-Learning) ausbilden
- lauffähige Python-3-Installtion (Anleitung)
- lauffähiges Pip3-Paketemanager (in Python-3.4 und später bereits enthalten)
- CUDA-Treiber für die Gpu-Unterstützung¹ (Anleitung)
Laden Sie sich eine Kopie dieses Projektes lokal herunter, hier bspw. mit Git:
cd <destination>
git clone https://github.com/JanGaida/super-mario-bros-with-a3c.git
Installieren Sie anschließend die benötigten Pakete:
Für Gpu-Unterstützung¹:
cd <destination>/super-mario-bros-with-a3c
pip3 install tensorflow-gpu==2.2.0
pip3 install -r requirements.txt
Für Cpu-Unterstützung:
cd <destination>/super-mario-bros-with-a3c
pip3 install tensorflow==2.2.0
pip3 install -r requirements.txt
¹ für das Trainiern empfohlen; Gpu-Empfehlung: Nvidia-Gpu, GTX 9XX oder neuer, 6GB NVRAM für 5 parallel laufende Trainings-Prozesse
Das Progamm selbst ist darauf ausgelegt, dass mit diversen Parametern experimentiert werden kann und verfügt deshalb um eine große Anzahl an Start-Argumenten. Desweitern verfügt es über viele Kommentare im Code um bspw. die Netzwerkarchitektur zuändern, wie etwa das LSTM-Modul mit einem GRU-Modul auszutauschen.
Für eine Auflistung aller Start-Argumente:
cd <destination>/super-mario-bros-with-a3c
python3 main.py --help
Für das Starten des Training-Vorgangs des Super-Mario-Bros Level 1 in Welt 1 von 10000 Episoden mit 5 Trainingsthreads:
cd <destination>/super-mario-bros-with-a3c
# Ausführliche Schreibweise:
python3 main.py --mode training --world 1 --stage 1 --absolute_max_training_steps 10000 --num_parallel_trainings_threads 5
# Kurze Schreibweise:
python3 main.py -m training -w 1 -s 1 -max 10000 -ttr 5
Für das Starten des Testing-Vorgangs des Super-Mario-Bros Level 1 in Welt 1:
cd <destination>/super-mario-bros-with-a3c
# Ausführliche Schreibweise:
python3 main.py --mode testing --world 1 --stage 1
# Kurze Schreibweise:
python3 main.py -m testing -w 1 -s 1
Zunächst wurde in der Welt-1-Stage-1 unterscheidliche Modelle getestet (vgl. nachfolgendes Kapitel). Die gezeigten Gifs sind entsprechen hierbei 1500, 2000, 2500 und 3500 Episoden bei 5 Trainingsthreads.
Nachfolgende Graphen basieren auf folgender Legende:
Die nachfolgenden Ergebnisse beziehen sich speziell auf die Modelversion mit Deep-CNN und LSTM-Cell.
Von links nach rechts: 0.5k Episoden, 1k Episoden, 2k Episoden und 2.5k Episoden bei jeweils 5 Workern
Von links nach rechts: 1k Episoden, 2k Episoden, 3k Episoden und 7.5k Episoden bei jeweils 5 Workern
Vortrainierte PyTorch-Model-Files befinden sich hier (Anleitung).
Weitere Aufnahmen zu abgeschlossenen Trainings befinden sich hier
Nachfolgend ist der Context des Neuronalen-Netzwerkes zusehen.
Nachfolgend sind die genauen Architekturen der Neuronalen-Netzwerkes zusehen die implemtiert wurden.
Nachfolgend ist das Frame-Preprocessing in einer Graphik kurz erklärt.
Der Reward selbst wurde als sog. 'Reward Shaping' implementiert und besteht aus vier Bestandteilen:
Formula: delta_x = x_1 - x_0
Formula: delta_time = min( (t_1 - t_0), 0 )
Formula: r_ziel = 45 if flag_reached else 0
Formula: r_life = -45 if life_lost else 0
Insgesammt bildet sich der Reward schließlich nach nachfolgenden Formular:
Formula: reward = (delta_x + delta_time + r_ziel + r_life) / 10
- Dem Professor und den Komilitonen der Vorlesung "Angewandtes maschinelles Lernen (Sommersemester 2020)"
- Christian Kauten für das Bereitstellen des OpenAi-Gym's Super-Mario-Bros.
- Viet Nguyen, Arvind Soma, Sachin Abeywardana, Christian Kauten, Otmane Sakhi & Amine Sadeq und viele weitere Projekte für inspirerende Reinforcement-Learning-Implementationen im Super-Mario-Bros-Gym's