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