Deep Learning day by day Wintersemester 2018/19
 
  (EN google-translate) 
  (PL google-translate) 
----------------
Deep Learning:
Im Skript verfügbare Themen:
1 Neuronale Netze
2 Backtracking
3 Implementierung 
4 JNI
5 BlueJ & Processing
6 Selber Processing-Libraries erstellen
Neue speziell auf Deep Learning bezogene Themen
7 Theorie Deep Learning
8 Testimplementierung
9  DL4J verstehen
10 DL4J benutzen
11 DL4J einbetten: Android / Processing
Termine:
22.11. 1, 2        Neuronale Netze, Backtracking
29.11. 3, 4        Implementierung, JNI
06.12. 5, 6        BlueJ & Processing, Selber Processing-Libraries erstellen
13.12. 7, 8        Theorie Deep Learning, Testimplementierung
20.12. 9, 10, 11   DL4J-Beispiele / eigene Umsetzung
10.01.             *** Projekt *** 
17.01.             *** Projekt ***
24.01.             *** E-Test / Projekt ***
* Projekt kann in Zweiergruppen bearbeitet werden.
* E-Test-Note und Projektnote zählen jeweils zu 50% in dieser LV.
* Projektthemen ev. mit Elektrokutschen: Objekterkennung / Navigation
Code 0-1: Entwurf für den Ablauf der LV.
 
Donnerstag 22.11.2018:  
- Neuronale Netze 
 
- Backtracking
 
- Implementierung
 
- Java Schnittstellen
 
  | 
/67_Echtzeitsysteme/08_NeuronaleNetze
/80_Robuste_Systemintegration/10_EvoFuzzy/04_NeuronaleNetze
/83_AV/02_Architekturen/02_Entwurfsmuster (Schnittstelle == interface in Java)
/78_Processing
/93_Android_Proc/02_Eigene_Library (Erstellen einer eigenen Processing-Library)
/92_Soundinstallation/03_material/11_Snippets
Übung: Einfacher Anwendungsfall: Tic-Tac-Toe
- Sämtliche Spielverläufe ermitteln
 
- Für jeden Zug Gewinnwahrscheinlichkeit ermitteln
 
- Automatischen Spieler selber implementieren
 
- Neuro-Spieler entwerfen
 
  | 
TicTacToe001.zip -- Musterlösung1: Alle Permutationen von 012345678 finden
TicTacToe002.zip -- Musterlösung2: Aus den Permutationen alle gültigen Partien extrahieren.
Neue Versionen (Grandlage für nächsten Unterricht):
TicTacToe01_Partien_rekursiv.zip -- rekursive Ermittlung der Partien (schneller, besser!)
TicTacToe02_GUETE.zip -- Implementierung und Test einer Gütefunktion
Basisversion für das Training: Zufallspieler gegen Zufallspieler:
TicTacToe03_ZUFALL_GEGEN_OPTI.zip
- Wer beginnt wird vor jeder Partie zufällig festgelegt.
 
- Bei der Trainer-Klasse müssen zwei Spieler registriert werden.
 
- Es wird aufgezeichnet, wer wie oft gewonnen hat und die unentschiedenen Partien.
 
- Derzeit ist der Durchlauf durch eine Pause verlangsamt. Für das richtige Training muß diese Pause entfernt werden.
 
- A ist rot, B ist grün. Sind die Kreuze rot, hat in der aktuellen Partie A begonnen.
 
- Der der beginnt macht immer Kreuze.
 
  | 
Bild 0-1: Visualisierung von TicTacToe03_ZUFALL_GEGEN_OPTI.
 
Optimaler Spieler A gegen Zufallsspieler B:
TicTacToe04_ZUFALL_GEGEN_OPTI.zip
Bild 0-2: Optimaler Spieler gegen Zufallsspieler nach einiger Zeit (Pause wurde deaktiviert).
 
Effizientere Umsetzung als neue Basis:
TicTacToe05_effizient.zip
TicTacToe06_effizient.zip
TicTacToe08_Turnier.zip
Erstes Neuronales Netz ("klassisch"):
TicTacToe09_feldfrei.zip
Verbesserte objektorientierte Programmstruktur bei Neuronalem Netz, Es lernt, wo es setzen darf
TicTacToe32_Neuro_strukturiert.zip -- Dieses Netz lernt, was es lernen soll.
Donnerstag 06.12.2018:  
- Neu: Diese LV heißt ab jetzt "Informatik-Ergänzungen".
 
- Es wird ein größeres Gewicht auf Programmierkenntnissen gelegt.
 
- Dafür wird der Einstieg in Deep-Learning weniger weit getrieben, wenn auch weiterhin DL das Hauptthema bleiben soll, bzw. dasjenige, anhand dessen die Programmiertechniken erlernt werden.
 
- Die Prüfungsform bleibt wie letzte Woche angekündigt.
 
  | 
Agenda 6.12.
- Teil 1: Programmiertechnik
 
- Teil 2: TicTacToe mit Rekursion 
 
- Teil 3: Klassische Neuronale Netze am Beispiel eines Perceptron-Netzes, das richtig setzen lernt bei TicTacToe.
 
- Teil 4: Übung: Von Teil 3 ableiten, selber ein Netz zu erzeugen, das TicTacToe spielen kann.
 
  | 
Teil 1: Programmiertechnik, Themen:
    | Nr.  | 
     Konzept  | 
     Darstellung durch Beispiel  | 
     Bemerkungen | 
    | 1.  | 
     Callback-Funktionen  | 
     mousePressed(), draw()  | 
     Datenaustausch über Variablen | 
    | 2.  | 
     Random               | 
     Brownsche Atombewegung  | 
     z.B. Generierung von Testwerten | 
    | 3.  | 
     Tabs                 | 
     eigene Klassen schreiben  | 
     Quelltext organisieren | 
    | 4.  | 
     Schnittstellen       | 
     Kontroll-Ausgabe  | 
     Anwendung: Spieler austauschbar machen. | 
    | 5.  | 
     Threads              | 
     Echtzeitsimulation  | 
     Trennung von Simulation und Visualisierung  | 
    | 6.  | 
     Zustandsvariable     | 
     Abbilden verschiedener Phasen in einer App  | 
     Umsetzung über switch-case-Blöcke | 
    | 7.  | 
     Late Binding         | 
     Grundproblem bei Threads: fehlende Instanzen  | 
     Objekte erst erzeugen, wenn sie benötigt werden | 
    | 8.  | 
     BlueJ                | 
     Java-Entwicklungsumgebung  | 
     Klassendarstellung mit UML / strukturierte Entwicklung / eigene Libraries | 
    | 9.  | 
     Eigene Libraries     | 
     Permutation  | 
     Dinge, die man sich einmal erarbeitet hat, kann man sich über Libraries dauerhaft verfügbar machen. | 
Tabelle 0-1: Programmiertechnik-Themen heute.
 
Permutation001.zip -- zu 9.
Teil1_06Dez_alle_Sketche.zip
Teil2: 79_Deep_Learning/02_TicTacToe/01_Rekursiv
Teil 3 und 4: 79_Deep_Learning/02_TicTacToe/02_Perceptron
Donnerstag 13.12.2018:  
- Nachtrag/Korrektur zum optimalen Spieler:
 
  | 
79_Deep_Learning/02_TicTacToe/01_Rekursiv -- siehe unten: "Optimaler Spieler -- Nachtrag"
- Deep-Learning-Umsetzung mit Hilfe des SDA-Algorithmus
 
  | 
79_Deep_Learning/02_TicTacToe/03_SDA
- Übung zur Festigung des bisher Erarbeiteten und zur Erarbeitung neuer Inhalte und Fertigkeiten
 
  | 
Donnerstag 10.01.2019:  
- Ankündigung der Inhalte für den E-Test
 
  | 
- Allgemeines Wissen über Neuronale Netze (NNs) und Deep Learning
 
- Von Hand Ausgabe eines kleinen NNs berechnen, wenn sigmoide Funktion angegeben.
 
- Von Hand Backtrackingschritt eines kleinen NNs berechnen, wenn Formel gegeben.
 
- NN als Java-Funktion implementieren.
 
- Threads und Schnittstellen programmieren (Java).
 
  | 
In allen Fällen geht es darum, die Fragestellungen anhand praktischer Umsetzungen zu beantworten.
- Abzugeben/zu Erstellen sind:
 
  | 
Ergebnisposter (Ergebnisbeschreibung, corporate design, A0, pdf)
Projekt/Quelltexte
- Außerdem: ca. 10Min. Abschlußpräsentation mit Vorführung der Software am Donnerstag 24.1.
 
  | 
- Beispielposter (Design könnte besser sein), siehe: Poster im Gang von IWZ135.
 
  | 
- Außer 5. und 8. werden alle Projekte mit Processing implementiert.
 
  | 
Corporate Design (bitte in rot): https://informatik.th-brandenburg.de/fileadmin/user_upload/fb-informatik/dokumente/Vorlage_Poster_Abschlussarbeit/Abschlussposter_A2_FBIM_Corporate_Design.ppt
NEU: Präsentation findet als "Postersession" statt, d.h.:
- ... Es werden keine Folien für die Präsentation benötigt.
 
- Die Poster müssen wirklich fertig werden.
 
- Falls der Ausdruck nicht kurzfristig möglich ist, wird das Poster am Beamer gezeigt.
 
- Trotzdem soll in jedem Fall auch die eigene Software/das eigene Gerät in Aktion gezeigt werden.
 
  | 
1. Thema: Over- / Underfitting bei TicTacToe 
- Untersuchen Sie das Lernverhalten verschieden großer Netze für TicTacToe.
- Weisen Sie anhand konkreter Beispiele (TicTacToe) den Effekt des Over- und den des Underfitting nach.
* Lassen sich auch Unterschiede für verschiedene Netzwerkformen aufweisen? 
2. Thema: Pong
- Überlegen Sie sich ein Konzept, wie ein NN auf das Pong-Spiel angewendet werden kann.
- Implementieren Sie eine einfache Variante von Pong mit NN als Spieler.
- Einfach kann heißen: Es gibt nur einen Spieler. Bälle werden nie reflektiert.
* Umsetzung eines Spiels, bei dem ein menschlicher Spieler gegen ein NN spielt.
3. TicTacToe Mit/ohne Vortraining
- Wieviele Neuronen-Schichten können noch ohne weiteres ohne Vortraining belernt werden.
- Wieviel aufwändiger ist das Belernen mit gegenüber dem ohne Vortraining.
* Wie groß sollten die Lernfaktoren bei den verschienen Lernmethoden und deren Teilen sein? 
* Wie sollte der Lernfaktor am besten gesteuert werden?
4. SDA zur Filterung von Bildern
- Untersuchen Sie praktisch die Möglichkeit mittels SDA Störungen aus Bildern heruaszufiltern.
- Beispiel: Konturen schließen.
* Bereinigung der Einzelbilder historischer Trickfilme (prinzipieller Nachweis): https://archive.org/details/silent_films
5. DL4J
- DL4J-Installation auf PC-Pool-Rechnern testen.
- Anleitung zur Verwendung von DL4J schreiben.
* TicTacToe mit SDA auf der Grund von DL4J umsetzen (nicht vorhandenes Beispiel nehmen)
6. NN lernt Regelalgorithmus
- Nehmen Sie sich ein einfaches regelungstechnisches Problem vor.
- Legen Sie dafür einen Regelkreis aus.
- Belernen Sie ein NN mit dem In- und Output dieses Regelkreises.
* Lassen Sie ein NN eine das Ausregeln einer Regelstrecke erlernen ohne des Verhaltens eines anderen Regelalgorithmus' 
7. Snake
- NN soll das Spiel Snake erlernen. (Überlegen Sie sich, wie ein Spielsituation und ein nachfolgender Zug bewertet werden kann.)
- Implementierung NN steuert Schlange alleine.
* Implementierung Mensch gegen Maschine.
siehe z.B.:
https://de.wikipedia.org/wiki/Snake_(Computerspiel)
8. TicTacToe mit NN als Gegner auf Mikrocontroller
- Übertragen Sie ein belerntes Netz zu TicTacToe auf einen ArduinoMicro.
- Bauen Sie eine Mikrocontroller-Testschaltung auf, die es einem Spieler erlaubt gegen das NN zu spielen.
* Erstellen Sie ein Release, das ernsthaft von beliebigen Personen benutzt werden kann (Punkte-Anzeige, Info, wer dran ist usw.)
9. Audio-Analyse
- Unterscheidung dreier Sinustöne verschiedener Frequenz durch ein NN
- Welche Größe eines NNs ist hier mindestens erforderlich?
- Wie reduziert man den Datenumfang einer Audiodatei?
* Implementierung eines Codeschlosses, das mit Tonfolgen arbeitet (prinzipieller Nachweis durch praktische Variante) / idealerweise PC-Mikrofon verwenden. 
10. Reinforced Learning
* Wie funktioniert "Reinforced Learning"? / Anwendung: Regelung eines "Fahrzeugs" in einer sehr einfachen Simulationsumgebung.
studentische Vorschläge:
??. z.B. anderes Spiel, bei dem ein NN Gegner für einen Menschen ist.
Code 0-2: Projektarbeitsthemen