Das Lotto-Zahlenfeld
LIN 8080
In einer Matrix stehen all die Werte, die für ein Neuron wichtig sind. Dazu bedient man sich der Mathematik, da man ja meist weitere Berechnungen vornehmen möchte und das alles in einem Computerprogramm verarbeiten will. Zu Beginn ist diese Matrix meist leer (enthält nur 0), manchmal wird sie auch mit Zufallszahlen gefüllt. Nach dem ersten Beispieldurchlauf könnte sie etwa so aussehen.
-0,05 -0,05 -0,05 +0,10 +0,25 +0,25 +0,10 -0,05 -0,05 -0,05 +0,10 +0,20 +0,20 +0,10 -0,05 -0,05 +0,10 +0,10 +0,10 -0,05 -0,05 +0,10 +0,10 +0,10 +0,25 +0,10 -0,05 +0,10 +0,25 +0,20 +0,20 +0,10 +0,10 -0,05 +0,10 +0,20 +0,25 +0,10 -0,05 -0,05 -0,05 +0,20 +0,25 +0,20 +0,10 +0,10 +0,20 +0,20 +0,20
Normal wird dazu programmtechnisch eine Schleife verwendet, die diese Werte in einem Array ablegt. Die Zahlen stehen für das Gewicht einer Zelle (Formelzeichen w, von engl. weight) und als Schleifenzähler dient wie üblich ein i. Auch üblich ist, die Elemente einer Matrix mit m, n für m Zeilen und n Spalten sowie i, j für die Zahlen zu verwenden. Im Beispiel sind m und n = 7,7. Für Programme gilt aber die 0 als Zahl, man muss dann jeweils (-1) beachten (so wird i, oder j = 0, 1, ..., 6). Anstelle von a(i,j) könnte a(2,5) sein, also die Zahl in der 2. Zeile und in der 5. Spalte.
Damit hätte man ein Netzwerk, eine Gewichtsmatriz und 49 Neuronen (die bislang noch nichts machen). Die Gewichtsmatrizen stehen für die Synapsen, die an Nervenbahnen angeschlossen sind, welche zum Neuron führen. Wie beim Vorbild wird ein Neuron durch diese synaptischen Signale gereizt, und ab einer gewissen Reizstärke gibt das Neuron ein Signal weiter; es feuert, wie man sagt. Das wäre auf dem Computer eine Outputmatrix, die nun über eine oder mehrere Synapsen an die verbundenen Neuronen weitergeleitet wird.
In der Praxis werden Daten manipuliert, indem man die Zahl der Folgeneuronen reduziert und so eine Umcodierung der Daten erzwingt. Genau dazu gibt es verschiedene Möglichkeiten, und in Zukunft wird sich hier noch einiges weiter entwickeln.
Zunächst wird im Lotto Beispiel eine neue Ebene von Neuronen eingeführt, um die Daten weiter zu verarbeiten. Um diese Daten zu bekommen, muss die vorherige Schicht erstmal einen Output haben, dazu gehört natürlich eine Output Formel. Dann soll unsere neue Schicht weniger Neuronen haben, damit da auch mal was mit den Daten geschieht. Doch wie wird eine sinnvolle Weiterleitung erstellt?
In einem Neuronalen Netz sollen nun alle Zellen mit allen Zellen verbunden sein. Das ist natürlich ein ganze Menge an Verbindungen, die an sich nicht nötig sind und letztlich nur die Rechenzeit erhöht. Daher wird gekürzt und jede Zelle der ersten Schicht nur mit ihrer Nachbarzelle verbunden. Die Randzellen erhalten eine Verbindung zu den gegenüberliegenden Zellen. Über diese Verbindungen können nun die Werte der Nachbarzellen miteinander verglichen werden.
Als weitere Verbindung zu den Neuronen der zweiten Schicht wird eine Diagonale eingeführt. Damit werden die Daten umcodiert. Die Zellen können zeilen- und/oder spaltenweise miteinander verbunden werden. Wie auch immer, man kann die Zellen auf verschiedene Weise zusammenfassen, um deren Anzahl zu reduzieren. Wichtig dabei ist, alle Zellen gleichwertig zu behandeln.
Die nebenstehende Lösung rediziert 49 Zellen der ersten Schicht auf 7 Zellen der zweiten Schicht, oder 2x7 Zellen, um Zeilen und Spalten gesondert zu erhalten. Damit kann ein Neuron aus Schicht 2 gleich drei Ausgabematrizen ermitteln. Zur Unterscheidung kann das als Vektor A = (x y z) notiert werden. Und das lässt sich auch gut zwischenspeichern.
Für weiteres Vorgehen benötigt man Formeln. Die erste Aktion des Neurons soll darin bestehen, seine Synapsen zu manipulieren. Es wird ein Durchschnittswert aus den Gewichten der angrenzenden Zellen berrechnet. Für Zelle 1 sind das die Werte der Zellen 2, 8, 9, 43, 44, 7, 14, 49. Das ergibt eine Summe, die durch 8 geteilt wird. Es lässt sich auch die Zelle 1 mit einbeziehen, dann wird durch 9 geteilt. Und so geht das mit 49 Zellen, es entsteht eine neue Matrix, mit der die bisherige einem Update unterzogen wird, d.h. sie wird subtrahiert. So bleiben die Zahlen unter +1, eine Prüfung sollte aber trotzdem stattfinden. Für Zelle 1 sind das etwa eigener Wert - 0,65 = -0,7 und das geteilt durch 8 macht -0,0875. Neuer Wert der Zelle 1 ist somit -0,5875.
Man kann diesen Schritt vorerst noch weglassen, das Netz wird damit nicht lernfähig. Man kann ein Update mit einer Randomzeit Funktion verbinden, dann wird jede Zelle zufällig irgendwann ein Update ausführen. Man sollte aber beachten, dass für ein Update der Zelle 2 der Richtige (nach obigem Beispiel -0,5 und nicht -0,5875) Wert verwendet wird. Dieser Schritt wird hier nur eingeschoben, um eine weitere Matrix zu erhalten, die eine etwas eingehendere Beschäftigung mit Neuronalen Netzten erfordert. Vielleicht gibts dazu noch einen extra Artikel.
Als zweites muss das Neuron eine Outputmatrix berechnen. Die wird in zwei Versionen, für Zeilen und Spalten, ermittelt. Es ist wieder eine Summe, für Zelle 1 (+ 2 3 4 5 6 7) und (+ 8 15 22 29 36 43). In Zahlen sind das für die Zeilen +0,55 und für Spalten +0,65. Um die Zahlen klein zu halten, werden diese Werte wieder gemittelt, also durch 7 geteilt. Der Outputvektor von Zelle 1 ist damit A01 = (-0,0875 +0,0785 +0,0928) und steht für (Update, Zeilen, Spalten). Das geschieht nun mit allen Neuronen, und damit wurde das Wissen von 49 Neuronen auf 7 Neuronen reduziert.
Wegen der Zeilen- und Spaltentrennung lässt sich jederzeit wieder ein normales Lottofeld mit 49 Werten füllen. Die sind dann als Vorhersage zu deuten. ;)