kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




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

Screenshot des Scilab-Plots zu obigem Skript.

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:
  1. Gemeinsame objektorientierte Implementierung eines flexibel benutzbaren Neuronalen Netzwerks mit Processing
  2. Ü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.
  3. Gemeinsame Ergänzung des Backpropagation-Verfahrens
  4. Ü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
UML-Klassendiagramm der Klasse Neuronetz aus obigem Sketch.

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:
  1. Beschreibung des Grundprinzips beim Deep-Learning.
  2. Ü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.
  3. Gemeinsame Ergänzung des Vortrainings-Verfahrens und Test für das Antivalenzgatter.
  4. Ü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.
UML-Klassen-Diagramm der Klasse TTT in TTT001. TTT repräsentiert das TicTacToe-Spiel.

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
UML-Klassen-Diagramm der Klasse TTT in TTT002.

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.
UML-

Bild 0-5: UML-"Benutzt"-Diagramm: Welche Klasse benutzt welche?

UML-Klassen-Diagramm der Klasse TTT in TTT003.

Bild 0-6: UML-Klassen-Diagramm der Klasse TTT in TTT003.

UML-Klassen-Diagramm der Klasse Berater in TTT003.

Bild 0-7: UML-Klassen-Diagramm der Klasse Berater in TTT003.

UML-Klassen-Diagramm der Klasse Computerspieler 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:
  1. Anwendung SDA auf "Tic Tac Toe"
  2. Rekapitulation der Funktion und Implementierung einer Selbstorganisierenden Karte (Kohonen-Netz / SOM)
  3. Wiederholung genetische Algorithmen
  4. Kombination NN und genetische Algorithmen als Beispiel für bestärkendes Lernen
  5. Fragenbeantwortung zur Prüfung
  6. Ü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