Computer-Kunst mit Google DeepDream[1]

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.

Natürliche Neuronen[2]

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 Nj n Eingaben x1 bis xn. Jede Eingabe wird mit einem festen Gewicht wij multipliziert. Die so gewichteten Eingaben werden summiert und an die Aktivierungsfunktion φ weitergeleitet. Diese aktiviert oj basierend auf ihrem Schwellwert θj.

Künstliches Neuron[3]

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.

Künstliches Neuronales Netz als Graph[4]

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.

Beispiel Im untentstehenden Schema wird das Lernverfahren des in Aufgabe 1 verwendeten – in Java programmierten – Neuronalen Netzes dargestellt:

Back Propagation[5]

Die zum Lernen verwendeten Daten (x,d) bestehen aus dem Input x und dem gewünschten zugehörigen Output d. So kann man den Output y des Neuronalen Netzes vergleichen mit dem gewünschten Output d. Aus diesem Vergleich berechnet man einen Fehler-Wert (Fehler 1: Anzahl falsch klassifizierte Elemente, Fehler 2: Abstand der Elemente zum gewünschten Ort im Quadrat (dy)2). Nun werden die Gewichte w und Schwellwerte des Neuronalen Netzes leicht angepasst. Der neue Output wird wiederum mit dem gewünschten Ergebnis verglichen und dieser Vorgang wird wiederholt. Die Lernrate μ beeinflusst die Stärke der Anpassung der Gewichte pro Lernschritt. Die Anzahl w bestimmt die Anzahl Neuronen und somit das Aussehen und die Komplexität des Neuronalen Netzes.

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.


  1. http://googleresearch.blogspot.de/2015/06/inceptionism-going-deeper-into-neural.html ↩︎

  2. https://commons.wikimedia.org/wiki/File:Neurons_big1.jpg?uselang=de ↩︎

  3. https://commons.wikimedia.org/wiki/File:ArtificialNeuronModel_deutsch.png?uselang=de ↩︎

  4. https://de.wikipedia.org/w/index.php?title=Datei:Multi-Layer_Neural_Network-Vector.svg&lang=de ↩︎

  5. Bild von Ralf Kretzschmar ↩︎