Seitenanfang

Ein einfaches neuronales Netz

Im ersten Teil ging es um die Zielsetzung: Ein ohne viel Vorbildung selbstgemachtes neuronales Netz soll lernen, Wörter von sinnlosen Buchstabenkombinationen zu unterscheiden. Dazu wird jedes Eingabewort nach verschiedenen Kriterien in insgesamt 2244 Zahlenwerte zerlegt. Weiter geht es mit dem lernenden Teil, in dem die künstliche Intelligenz entstehen soll.

Neuronen sind Herdentiere

Ein neuronales Netz basiert auf mehreren Neuronen in jeder Ebene. Das einfachste denkbare neuronale Netz besteht aus nur einer Ebene, aber mit mehreren übereinander liegenden Ebenen lassen sich auch komplexe Ziele erreichen.

Für diesen Anwendungsfall reicht eine Ebene in der mehrere identische Neuronen zum Einsatz kommen. Davor liegt der im ersten Teil beschriebene Input - Layer und dahinter wird ein Output - Layer die Ergebnisse zusammenfassen.

Wie sieht so ein Neuron aus?

Der Eingangslayer behandelt unterschiedliche Aspekte jeden Wortes individuell: Länge, Buchstabenhäufigkeit, Positionen, etc. werden nach getrennten Regeln analysiert. Für das Neuron entfällt diese Unterscheidung: Jetzt besteht das ursprüngliche Wort nur noch aus 2244 einzelnen, vollkommen gleichberechtigten Attributen.

Zu jedem Attribut gibt es ein Gewicht, mit dem seine Relevanz für das Gesamtergebnis beschrieben wird. Diese Gewichte werden im Lernprozess bis hin zu einem (hoffentlich) sinnvollen Ergebnis verfeinert. Ihre Startwerte werden zufällig bestimmt.

Ein Beispiel

Nehmen wir kurz an, die Länge des Wortes wäre ein einzelnes Attribut und die Vorkommen des Buchstaben "T" ein zweites. Die Länge wird dabei mit 2 gewichtet und die Anzahl der "T"s mit 5.

Für das Wort "Otto" wäre die Länge 4 und die T-Anzahl 2. Multipliziert mit dem jeweiligen Gewicht ergibt sich:

Attribut 1 (Länge): Wert 4 * Gewicht 2 = 8

Attribut 2 ("T"): Wert 2 * Gewicht 5 = 10

"Otto" hätte am Ausgang des Neurons damit den Wert 18.

Die Länge des Wortes "Neuronen" ist 6, es enthält aber kein "T", so dass sich folgende Rechnungen ergeben:

Attribut 1 (Länge): Wert 6 * Gewicht 2 = 12

Attribut 2 ("T"): Wert 0 * Gewicht 5 = 0

Das "Neuron" hätte damit einen Endwert von 12.

Lernprozess

Bildschirmfoto vom 2018-04-11 20-15-01.pngSo werden alle 2244 Attribute mit ihrem jeweiligen Gewicht multipliziert. Am Ende ergibt sich ein zusammenfasster Wert, der eine Aussage über die Eingangsdaten treffen soll: Handelt es sich um ein Wort oder um Müll.

Mein Netz arbeitet mit positiven und negativen Gewichten im Bereich von -100 bis +100. Ein Gesamtwert >0 steht für ein echtes Wort und <0 für Müll. Genau 0 wäre ein "unbekannt", aber das habe ich bei meinen Tests noch nie erlebt.

Im Training bekommt das Netz ein Wort vorgegeben, welches es bewertet. Zu diesem Wort ist bekannt, ob es echt oder Müll ist. Liegt das Neuronale Netz mit seiner Einschätzung falsch, d.h. es erkennt ein echtes Wort nicht oder deklariert Müll als ein echtes Wort, wird das Neuron ausgesucht, was am wenigsten falsch lag. Dieses verändert seine Gewichte ein klein wenig, um beim nächsten Mal nicht den gleichen Fehler zu wiederholen. Geändert werden jeweils nur die Gewichte, die zum falschen Ergebnis beigetragen haben.

Das Neuron von eben würde sich über "TTTTT" als Eingabe sehr freuen: Attribut 1 (Länge) ergibt 10 und die T-Anzahl sogar 25. Da es sich dabei aber um kein gültiges Wort handelt, könnte das Neuron das Gewicht für "T" von 5 auf 4,9 senken. Über die große Menge der Trainingsdaten stellen sich damit nach und nach Gewichte ein, die in der individuellen Kombination eines Neurons zusammen zu einer verlässlichen Aussage führen, ob ein Wort echt ist oder nicht.

Würden alle Neuronen gleichzeitig trainiert werden, dann würden sich alle im Laufe der Zeit einander annähern. Genau das möchte ich aber vermeiden, damit das Netz auch unterschiedliche Muster erkennen kann. Einzelne Neuronen dürfen, ja sollen sogar, falsch liegen solange das Gesamtergebnis stimmt.

Output - Layer

Die Zusammenführung der Ergebnisse aller Neuronen erfolgt ganz einfach demokratisch: Jedes Neuron steuert sein Ergebnis bei und am Ende siegt die Mehrheit.

Anwendung des Wissens

Ist das neuronale Netz einmal trainiert, d.h. hat jedes Neuron passende Gewichte für jedes Attribut ermittelt, kann ein beliebiges unbekanntes Wort durch das Netz geschickt werden. Am Ende steht dann eine Aussage, ob es sich vermutlich um ein echtes Wort handelt oder nicht.

Im letzten Teil gibt es den Quellcode zum Experiment...

 

Noch keine Kommentare. Schreib was dazu

Schreib was dazu

Die folgenden HTML-Tags sind erlaubt:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>