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 (KNN).
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.
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 KNN 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.
Das Einstiegsbild diese Kapitels ist übrigens das Ergebnis eines Neuronalen Netzes welches mit ganz vielen Bildern trainiert wurde. Mehr dazu im Abschnitt zu Generativer KI.
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.
http://googleresearch.blogspot.de/2015/06/inceptionism-going-deeper-into-neural.html ↩︎
https://commons.wikimedia.org/wiki/File:Neurons_big1.jpg?uselang=de ↩︎
https://commons.wikimedia.org/wiki/File:ArtificialNeuronModel_deutsch.png?uselang=de ↩︎
https://de.wikipedia.org/w/index.php?title=Datei:Multi-Layer_Neural_Network-Vector.svg&lang=de ↩︎
Bild von Ralf Kretzschmar ↩︎