Dokumentation des Matlab-Programms zur Lösung des XOR

Werbung
Dokumentation des Matlab-Programms zur Lösung des
XOR Problems mit dem Backpropagation Netzwerk
Von Norbert Ebenhöh und Wolfgang Hösl
Problemstellung
In dem vorliegenden Matlab-Programm soll das XOR-Problem mit dem Backpropagation Netzwerk
gelöst werden. Das Java Applet das unter "http://fbim.fh-regensburg.de/%7Esaj39122/vhb/NNScript/script/gen/Applets/fi/" zu finden ist soll dabei als Grundlage dienen.
Allgemeines:
XOR-Problem
Das XOR-Problem (exklusives Oder) beschreibt das Problem, dass bei mehreren Eingängen genau
dann eine logische 1 als Ausgabe erscheint, wenn eine ungerade Anzahl von 1 in den Eingänge vorliegt.
In unserem Fall gibt es zwei Eingaben. Das folgende Muster beschreibt das XOR-Problem:
0 XOR 0 = 0
1 XOR 0 = 1
0 XOR 1 = 1
1 XOR 1 = 0
Backpropagation Netzwerk
Das Netzwerk besitzt eine Eingabeschicht, eine Zwischenschicht (Hidden-Layer) und eine
Ausgabeschicht. Die verschiedenen Schichten besitzen folgenden Elemente:
•
•
•
Eingabeschicht bestehend aus drei Neuronen
o Bias
o Zwei Eingabeneuronen
Zwischenschicht
o Bias
o Zwei Neuronen
Ausgabeschicht
o Ausgabeneuron
Für weitere Informationen bezüglich des Backpropagation Netzwerks siehe Kapitel 2.4 des NF-Skripts.
Graphical User Interface (GUI)
Im Folgenden werden die einzelnen Programmelemente der Graphical User Interface (GUI) und deren
Funktion erläutert.
Trainingsmuster:
Über die Buttons
0 XOR 0 = 0
1 XOR 0 = 1
0 XOR 1 = 1
1 XOR 1 = 0
wird die Eingabe und die gewünschte Ausgabe bekannt gemacht. Die Eingabe wird an die
Eingabeneuronen gegeben, die Gewichte werden mit Zufallszahlen belegt und es wird ein FeedforwardSchritt durchgeführt. Das Ergebnis wird in die grafische Darstellung des Netzes übertragen. Das
momentan gewählte Trainingsmuster wird durch den gedrückten Button visualisiert.
Bei einer Änderung des Trainingsmusters werden die Gewichte neu gesetzt und es wird ein neuer
Feedforward-Schritt durchgeführt.
Netzwerk:
Das Netzwerk wird durch Textfelder für die Neuronen und Verbindungslinien für die Synapsen
dargestellt. Wird ein Trainingsmuster gewählt, so wird das entsprechende Ergebnis in die Textfelder
übertragen.
Unter dem Netzwerk wird zusätzlich die Anzahl der Trainingszyklen sowie der Fehler ausgegeben. Der
Fehler wird jedoch nur bei betätigen des Trainingsbuttons ausgegeben.
Lernrate:
In diesem Eingabefeld kann die Lernrate eingetragen werden.
Fehlergrenze:
In diesem Eingabefeld kann die Fehlergrenze definiert werden.
Reset:
Mit Reset wird die das Netzwerk komplett zurückgesetzt. Lediglich der Bias bleibt enthalten.
Training:
Mit dem Button Training wird das Training gestartet. Es wird ein zufälliges Trainingspaar ausgewählt und
ein Feedforward- und Feebackward-Schritt wird durchgeführt. Dieser Vorgang wiederholt sich bis der
quadratische Fehler geringer als 0,01 (oder der definierte Wert) ist oder 20000 Trainingszyklen
durchgeführt wurden. Der Fehler sowie die Anzahl an Trainingszyklen werden im Netzwerk dargestellt.
Step:
Bei Betätigung des Buttons Step wird ein kompletter Lernzyklus durchgeführt (Feedforward- und
Feedbackward-Schritt). Die Eingabe ist durch die vorherige Auswahl des Trainingsmusters gegeben. Die
Berechnungen für den kompletten Lernzyklus werden daraufhin im Ausgabefenster dargestellt.
Einzelne Lernschritte können beliebig oft durch erneutes Betätigen des Step Buttons durchgeführt
werden. Die aktuellen Berechnungen werden im Ausgabefenster ausgegeben.
m-Files
Folgende Dateien werden zur korrekten Ausführung des XOR-Backpropagation-Problems benötigt:
-
Xor_ebenhoeh_hoesl.m
BackProp.m
Feedbackward.m
Feedforward.m
Lernen.m
Ruecksetzen.m
Sigmoid_Aktivieren.m
Die m-files werden in dieser Hinsicht nur kurz erläutert, da sie im Grunde genommen entsprechend
kommentiert sind.
xor_ebenhoeh_hoesl.m
Diese Datei ist die Hauptdatei. Von hier aus wird die grafische Oberfläche gestartet. Außerdem werden
hier die globalen Variablen definiert und erstmals initialisiert.
Zusätzlich kann hier die maximale Anzahl an Iterationen verändert werden, die bei Betätigung des
Training Buttons durchgeführt werden. Der Default-Wert der Fehlergrenze kann hier ebenfalls geändert
werden.
BackProp.m
Dieses Skript enthält die grafische Benutzeroberfläche des XOR-Algorithmus. Sie enthält Funktionen,
die hinter den einzelnen Button-Klick-Ereignissen hinterlegt sind. Die einzelnen Funktionen sind (es
werden nur die Funktionen aufgelistet, die für das Matlab-Programm von Bedeutung sind):
setFields
Dies ist eine Funktion die die Werte, die in der GUI enthalten sind, auf die Defaultwerte ändert. Es
werden lediglich die Eingabeneuronen an die Funktion übergeben und in die entsprechenden
Eingabefelder übertragen.
Button0xor0_Callback
Diese Funktion wird bei Betätigung des 0 xor 0 = 0 Buttons aufgerufen. Die Eingabe und das Ziel
werden mit Hilfe der Funktion Ruecksetzten übergeben. Es wird ein Feedforward-Schritt durchgeführt
und die Ergebnisse werden in die GUI übertragen.
Button0xor1_Callback
Siehe Button0xor0_Callback für das Eingabemuster 0 xor 1 = 1.
Button1xor0_Callback
Siehe Button0xor0_Callback für das Eingabemuster 1 xor 0 = 1.
Button1xor1_Callback
Siehe Button0xor0_Callback für das Eingabemuster 1 xor 1 =0.
ButtonReset_Callback
Diese Funktion wird bei Betätigung des Reset Buttons aufgerufen. Die Funktionen Ruecksetzten und
setFields werden aufgerufen. Alle Werte werden zurückgesetzt. Dies entspricht einem erneuten
Programmstart.
ButtonTraining_Callback
Diese Funktion wird bei Betätigung des Training Buttons aufgerufen. Es werden Zufallswerte für die
Eingabeneuronen erzeugt. Das dazugehörige Ziel wird ermittelt und mit diesen Werten wird die Lernen
Funktion aufgerufen. Die Lernen Funktion wird so lange in einer Schleife erneut mit Zufallswerten
durchgeführt, bis der Fehler unter die vorgegeben Fehlerschranke fällt oder 20000 Iterationen
durchgeführt wurden.
Die Ergebnisse des zuletzt durchgeführten Lernzyklus werden in das Eingabefenster übertragen. Wird
die Iterationsgrenze von 20000 erreicht, so wird eine Fehlermeldung in das Ausgabefenster geschrieben.
ButtonStep_Callback
Diese Funktion wird bei Betätigung des Step Buttons aufgerufen. Es wird ein kompletter Lernzyklus
durchgeführt, d.h. die Funktion Lernen wird aufgerufen. Das Ergebnis wird in das Ausgabefenster der
GUI übertragen. Die Anzahl an Trainingsschritten und die Fehlerrate wird aktualisiert.
Feedbackward.m
Enthält die Funktion Feedbackward, die die Fehlerrate Dk berechnet und diesen Fehler auf die
vorhergehenden Schichten umrechnet.
Feedforward.m
Enthält die Funktion Feedforward, die über Gewichte, Biases und anschließende Auswertung der
Sigmoid-Funktion die Werte der Neuronen der Zwischenschicht und der Ausgabeschicht berechnet.
Diese 3 Werte werden von der Funktion in einem Vektor zurückgegeben.
Lernen.m
In dieser m-file werden die Feedforward- und Feedbackward Funktionen aufgerufen. Da bei der Wahl
des Trainingsmusters bereits ein Feedforward-Schritt durchgeführt wurde, wird beim erstmaligen
drücken des Lernen Buttons die Feedforward Funktion übersprungen.
In Lernen wird ebenfalls die Anzahl der Lernschritte mitgezählt.
Ruecksetzen.m
Die Funktion Ruecksetzen setzt alle Parameter auf deren Anfangswerte. So wird die Anzahl der
Trainingszyklen wieder auf 0 gesetzt, die Biases werden neu mit Zufallszahlen belegt, ebenso die
Verbindungsgewichte W_ij und W_jk zwischen Eingabe- und Zwischenschicht bzw. Zwischen- und
Ausgabeschicht.
Sigmoid_Aktivieren.m
Die Funktion Sigmoid_Aktivieren liefert für einen Übergabeparameter x den Wert 1/(1+exp(-x))
Erklärung
Wir bestätigen hiermit, dass wir das Projekt „Lösung des XOR-Problems mit dem BackpropagationNetzwerk. Umsetzung des Java-Applets in Matlab“ (Aufgabe 4b des 12. Aufgabenblattes) selbstständig
und ohne fremde Hilfe gelöst haben.
Norbert Ebenhöh
Regensburg, 20.01.2009
Wolfgang Hösl
Herunterladen