Neuronale Netze - Kurzfassung und Java-Quelltext

Mit dem aktuelle Trend in der Automobilindustrie des "autonomen Fahrens" haben auch neuronale Netze neues Interesse gefunden. Sie orientieren sich am Gehirn des Menschen, d.h. mehrere Eingaben werden gewichtet mit einer Aktivierungsfunktion als Ausgabe bereitgestellt, und das ganze in einem Netz mit mehreren Schichten, wobei es eine Eingabe-, ggf. Zwischen- und eine Ausgabeschicht gibt. Bei ([vonR08], Kap. 5.3) wird das Beispiel von der Erkennung vier verschiedener zweidimensionaler Bilder gezeigt. Ziel der Einstellung eines neuronalen Netzes ist, zu jeder Eingabe aus Testdaten genau die Ausgaben zu erhalten, um die Eingabe zu klassifizieren, z.B. diese Eingabe ist wahrscheinlich Bild 2, eine andere Bild 3. Man stellt in der Trainingsphase die Gewichte anhand der Trainingsdaten ein und kann dann in der Testphase anhand bisher unbekannter Eingabedaten entscheiden, welcher der bekannten Bilder diesem am Ähnlichsten ist.

Modell

An der Eingabeschicht liegen die Eingabewerte binär als 0 oder 1 an. Die Ausgabe wird an die nächste Schicht als Eingabe weitergeleitet. Zwischenschichten dienen der Verarbeitung von mehreren Eingaben in Ausgaben. Die Ausgabeschicht gibt das Ergebnis wieder, z.B. eine Reihe von Werten zwischen 0.0 und 1.0 für die Klassifikation. Die Architektur bestimmt die Anzahl der Schichten, die Anzahl der Neuronen einer Schicht. Der Zustand ist der Wert der intern gespeicherten Gewichte g.

Hebb'sche Regel

Es gibt keine Zwischenschichten. Für Gewichte gilt beim Lernen(e Eingabe, a Ausgabe, L Lernrate z.B. 0,25):
gi := gi + L * ei * a

Backpropagation

Reale Netze haben Zwischenschichten. Dazu berechnet man das Netz von den Eingaben zu den Ausgaben vorwärts, bestimmt dann die Soll/Ist-Differenz in der Ausgabeschicht und bestimmt pro Neuron den backpropagation-Wert(dpb):
dbp(n) = f'(summe_g) * g(soll - ist), für Ausgabeschicht
dbp(n) = f'(summe_g) * summe_aller_nachfolger_m_von_n(dbp(m) * g(n_m)), für Zwischenschichten
f' ist die Ableitung der Aktivierungsfunktion, g die Fehlerfunktion. Die Gewichte lassen sich anpassen:
gi := gi + L * ei * dbp(i)

Aktivierungsfunktion

Bei ([vonR08], Kap. 5.3) wird die Identitätsfunktion f(x) = x verwendet.
Bei ([Rash17], Kap. 1) wird die Sigmoidfunktion f(x) = 1 / (1 + e-x) verwendet, welche für sehr große negative x gegen 0.0 und für sehr große x gegen 1.0 geht.

Fehlerfunktion

Bei ([vonR08], Kap. 5.3) wird Fehlerfunktion delta = (soll - ist) verwendet.
Bei ([Rash17], Kap. 1) wird Fehlerfunktion delta = (soll - ist)2 mit Gradientenabstieg empfohlen.

Lernrate

Bei ([vonR08], Kap. 5.3) wird Lernrate=10% verwendet
Bei ([Rash17], Kap. 2 S. 154f.) wird Lernrate=20% bis 30% empfohlen.

Ein Beispielprogramm mit java

Bietet wie ([vonR08], Kap. 5.3) das Erkennen von binären Mustern.
Einfaches Modell eines neuronales Netzes
Lernmöglichkeit mit Bildern, Quadraten und mnist-Daten von Ziffern
Eigenschaftswerte fuer den Algorithmus
Da es vier bekannte Bilder gibt, besteht die Ausgabeschicht aus vier Neuronen, wobei in den Ausgängen nur einmal 1 vorliegen soll, sonst 0. Beim Erkennen von Quadratzahlen gibt es zwei Ausgangsneuronen, erstes bedeutet, Eingabewerte sind keine Quadratzahl, zweites schon. Bei den mnist-Daten gibt es zehn Klassen von Ziffern, welche an der Ausgabeschicht stehen. Es gibt nur eine Zwischenschicht, die Lernkapazität der verborgenen Schicht wird als Maximalwert von Eingangs- und Ausgangsschicht bestimmt.
Quellen (gelesener und empfehlenswerter Bücher)
KürzelAutor TitelVerlag
[vonR08]Makus von RimschaAlgorithmen kompakt Springer Verlag Berlin-Heidelberg, 3. Auflage 2008
[Rash17]Tariq Rashid Neuronale Netze selbst programmierenO'Reilly Verlag, 1te Auflage 2017