MemBrain

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

MemBrain

MemBrain ist ein leistungsstarker graphischer Neuronale Netze Editor und Simulator für Microsoft Windows, der Neuronale Netze von beliebiger Größe und Architektur unterstützt (siehe www.membrain-nn.de).

MemBrain ist für den privaten und für den nichtkommerziellen Einsatz (z.B. an Universitäten zur Lehre) kostenlos. Dabei gibt es keine Einschränkungen in der Funktionalität.


Weitere Informationen zur Installation etc. sind im internen Bereich zu finden.


Neuronale Netze beziehen sich auf das Neuronennetz des menschlichen Gehirns. Dieses dient als Analogie und Inspiration für in Computern simulierte künstliche neuronale Netze.

Neuronale Netze bestehen aus mehreren Neuronen. Diese Neuronen werden auch als Units, Einheiten oder Knoten bezeichnet. Sie dienen dazu, Informationen aus der Umwelt oder von anderen Neuronen aufzunehmen und an andere Units oder die Umwelt in modifizierter Form weiterzuleiten.

Man unterscheidet zwischen 3 verschiedenen Arten von Neuronen:

Schematische Darstellung eines neuronalen Netzes: NN Schema.png

Unit red input.png Input-Units: Units, die von der Außenwelt Signale (Reize, Muster) empfangen können.

Unit yellow hidden.png Hidden-Units: Units, die sich zwischen Input- und Output-Units befinden und eine interne Repräsentation der Außenwelt beinhalten.

Unit green output.png Output-Units: Units, die Signale an die Außenwelt weitergeben.

"Übereinander" angeordnete Knoten fasst man als Schicht bzw. Layer zusammen. Units sind miteinander durch Kanten verbunden. Die Stärke der Verbindung zwischen zwei Neuronen wird durch ein Gewicht ausgedrückt. Je größer der Absolutbetrag des Gewichtes ist, desto größer ist der Einfluss einer Unit auf eine andere Unit. Das Wissen eines neuronalen Netzes ist in seinen Gewichten gespeichert.

Lernen wird bei neuronalen Netzen zumeist als Gewichtsveränderungen zwischen den Einheiten definiert. Wie die Gewichtsveränderung genau erfolgt ist abhängig von der verwendeten Lernregel.

Bei neuronalen Netzen unterscheidet man typischerweise zwischen einer Trainingsphase und einer Testphase (auch Ausbreitungsphase genannt).


• Trainingsphase: In dieser Phase lernt das neuronale Netz anhand des vorgegebenen Lernmaterials. Dementsprechend werden in der Regel die Gewichte zwischen den einzelnen Neuronen modifiziert. Lernregeln geben dabei die Art und Weise an, wie das neuronale Netz diese Veränderungen vornimmt. Testphase

• Testphase: In der Testphase werden hingegen keine Gewichte verändert. Stattdessen wird hier auf Grundlage der bereits modifizierten Gewichte aus der Trainingsphase untersucht, ob das Netz etwas gelernt hat. Dazu präsentiert man den Inputneuronen Reize und prüft, welchen Output das neuronale Netz berechnet.


MemBrain ist ein in C++ verfasstes Programm von Thomas Jetter. Im Gegensatz zu anderen Simulatoren (z. B. dem neuronale Netze Simulator in Matlab) ist das Programm nicht nur kostenfrei zu beziehen, sondern ermöglicht auch Anfängern einen relativ leichten Einstieg in die komplexe Thematik.

Nachdem MemBrain auf dem Rechner gestartet hat, erscheint zunächst neben einer Werkzeugleiste am oberen Bildschirmrand ein schwarzer Bildschirm. Auf dieser schwarzen Oberfläche können die Units platziert werden, indem aus dem Hauptmenü "Insert" und dann "New Neurons" ausgewählt wird. Nun positionieren wir z.B. wie in Abbildung unten die Units auf dem schwarzen Bildschirm.

Bild1.png

Anschließend sollten wir mit Betätigen der "Esc"-Taste wieder den herkömmlichen Mauscursor bewegen können. Nun betätigen wir die rechte Maustaste über Ihrer ersten Unit und klicken im Anschluss auf den Unterpunkt "Properties". Alternativ gelingt man auch durch einen einfachen Doppelklick der Unit zu dem entsprechenden Eigenschaftsmenü bzw. die Gruppe der Units (auf unserem Bild sind es 3 Gruppen) auswählen und Doppelklick.

Hier werden die Objekteigenschaften unserer ersten Unit angezeigt. Im Moment soll uns die Art der Unit interessieren. Klicken wir dazu auf das Pull-down Menü "Type". Wir können zwischen drei verschiedenen Arten von Neuronen auswählen: Input-, Hidden- und Output-Units. Wählen wir an dieser Stelle "INPUT" für die obere Gruppe der Neuronen, "HIDDEN" für die mittlere und "OUTPUT" für die unterste Gruppe aus und klicken anschließend auf den "OK-Button".

Ihr Bild sollte wie folgt ausschauen

Bild2.png

Im nächsten Schritt müssen die Units mit einander verbunden werden. Wir haben in unserem Beispiel (der sich auf unsere Projektarbeit Gestenerkennung mit Neuronalen Netzen bezieht) als Netztopologie sogenannte Madaline-Netz gewählt. Das Madaline-Netz (Mehrstufiges Netz) entsteht aus einem Adaline-Netz (Einstufiges Netz) durch hinzufügen von mehreren Ausgabeelementen. Die sich verändernden (lernenden) Gewichte sind die Gewichte der Adaline-Elemente. Die Veränderung der Gewichte folgt nach der gleichen Formel wie beim Adaline-Netzwerk. Gelernt wird nur dann, wenn ein Madaline-Element nicht die gewünschte Ausgabe hat. Für jedes falsch klassifizierte Madaline-Element werden die Gewichte des zu ihm führenden Adaline-Elements angepasst, dessen Aktivitäten am dichtesten bei Null liegen und das falsche Vorzeichen hat. Das Netzwerk lernt dadurch in der (verborgenen) Adaline-Schicht eine Art der internen Repräsentation der Eingabevektoren, die dann durch die Madaline-Elemente klassifiziert wird. Die Lernregel, die die Kenntnis der gewünschten Ausgabe voraussetzt, wird auf die verdeckte Schicht angewandt.

Um zwischen zwei Units eine Verbindung zu erstellen, müssen diese vorerst gruppenweise (einzeln dauert es sehr lang) ausgewählt werden. Im Menü Insert muss der Art der Verbindung gewählt werden. Für die Input Neuronen müssen Output Links und für die Output Neuronen müssen Input Links gewählt werden.

Bild3.png

Dabei müssen wir mit dem Mauspfeil auf die untere, kleine "Lücke" einer Unit fahren, so dass ein dunkelblaues Quadrat erscheint. Schließlich haben wir folgendes Bild:

Bild4.png

Die Auswahl der Aktivitätsfunktion für die einzelnen Units erfolgt wie die Typauswahl (Input, Hidden, Output) der Einheiten im Untermenü "Properties". Dazu doppelklicken auf ihre erstellte Output-Unit. Im mittleren Bereich können wir im Pull-down-Menü "Activation Function" (dort ist "LOGISTIC" ausgewählt) eine von insgesamt 5 Aktivitätsfunktionen auswählen. Für die Input Neuronen wählen wir hier "IDENT. 0 TO 1", für die Hidden – "LOGISTIC" und für die Output – "BINARY". Zusätzlich die Grenzen der Normalisierung von Input Neuronen, was auch in unserer Projektarbeit sehr wichtig war, können über den Button "Normalization" eingestellt werden. Normalisierungswerte für die Inputneurone wurden uns in unserer Projektarbeit aus EyesWeb. Mehr Beispiele der Normalisierungseinstellungen von Input-Neuronen aus unserer Projektarbeit findet man hier -> (Projektdokumentation) oder einzeln im Bild unten.

Bild5.png


Trainingsphase

In der Trainingsphase werden die für das Lernen/Training des Netzes nötigen Daten eingelesen. Über den Menüpunkt Teach -> Lesson Editor gelangen wir in den Editor wo die sowohl Input als auch Output Daten manuell bzw. auch über Import Funktion des Editors eingetragen werden können.

Bild6.png

In unserem Beispiel importieren wir die Input-Daten über die Importfunktion für CSV Daten. Nach dem unser CSV File importiert wurde ( sind 544 Patterns importiert worden ) der Lesson Editor sieht folgendermaßen aus:

Bild7.png

Nun sollte das Netz noch mit Zufallswerten für die Gewichte der Verbindungen und des Aktivierungs-Schwellwerts der Ausgabe-Unit initialisiert werden. Klicken wir hierzu auf den Menüpunkt "Net" - "Randomize Net". Wenn wir uns die Verbindungen zwischen den Neuronen einmal genauer anschauen, werden wir bemerken, dass diese danach die Farbe mehr oder weniger stark verändert haben. Entsprechend der Zufallswerte für die Verbindungsstärke können die Farben von bläulich über grau zu rötlich variieren.

Bild8.jpg

Öffnen wir nun den "Net Error Viewer" (im Menü unter "Teach" zu finden).

Bild9.png

Wenn wir nun das Netz durch den Start-Button trainieren lassen, dann sieht der "Net Error Viewer" (in unserem Beispiel nach ca. 380 Durchläufen) so aus.

Bild10.jpg

Deutlich erkennbar ist, dass der Fehlerterm des Netzes asymptotisch der Null sich annähert. Das neuronale Netz kann also problemlos unsere Daten simulieren.

Um die Trainingsphase zu stoppen - unter "Teach" "Stop Teacher (Auto)" klicken.

Testphase

Nach dem Trainingsphase abgeschlossen wurde und das Netz erfolgreich "gelernt" hat, prüfen wir, ob das Netz tatsächlich die richtigen Outputs für die verschiedenen Input-Muster produziert. Öffnen wir dazu "Lesson Editor" erneut. Wir wählen mit Hilfe der Pfeil-Buttons am rechten Rand ein gewünschtes Pattern aus (z.B. 2 of 544)

Bild11.png

und klicken anschließend auf "Think on Input". Im Hauptbildschirm sollte nun unter ihrer Output-Unit eine Zahl erscheinen.

Bild12.jpg

Wiederholen wir die gleichen Schritte für weitere Patterns.

Bild13.png

"Think on Input" klicken und wieder Output Neuronen prüfen.

Bild14.jpg

Die Null Werte bei den Inputs werden deswegen angezeigt, da die tatsächlichen Werte dieser Neuronen sehr klein sind: Bild15.png

Der Vorgang kann auch für andere Patterns wiederholt werden.

MemBrain hat auch eine Funktion mit der die User die Netzdaten exportieren können. Über "Code Generation" ->"C-Code"->"Generate Code" kann man die Daten in 2 Dateien (NeuralNetDef.c und NeuralNetDef.h) im C-Kode ausgeben. Die Dateien können dann auch für weitere Verarbeitung benutzt werden.


MemBrain Homepage

www.membrain-nn.de