Day by Day
(EN google-translate)
(PL google-translate)
ACHTUNG AKTUELL 01.12.2020: BBB-Raum wurde gelöscht! -- Neuer Link (gleicher wie Simulations- und Regelungstechnik) statt des alten in Moodle eingetragen. Bitte nachschlagen!
Verzeichnis der im Verlauf des Semesters behandelten Themen
siehe auch day_by_day von 2019: 79_Deep_Learning/99_day_by_day_2018
Donnerstag 26.11.2020
Themen
- Vorstellungsrunde (Wer sind Sie? Was haben Sie im Praktikum gemacht? Wie weit sind Sie zufrieden mit dem Format der LV am Dienstag und heute?)
- Erfolge im Bereich Deep Learning, Videos.
- Geschichte: Symbolische KI versus Neuronale KI
- Grundlagen Neuronale Netze
- Zweites grosses Thema: Processing (Einführung)
- Tic Tac Toe ???
|
Google DeepMind's Deep Q-learning playing Atari Breakout -- https://www.youtube.com/watch?v=V1eYniJ0Rnk
AlphaGo - The Movie | Full Documentary ab 50' 42' 34' 47' 55' 1h -- https://www.youtube.com/watch?v=WXuK6gekU1Y
Links zum Skript
Überblick (überwachtes Lernen): 79_Deep_Learning
67_Echtzeitsysteme/08_NeuronaleNetze
36_Java
78_Processing
92_Soundinstallation/03_material/11_Snippets
public int berechne(int x)
{
return x*x;
}
public void setup()
{
size(500,500);
int z = 4;
println("Hallo "+z+"*"+z+"="+berechne(z));
}
int x = 0;
public void draw()
{
background(255,0,0);
fill(0,0,255);
ellipse(x,height/2,height/10,height/10);
x = x+5;
if(x>width)
x = 0;
}
Code 0-1: Beispielsketch mit Processing
Übung 1
Aufgabe: Antivalenzgitter mit Processing -- 02_WS2020_21/02_IE/01_day_by_day/2020-11-26_09-34-11.mp4
function out = sigmoid(u,d)
out = 1 ./ (1 + exp(-d.*u));
endfunction
u = -3:0.1:3;
d = 0.1;
o1 = sigmoid(u,d);
plot(u,o1);
d = 1.0;
o1 = sigmoid(u,d);
plot(u,o1);
d = 10.0;
o1 = sigmoid(u,d);
plot(u,o1);
Code 0-2: Sigmoid-Test mit Scilab
Bild 0-1: Screenshot des Scilab-Plots zu obigem Skript.
Übung 2
Der nachfolgende Sketch stellt Ihnen Methoden zur Verfügung, um
das Neuronale Netz dort umzusetzen:
67_Echtzeitsysteme/08_NeuronaleNetze/01_Neuron
Folgen Sie den Kommentaren im setup und dort in der leeren for-Schleife,
um einen Optimierer zu implementieren, der die Gewichte möglichst gut so anpasst,
dass sich ein Antivalenzgitter ergibt.
Vervollständigen Sie den Sketch durch einen Testlauf am Ende, der zeigt, ob
das Gatter auch funktioniert.
Besonderheiten: Input -1,+1 statt 0,1 und Output <0.5 .. >0.5 statt 0 oder 1.
Test006Neuro.zip
Musterlösung zu Übung 2: Test009NeuroSchichtMehr.zip
Variante mit Schrittweitensteuerung: Test010Schrittweitensteuerung.zip
Donnerstag 03.12.2020
Oft überwiegt das "Machen" bei Übungen. Doch das Finden eines guten Lösungsweges durch intensives Nachdenken ist meistens wichtiger. Dies erklärt die Ausrichtung der heutigen Übung.
KI-Themen
- Heuristiken
- Genetische Optimierung
- Backpropagation-Verfahren
|
Backpropagation -- 75_Echtzeit3/01_NeuronaleNetze/02_Backpropagation
Umsetzung des Backpropagation-Verfahrens -- 75_Echtzeit3/01_NeuronaleNetze/03_Umsetzung
Gradientenverfahren -- 50_Simulationstechnik/05_Parameterindentifikation/01_KleinsteQuadrate/01_Linearregression
Kleinste Quadrate Methode -- 50_Simulationstechnik/05_Parameterindentifikation/01_KleinsteQuadrate/02_Beispiel
Kleinste Quadrate Methode mit Scilab -- 50_Simulationstechnik/05_Parameterindentifikation/01_KleinsteQuadrate/05_Scilab
Heuristiken -- 50_Simulationstechnik/06_Optimierung/02_Heuristiken
Modifiziertes Gradientenverfahren -- 50_Simulationstechnik/06_Optimierung/03_ModifizierteG
Genetische Optimierung -- 50_Simulationstechnik/07_Genalgorithmus
Software-Entwicklungsthemen
- Anwendungsklasse und GUI
- Unterschiede C++ / Java
- Einfache Datentypen bei Java
- Aufbau einer Java-Anwendung
- Modifikatoren
- Klassen / Objekte
- Vererbung
- Schnittstellen
|
36_Java
Datentypen im Java -- 36_Java/01_GettingStarted
Modifikatoren -- 30_Informatik3/07_Modifikatoren
Objektabstraktion -- 30_Informatik3/01_Vom_struct_zur_Klasse/06_Objektabstraktion
Objektfähigkeit -- 30_Informatik3/01_Vom_struct_zur_Klasse/08_Objektfaehigkeiten
UML-Klassendiagramm -- 30_Informatik3/02_UML/02_UML_Klassendiagramm
Konstruktor und UML -- 30_Informatik3/02_UML/03_Konstruktor
Vererbung -- 30_Informatik3/06_Vererbung/01_MesswerteUML
Schnittstellen / Interfaces -- 30_Informatik3/15_Rasterlayout/02_interfaces
Java Native Interface -- 30_Informatik3/14_Zwischenprojekt/03_JNI
ArrayList -- 30_Informatik3/15_Rasterlayout/03_ArrayList
Videos aus der Lehrveranstaltung:
Was ist Backpropagation? -- 02_WS2020_21/02_IE/01_day_by_day/backpropagation.mp4
02_WS2020_21/02_IE/01_day_by_day/v1_entwurf.mp4
02_WS2020_21/02_IE/01_day_by_day/v2_entwurf.mp4
02_WS2020_21/02_IE/01_day_by_day/v3_matmult.mp4
02_WS2020_21/02_IE/01_day_by_day/v4_uebung.mp4
Übung 1
AUFGABE:
Entwickeln Sie Konzepte zur objektorientierten Repräsentation Neuronaler Netze.
Überlegen Sie sich:
- Welche Klassen sollte es geben?
- Was soll in ihnen enthalten sein?
- Welche Datenstruktur eignet sich, um alle Informationen eines NN zu repräsentieren?
- Welche Methoden sollte es in den Klassen jeweils geben?
- Denken Sie voraus: Ist Ihr Entwurf geeignet, auch das Backpropagation-Verfahren implementierbar zu machen?
- Zeichnen Sie UML-Klassendiagramm oder verwenden Sie andere geeignete Darstellungsmethoden, um Ihren Entwurf präsentierbar zu machen.
- Diskutieren Sie die Vor- und Nachteile untereinander (Aufwand bei der Kodierung / Performance / Flexibilität / Transparenz).
|
Übung 2
AUFGABE:
Programmieren Sie ein TicTacToe-Spiel mit Processing
- Überlegen Sie genau, wie Sie eine Anwendungsklasse möglichst gut von der GUI trennen können.
- Überlegen Sie sorgfältig, wie der aktuelle Spielzustand am besten in Form von Daten abgebildet werden könnte.
- Durch abwechselndes Hineinklicken in eines der 9 Felder sollen zwei Personen gegeneinander spielen können.
- Das Spiel soll erkennen, ob ein Zug regelgerecht ist und ob jemand gewonnen hat.
|
AUFGABE (alternativ):
Programmieren Sie ein Pong-Spiel mit Processing
- Überlegen Sie genau, wie Sie eine Anwendungsklasse möglichst gut von der GUI trennen können.
- Verwenden Sie das ganze Fenster als Spielfeld.
- Machen Sie einen Spieler über Mausbewegungen steuerbar, den anderen über Pfeiltasten.
- Denken Sie darüber nach, wie ein neuronales Netz belernt werden könnte, um Pong zu erlernen.
|
ACHTUNG AKTUELL 01.12.2020: BBB-Raum wurde gelöscht! -- Neuer Link (gleicher wie Simulations- und Regelungstechnik) statt des alten in Moodle eingetragen. Bitte nachschlagen!
Donnerstag 10.12.2020
Themen:
- Gemeinsame objektorientierte Implementierung eines flexibel benutzbaren Neuronalen Netzwerks mit Processing
- ÜBUNG: Extrahieren Sie die Gewichte aus dem vorangehenden Projekt für ein optimiertes NN-basiertes Antivalenzgatter, übertragen diese auf das neue System und weisen Übereinstimmung der Ergebnisse nach.
- Gemeinsame Ergänzung des Backpropagation-Verfahrens
- ÜBUNG: Realisierung eines Antivalenzgatters mit der neuen Software unter Anwendung des Backpropagation-Algorithmus'. Variieren Sie auch die Größe und Struktur des Netzes und vergleichen die Güte der erzielten Ergebnisse miteinander.
|
Videos aus Teil 1:
BlueJ, Processing und Libraries 1 -- VIDEO_2020_12_10_08_47_14.mp4
BlueJ, Processing und Libraries 1 -- VIDEO_2020_12_10_08_56_28.mp4
Material zur ersten Übung:
Neuronetz001.zip
Bild 0-2: UML-Klassendiagramm der Klasse Neuronetz aus obigem Sketch.
Musterlösung zu Übung 1:
Vormals entwickeltes optimierendes Netz für Antivalenzgatter. Ergänzung einer Ausgabe der Gewichte im Format für Neuronetz -- Test011Schrittweitensteuerung_fuer_neuronetz.zip
Verwendung der Gewichte aus dem vorangehenden Projekt mit d=1.4 / Nachweis der Übereinstimmung der Ergebnisse --- Neuronetz002.zip
println("Für Neuronetz:");
println("//d="+d[0]);
println("double[][][] w = {");
println(" {");
println(" {"+w[0]+","+w[3]+"},");
println(" {"+w[1]+","+w[2]+"}");
println(" },");
println(" {");
println(" {"+w[6]+","+w[8]+"},");
println(" {"+w[7]+","+w[9]+"}");
println(" },");
println(" {");
println(" {"+w[4]+","+w[5]+"}");
println(" },");
println(" };");
Neuronetz002 LIEFERT (Konsolenausgabe):
in: -1 -1 out:0.49919913641136243 in Testprogramm vorher: 0.49919912471348593
in: -1 1 out:0.5039652060903305 in Testprogramm vorher: 0.5039651950719938
in: 1 -1 out:0.5000185760112115 in Testprogramm vorher: 0.5000185751153124
in: 1 1 out:0.4999772392646055 in Testprogramm vorher: 0.4999772380555142
Code 0-3: Umwandlung der Gewichte aus Test011Schrittweitensteuerung_fuer_neuronetz in das Format von Neuronetz / Konsolenausgabe aus Neuronetz002
Material zur 2. Übung: Neuronetz003.zip
Vorläufige Musterlösung (liefert in den meisten Durchläufen richtige Ergebnisse / kläre noch ob Konditionierungsproblem oder Fehler in Klasse Neuronetz): Neuronetz004.zip
Nachtrag: größeres Netz [2,6,6,1] liefert verläßlich nach dem Belernen richtige Ergebnisse, Lösung war somit in Ordnung: Neuronetz005.zip
Donnerstag 17.12.2020
Themen:
- Beschreibung des Grundprinzips beim Deep-Learning.
- ÜBUNG: Ergänzen Sie im Sketch Neuronetz005 (s.o.) eine Methode, die es erlaubt die Signale im Netz rückwärts zu propagieren. Orientieren Sie sich an der Methode "vorwaertsPropagieren(int vonSchicht, int nachSchicht)". Führen Sie in der Eingangsschicht für das Netz eine Vorwärts-Rückwärts-Propagierung durch, wie sie beim SDA-Verfahren des Deep-Learnings notwendig ist.
- Gemeinsame Ergänzung des Vortrainings-Verfahrens und Test für das Antivalenzgatter.
- ÜBUNG: Implementieren Sie in Processing bis zum 7.1.2021 das Spiel Tic-Tac-Toe so, dass im Wechsel der Benutzer und der Computer einen Zug machen. Der Zug des Computers soll immer der bestmögliche sein. Vergl. Besprechung im Unterricht (Vorberechnete Wahrscheinlichkeiten für den Sieg, erst einmal kein Neuronales Netz!).
|
Link zu Deep-Learning auf kramann.info:
79_Deep_Learning/02_TicTacToe/03_SDA
Neuronetz006_SDA_DeepLearning.zip -- Im Unterricht entstandene noch nicht getestete Implementierung des SDA-Verfahrens.
Hinweise zur "Ferienübung" (Tic-Tac-Toe)
- Entwickeln Sie mehrere aufeinander aufbauende Varianten.
- Die erste Variante soll es zwei Spielern durch abwechselndes Hineinklicken in 9 Felder mit der Maus das Spiel gegeneinander zu spielen.
- Bei der zweiten Variante nimmt der Computer die Position des zweiten Spielers ein und macht regelgerechte Zufallszüge.
- In der dritten Variante spielt der Computer optimal: Er wählt immer den Zug, bei dem für ihn die Gefahr zu verlieren am geringsten ist und im ausgewogenen Fall den Zug, bei dem die Gewinnchancen höher sind.
- Im Unterricht nach den Weihnachtsferien soll dann im Vergleich ein Neuronales Netz so belernt werden, dass es optimal Tic-Tac-Toe spielt.
|
Donnerstag 07.01.2021
Themen
- Tic Tac Toe
- SDA-Verfahren
- Unüberwachtes Lernen
|
Musterlösungen zur "Ferienübung":
TTT001.zip -- Zwei meschliche Spieler können gegeneinander spielen. TTT erkennt gültige Züge.
Bild 0-3: UML-Klassen-Diagramm der Klasse TTT in TTT001. TTT repräsentiert das TicTacToe-Spiel.
TTT002.zip -- Mensch gegen Computer: TTT macht gültige Zufallszüge
Bild 0-4: UML-Klassen-Diagramm der Klasse TTT in TTT002.
TTT003.zip -- Mensch gegen Computer: TTT macht optimale Züge. Berater liefert Wahrscheinlichkeiten. Computerspieler benutzt den Berater zur Auswahl eines Zuges.
Bild 0-5: UML-"Benutzt"-Diagramm: Welche Klasse benutzt welche?
Bild 0-6: UML-Klassen-Diagramm der Klasse TTT in TTT003.
Bild 0-7: UML-Klassen-Diagramm der Klasse Berater in TTT003.
Bild 0-8: UML-Klassen-Diagramm der Klasse Computerspieler in TTT003.
Unterrichtsmaterial
https://de.wikipedia.org/wiki/Selbstorganisierende_Karte
Kohonen102.zip -- Beispielimplementierung Kohonen-Netz
SDA_Bitvergleicher_deeep_003.zip -- SDA-Verfahren, getestete Implementierung, Pretraining ausgeschaltet!
SDA_Bitvergleicher_deeep_004.zip -- SDA-Verfahren, getestete Implementierung, Pretraining läuft!
Bestimmung der Gewinnw. bei Tic-Tac-Toe -- berater.mp4
(Teil-) Musterlösung zur Übung
TTT004_Lernpattern_Speichern.zip
SDA_Bitvergleicher_deeep_005_TTTlernpattern.zip
Lade Lernpattern aus Datei lernpatternXgewinnt.txt
Lernpattern fertig geladen!
Verhalten VOR Backpropagation und VOR Pretraining:
**** TEST ****
FEHLER AKTUELL = 97504.00024508747
Verhalten VOR Backpropagation NACH Pretraining:
**** TEST ****
FEHLER AKTUELL = 54697.41006160564
Verhalten NACH Backpropagation:
**** TEST ****
FEHLER AKTUELL = 16126.029159320402
Code 0-4: Ausgabe
**** NEW ****
kramann.info/etest -- Anleitung zum E-Test / Instruction for e-test
Donnerstag 14.01.2021
Themen:
- Anwendung SDA auf "Tic Tac Toe"
- Rekapitulation der Funktion und Implementierung einer Selbstorganisierenden Karte (Kohonen-Netz / SOM)
- Wiederholung genetische Algorithmen
- Kombination NN und genetische Algorithmen als Beispiel für bestärkendes Lernen
- Fragenbeantwortung zur Prüfung
- Übung (optional): Ein Neuronales Netz lernt ein invertierendes Pendel zu balancieren.
|
(Wieder nur) Teillösungen zum Thema Tic Tac Toe
TTT401_Lernpattern_Berater_bilden.zip -- Erstellen der Lernpattern, die alle Antworten des Beraters abbilden.
TTT402a_NeurspielerTraining_50trainiert.zip -- Trainieren von 50 Lernpattern aus den möglichen 549946.
TTT402b_NeurspielerTraining_500trainiert.zip -- Trainieren von 500 Lernpattern aus den möglichen 549946.
TTT402c_NeurspielerTraining_5000trainiert.zip -- Trainieren von 5000 Lernpattern aus den möglichen 549946.
Kohonen (SOM)
https://de.wikipedia.org/wiki/Selbstorganisierende_Karte
Kohonen102.zip -- Beispielimplementierung Kohonen-Netz
Kohonen104_fertiges_Netz_testen.zip -- Vorgabe von Reizen an eine fertig belernte SOM
Prinzip beim bestärkenden Lernen (Reinforced Lernen) realisiert als Kombination von Genetischem Algorithmus und Neuronalem Netz
Im folgenden soll ein NN lernen in einem sehr primitivem Acade Game die richtigen Bewegungen
auszuführen, um Blöcke, die von oben herabfallen zu fangen.
Belernt wird mit Hilfe eines genetischen Algorithmus.
Das Lernprinzip ist bestärkendes Lernen, da die
beste Strategie nicht bekannt ist, sondern
Fortschritte belohnt werden, bzw. das Überleben in der
nächsten Generation sichern.
img
neuropong.png
Der rote Block fällt herab und soll vom grünen gefangen werden. Der grüne Spieler kann mit jedem Tick ein Feld nach links oder rechts gehen, oder stehen bleiben. Mit jedem Tick fällt ein roter Block ein Feld heiter nach unten.
Neuropong001.zip -- Zufallsspieler
Neuropong002.zip -- Güte eines Spielverlaufs berechnen
Neuropong003.zip -- NN als Spieler. Belernt wird mit immer gleichen Spielverläufen
Neuropong004.zip -- NN als Spieler. Belernt wird mit wechselnden Spielverläufen
Übung
https://www.youtube.com/watch?v=wL7tSgUpy8w -- Autonomes Fahren (als Simulation) mittels Neurnaler Netze und bestärkendes Lernen.
https://www.youtube.com/watch?v=a8Bo2DHrrow -- Details
- Wie bei Neuropong soll ein NN lernen ein invertiertes Pendel zu balancieren.
- Nehmen Sie Neuropong004, sowie den nachfolgenden Sketch, der einen linearen Schwinger in Java simuliert und animiert als Ausgangspunkt.
|
simulation.zip
erklaervideo_reinforced_learning.mp4 -- Erläuterungen zur Übung.
Musterlösung zur Übung:
Neuropendel001_Modell.zip
Neuropendel002_Fehlerfunktion.zip
Neuropendel003_Neuroregler_zufaellig.zip
Neuropendel004_Genetische_Optimierung.zip
Mögliche Klausurthemen
- Neuronales Netz Vorwärts Propagation
- Neuronales Netz Backpropagation
- Fragen zum SDA-Verfahren
- Fragen zum Kohonen-Netz
- Genetische Optimierung (Theorie und Implementierung)
- Gütefunktion nach einer Beschreibung implementieren
- Einen Processing Sketch schreiben
- OOP in Java
|