Neural Network: Technische Details
- Struktur: 400 - 20 - 10
Das Input-Layer (Eingabefeld) hat 400 Neuronen. In diesem Fall gleichbedeutend mit der Zahl der Pixel. (20 x 20)
Das Hidden Layer (in diesem Netzwerk gibt es nur eins - es könnten aber mehrere sein) hat 20 Neuronen (der senkrechte Streifen rechts neben dem Eingabefeld)
Das Output Layer hat 10 Neuronen (der Streifen ganz rechts)
Der Output wird ausgelesen und in eine Klarzahl übersetzt. Die Kodierung ist einfach: oberstes Feld schwarz bedeutet Null, zweites Feld schwarz bedeutet Eins usw.
Wie man sieht, ist die Antwort nie völlig eindeutig. Der Output sagt beispielsweise: "10% eins, 30% drei, 15% sechs, 45% neun". Es wird diejenige Zahl mit dem höchsten Wert ausgesucht.
- Aktivierungsalgorithmus: Jedes Neuron erhält seinen Input vom vorhergehenden Layer. Der Aktivierungsalgorithmus bestimmt, wie der Input sich auf die Aktivierung des Neurons auswirkt. Hier gibt es verschiedene Möglichkeiten:
Sigmoid: Die Aktivierung des Neurons wird auf einen Wert zwischen 0 und 1 komprimiert.
Man merkt, dass dieses Verfahren eng an die Natur angelehnt ist: Ein Neuron kann entweder feuern oder nicht - vergleichbar mit null und eins.
Relu: negative Werte werden abgeschnitten. Alles was über null ist, wird so genommen wie es ist. Das erspart Rechenschritte.
Auch hier gibt es noch die Parallele zur Natur: ein Neuron in der Natur kann schließlich keine negative Aktivierung haben.
Mein Netzwerk benutzt keinen Aktivierungsalgorithmus. Das heißt, jeder Input wird genau so übernommen, wie er auf das jeweilige Neuron trifft, auch wenn er negativ ist.
Nach meiner Erfahrung wird dadurch die "magische" Arbeitsweise des Netzwerks nicht gestört. Ich habe eher den Eindruck, dass durch die Erweiterung des Zahlenraums und die Einsparung von Berechnungen die Leistungsfähigkeit erhöht wird.
- Momentum: 0.1
Dieser Wert ist gewissermaßen der Nachdruck, mit dem Korrekturen durchgesetzt werden. Das "Eintrichtern" der Lerninhalte heißt "Backpropagation". Die Backpropagation benutzt das Momentum als Faktor, mit dem die Korrektur multipliziert wird.
Bei meinen Testläufen ergab dieser niedrige Wert die besten "Lernkurven".
Ein höherer Wert (Maximum: 1) prägt das aktuell zu lernende Muster deutlicher ein. Offenbar kann das auf Kosten der bereits gelernten Muster gehen.