publish and discover academic work ...

Einfache Realisierung von neuronalem Netz mit JavaScript

Hallo Acadopuser,

heute möchte ich ein sehr interessantes Thema besprechen, das auf dem Acadopus schon ein paar Mal erwähnt wurde, aber kein einfaches Beispiel gebracht wurde. Ich möchte mit Ihnen zusammen Schritt für Schritt ein kleines neuronales Netzt implementieren, das in der Lage ist zwei Buchstaben zu erkennen. Einfacher halbe habe ich die Buchstaben A und B genommen.

Allerdingst möchte ich sofort betonen, dass dem Netzt völlig egal ist, welche Buchstaben das sind, A und B habe ich einfach in Bezeichnung für Buttons und Ausgabe hartkodiert. Wenn Sie den Quelltext ein bisschen anpassen, können Sie gerne andere Buchstaben nehmen. Das müssen sogar uberhaupt keine Buschstaben sein, sonders zwei beliebiges Zeichen, d.h. z.B. zwei Zahlen, oder „+“ und „-“ usw.
Fangen wir an.

Theorie


Wir erstellen ein neuronales Netzt das Perzeptron heißt. Das ist eigentlich die einfachste Variante eines Netzes. Das Netzt sieht wie folgt aus:



Jeder Kreis auf dem Bild ist ein Neuron. Er hat einen oder mehrere Eingange. Die Neuronen, die in erster Schicht stehen rechnen nichts. Ihre Aufgabe ist es einfach einen Parameter aufzunehmen und weiterzuleiten. In der zweiten Schicht befindet sich genau einen Neuron, der als Eingabe die Ausgaben von Neuronen aus der ersten Reihe hat. Genau dieser Neuron trifft die Entscheidung, welcher Buchstabe angegeben wurde.

Damit Sie besser verstehen, wie das alles funktioniert, führe ich das folgende Beispiel ein. Angenommen Sie sind ein General. Sie haben mehrere Soldaten, bei jedem Soldat fragen Sie regelmäßig ob der Feind kommt. Merkwürdigerweise bekommen Sie von verschiedenen Soldaten verschiedene Antworten, z.B. 30 % spricht ja, der Feind angreift und die anderen 70% sprechen nicht, sie sehen keinen Feind. Was werden Sie in diesem Fall machen, Sie sollen doch anhand von Antworten eine Entscheidung treffen?

Eine Lösung wäre einfach zu sagen, dass die Mehrheit gewinnt. Diese demokratische Vorgehensweise wird aber ganz schlechte Ergebnisse liefern, da wie die Erfahrung zeigt, gibt es viele Soldaten, die so faul sind, dass sie einfach eine zufällige Antwort geben.

Die andere Lösung wäre zu merken, wie oft jeder einzelner Soldat richtige Antwort gibt. Je öfter das passiert, desto zuverlässiger der Soldat ist und umgekehrt. Um diese wichtige Eigenschaft zu berücksichtigen, geben wir jedem Soldat einen Parameter, der zeigt wie wichtig seine Antwort ist. Das ist so zu sagen „Gewicht“ des Soldaten. Auf diese Weise kann das passieren, dass ein „guter“ Soldat viele „schlechte“ überwiegt.

In Wirklichkeit ist das nicht so, wie ich erzählt habe, aber schon ganz nah.

Die Neuronen aus der erster Reihe sind die Soldaten, die bekommen eine Information und geben weiter. Die „w“ sind die Gewichte, die der Soldat hat. Jeder Soldat liefert eine „1“ oder „-1“. Der resultierende Antwort vom Soldat ist dann w x Antwort. Wir summieren diese gewichteten Antworten und bekommen eine Summe. Falls die Summe groß genug ist(d.h. wir führen eine Grenze ein, ab der wir glauben, dass wir den Antworten glauben), sagen wir dass der Feind angreift, sonst nicht angreift.
Mit mathematischen Ausdrücken sieht das Gesagte so aus:



Hier ist die S unsere Summe, x ist Antwort eines Soldaten, w seine Wichtigkeit und T die Grenze ab der wir überhaupt an die Antworten glauben. Falls die Summe positiv ist, d.h. die Grenze ist überschritten, kommt der Feind:



Laut der Formel entspricht die Entscheidung des Generals „Feind kommt“ der eins und „nicht kommt“ der minus eins.

Praxis



Zurück zu Buchstaben.
Wir malen einen Buchstaben:



Den Buchstaben sollen wir zuerst bearbeiten. Wir teilen das ganze rosa Feld in Bereichen, die 4x4 Pixel groß sind. Wenn in diesem Bereich ein schwarzes Pixel ist, machen wir den ganzen Bereich schwarz, sonst bleibt er weiß:



Jeder diesen Bereich ist ein Eingangssignal für unser Netz. Wenn der Bereich schwarz ist, ist x 1, sonnst -1. Die Gewichte von allen Signalen sind am Anfang gleich. Wir sollen jetzt irgendwie bestimmen, wie wichtig jedes Signal ist. Dafür zeigen wir dem Netz einen Buchstabe, das Netz rechnet uns sein Ergebnis. Wenn das Ergebnis richtig ist, machen wir nichts. Falls das Netzt Fehler gemacht hat, verraten wir ihm das richtige Antwort( auf Button „das ist A“ oder „das ist B“ klicken). Das Netzt soll dieses Hinweis so berücksichtigen, dass die Gewichte von Neuronen und die Glaubengrenze angepasst werden.
Dafür nehmen wir die folgende Formeln:




Hier ist a ein Parameter zwischen 0 und 1, der zeigt, wie groß die Anpassung an Gewichten ist. E ist die richtige Antwort, y ist die Antwort des Netzes.
Noch mal die Vorgehensweise. Sie malen im Feld entweder A oder B. Klicken auf „Rechnen“ Im Feld unten wird das bearbeitende Bild angezeigt und noch niedriger die Antwort. Falls die Antwort richtig ist, klicken Sie „leeren“ und malen noch mal. Falls die Antwort falsch war, müssen Sie dem Netzt die richtige Antwort sagen. Dann das Eingabefeld mit „leeren“ aufräumen und die nächste Runde machen. Ungefähr nach 10-12 Eingaben werden Sie merken, dass das Netz schon richtig gut ist.
Auf dem großem Feld werden Sie sehen, welche Pixel welche Gewichte haben. Die rote Pixel erkennen A und die grüne B. Die Felder mit nullen sind unsere „faule“ Soldaten, deren Meinung wir einfach nicht berücksichtigen können.

Da unser Netzt sehr einfach ist, kann es nur zwei Zeichen unterscheiden, die große Unterschiede haben. Z.B. das Netzt kann einfach nicht zwischen Z und 2 unterscheiden, da die Zeichen sehr ähnlich sind.
Viel Spaß damit!

  • memento memento,
  • 08 März 2013, 23:26
  • 1

Kommentare (0)

RSS zusammenklappen / ausklappen

Kommentar schreiben

Ihr Name
Sie sind ein Gast, Sie dürfen keine HTML-Tags verwenden
Bitte geben Sie die Zeichen in das folgende Feld ein