Als Beispiel für deep learning schauen wir uns künstliche Neuronale Netze an. Meist haben wir hier direkte Eingaben, z.B. die Pixel eines Bildes. Das Verfahren übernimmt sozusagen die feature extraction, also – um auf Heinz-Willhelm zurückzugreifen – die Vermessung der Pilze.
Hat man eine Anzahl Neuronen welche miteinander verknüpft sind und die als Teil eines Nervensystem einen funktionalen Zusammenhang bilden, so spricht man von einem Neuronalen Netz.
Neuron
Neuronen werden von anderen Neuronen über ihre Synapsen elektrisch stimuliert. Je nachdem wie das Neuron eingestellt ist, reagiert es auf diese Stimulationen indem es selbst aktiviert wird, d.h. es stimuliert nun seinerseits andere Neuronen.

In der Informatik versucht man die Neuronen nachzubauen und erstellt so ein Künstliches Neuronales Netz.
Künstliches Neuron
Das künstliche Neuron versucht die Funktionsweise des natürlichen Neurons nachzubauen. Dabei erhält das Neuron

Künstliches Neuronales Netz
Ein neuronales Netz kann als Graph dargestellt werden. Dabei unterscheidet man verschiedene Schichten (Layers). Jedes neuronale Netz hat eine Eingabe- und eine Ausgabeschicht. Je nach Komplexität des gewünschten Einsatzes bestehen diese aus mehr oder weniger Neuronen. Dazwischen liegen die verborgenen Schichten (hidden layers). Was dort geschieht interessiert uns nicht! Die Idee ist, dass man in der Eingabeschicht etwas eingibt und das Resultat bei der Ausgabeschicht ablesen kann.

Den Kanten des Graphen kann man Gewichte zuweisen. Jede Verbindung zwischen den Neuronen besitzt so ein Gewicht. Die Gewichte sind das Langzeitgedächnis des Neuronalen Netzes: Sind sie einmal korrekt eingestellt, so kann das Neuronale Netz verwendet werden.
Die Neuronen der Eingabeschicht sind keine eigentlichen Neuronen. Sie werden direkt durch die Eingabewerte aktiviert und besitzen weder Aktivierungsfunktion noch Schwellwerte.
Beispiel
Logikgatter (z.B. «OR», «AND» und «XOR») lassen sich mit demselben neuronalen Netz bestehend aus vier Neuronen realisieren. Die unterschiedlichen Funktionen entstehen nur durch andere Gewichte und Schwellwerte.
Die folgende interaktive Grafik beschreibt ein mögliches solches Netz mit einer vorgegebenen Konfiguration bestehend aus fünf Gewichten zwischen den Neuronen und zwei Schwellwerten bei den Neuronen welche eine Aktivierungsfunktion haben.
Die Neuronen true.
Aufgabe
Neuronales Netz für die logischen Funktionen «OR», «XOR», «AND» und «NAND».
- Teste das obenstehende Neuronale Netz aus, indem du alle möglichen Eingabe-Kombinationen durchspielst. Welche logische Funktion wird in der gegebenen Konfiguration implementiert?
- Finde Gewichte und Schwellwerte für die restlichen 3 logischen Funktionen.
Lernen
Es gibt mehrere Arten ein Neuronale Netz zu trainieren. Dabei werden die Gewichte zwischen den Neuronen und die Schwellwerte der Aktivierungsfunktion so angepasst, dass das Netz den gewünschten Output liefert.
Am einfachsten ist das Überwachte Lernen. Dabei wird dem Künstlichen Neuronalen Netz ein Eingabemuster gefüttert und die aktuelle Ausgabe wird mit dem gewünschten Resultat verglichen. Nun können die Gewichte und Schwellwerte angepasst werden, bis die Ausgabe dem gewünschten Resultat entspricht.
Im untentstehenden Schema wird das Lernverfahren mittels Back Propagation eines Neuronalen Netzes dargestellt:

Die zum Lernen verwendeten Daten
Beim Bestärkenden Lernen ist das Resultat nicht genau bekannt, es kann aber bewertet werden. So kann z.B. einem Roboter einen Auftrag erteilt werden, den dieser selbständig lösen kann. Das Ergebnis oder Zwischenschritte werden bewertet und die Intelligenz kann so gestärkt werden.
Es ist sogar möglich, ein Künstliches Neuronales Netz durch Unüberwachtes Lernen zu trainieren. Dabei verändert sich das Neuronale Netz entsprechend dem Eingabemuster von selbst. Das wird z.B. für «Clustering» verwendet: Die Eingabedaten werden untersucht und in verschiedenen Cluster abgelegt, so dass ähnliche Eingaben auf demselben Cluster landen.
Training mit Reinforcement Learning
ReadySetPython hat ein Python-Programm geschrieben, wo Autos eine Strecke abfahren müssen. Dabei können wir als Benutzer jeweils die besten Autos auswählen (belohnen) und aus diesen eine neue Generation generieren lassen.

Aufgabe
Schau dir die beiden Videos an. In den Teams-Dateien des Kurses findest du eine für Mac angepasste ZIP-Datei mit dem Python-Programm. Das Original kannst du von diesem Github-Repo herunterladen.