Neuronale Netze, Fuzzy Control, Genetische Algorithmen Prof. Jürgen Sauer 5. Aufgabenblatt: Neural Network Toolbox 1 A. Mit Hilfe der GUI vom Neural Network erstelle die in den folgenden Aufgaben geforderten Netzwerke. Anschließend trainiere die Netze mit unterschiedlichen Parametern und beobachte die unterschiedlichen Ergebnisse. 1. Aufgabe Im Skriptum ist unter 2.4.3.2 ein Applet zur Lösung des XOR-Problems angegeben. Mit Hilfe der GUI der Neural Network Toolbox implementiere ein Feedforward Backpropagation Netz. Die Implementierung soll im Rahmen eines Matlab-Skripts dokumentiert werden. a) Das Netz soll die gleichen Eigenschaften besitzen, wie das im Skript unter 2.4.3.1 angegebene Java- Programm. Öffnen des Network/DataManager über nntool Öffnen des Fensters Create New Data und Eingabe der Daten für Netzwerkeingabe und Netzwerkausgabe (Name, Wert, Zweck (Data Type) 1 Literatur: Howard Demuth, Mark Beale, und Martin Hagan: Neural Network Toolbox: Users Guide, http://www.mathworks.com/access/helpdesk/help/pdf_doc/nnet/nnet.pdf, The Mathworks, 2005 1
Erzeugen des Netzwerks mit dem Fenster Create New Network zur Eingabe von Network-Name, Network- Type, Input Range, Number of Neurons, Transfer Function, Learning Function Über den Button View kann das erzeugte Netzwerk betrachtet werden 2
Trainieren des Netzwerks über Öffnen eines Fensters zum Festlegen der Trainingsparameter (Eingabemuster, Ausgabemuster, Anzahl der zu durchlaufenden Epochen, der zu erzielenden Gesamtfehler) 3
Simulation des Netzwerks über Öffnen mit dem Button Simulate aus dem Network/data Manager zum Bestimmen der Eingabedaten und dem Namen einer Variablen zur Aufnahme der Ergebnisse der Simulation Betrachten der Ausgabe über den Button View im Network/Data Manager 2. Aufgabe: Training und Simulation eines 2-1 FFNN % aufg2a.m % Training eines 2-1 FFNN mit Backpropagation % Matlab Neural Network Toolbox clear all; close all; P1 = [1 1-2 -1 0]; P2 = [2-2 2 1 0]; % Eingabe Muster P1 & P2 T = [0 1 0 1 0.5]; % Ausgabeziel T 4
P = [P1; P2]; % Erzeuge eine Matrix fuer die Eingaben P: 2x4 Matrix % Training von folgendem FFNN % s1 = [w11 x w12] *[p1 p2]' + b1 % y1 = logsig(s1) % Ziel: y1 dupliziert T meinnn = newff([-2 2; -3 3],1,{'logsig'}); % Aufbau der FFNN-Struktur % meinnn.trainparam.goal = 0.1; % Fehler-Abbruchkriterium meinnn.trainparam.epochs = 100; % Anzahl Epochen [meinnn, tr] = train(meinnn,p,t); % Start Training % Ausgabe Gewichte und Bias meinnn.iw{:,:} meinnn.lw{:,:} meinnn.b{:,:} % Mapping des Trainierten FFNN u1 = -2:0.2:2; N1 = length(u1); u2 = -4:0.2:4; N2 = length(u2); for j = 1:N1 for i = 1:N2 y(i,j) = sim(meinnn,[u1(j);u2(i)]); end; end; ytrained = sim(meinnn,p); figure(1); plot3(p1,p2,t,'o',p1,p2,ytrained,'x'); hold; mesh(u1,u2,y); grid; hold off; xlabel('p1'); ylabel('p2'); zlabel('y'); title('2-input 1-output FF Neuron'); 5
3 Aufgabe Die Funktion y = 1./((x-3).^2+.01)+1./((x-.9).^2+0.4)-6 kann in MATLAB unter dem Namen humps aufgerufen werden. Es soll gezeigt werden, dass es möglich ist, ein Neuronales Netzwerk zu bestimmen, das Daten, die im Bereich [0 2] durch die humps-funktion generiert werden, abdeckt. Gib ein geeignetes MLP-Netzwerk dafür an. % humps-funktion: y = 1./((x-3).^2+.01)+1./((x-.9).^2+0.4)-6 % Gesucht ist d ein MLP, das Daten zur humps-funktion % Bereich [0 2] approximiert. % Darstellung der Funktion x = 0:0.05:2; y = humps(x); P = x; T = y; plot(p,t,'x') grid; xlabel('time(s)'); ylabel('output'); title('humps function'); 6
% Netzwerkentwurf: feedforward (MLP) net = newff([0 2],[5 1],{'tansig','purelin'},'traingd'); % 1. Argument [0 2] definiert den Eingabebereich und initialisiert % die Netzwerparameter % 2. Argument [5 1] bestimmt die Struktur des Netzwerks, es gibt 2 % Schichten. 5 ist die Anzahl der Knoten in der % verborgenen Schicht, 1 ist die Anzahl der % Knoten in der Ausgabeschicht % Definition der Aktivierungsfunktionen % 1. Schicht umfasst 5 tansig-funktionen % In der Ausgabeschicht gibt es eine lineare Funktion % 'learngd' definiert das grundlegende Lernschema der Gradienten-Methode % Definition der Lernparameter net.trainparam.show = 50; % Ergebnisausgabe nach je 50 Epochen net.trainparam.lr = 0.05; % Lernrate net.trainparam.epochs = 1000; % Max. Anzahl Iterationen net.trainparam.goal = 1e-3; % Fehlerkriterium fuer Abbruch % Netzwerktraining net1 = train(net,p,t); 7
Das Fehlerkriterium für den Abbruch wurde bei weitem nicht erreicht. 8
net1 = train(net,p,t); % Simulation, wie gut das Ziel erreicht wurde a = sim(net1,p); % Zeichne das Ergebnis und vergleiche plot(p,a-t,p,t); grid; 9
% Aus der Konvergenz-Kurve kann abgeleitet werden, dass Chancen zur % Verbesserung bestehen, z.b. durch Erhöhen der Anzahl der Iterationen. % Da das Gradientenabstiegsverfahren sehr langsam ist, wird das % schnellste in der Toolbox bekannte Verfahren von Levenberg-Marquardt % herangezogen (mit 10 Neuronen in der verborgenen Schicht) % Versuch mit 'trainlm' nach Levenberg-Marquardt % ================================= net = newff([0 2],[10 1],{'tansig','purelin'},'trainlm'); net.trainparam.show = 50; % Ergebnisausgabe nach je 50 Epochen net.trainparam.lr = 0.05; % Lernrate net.trainparam.epochs = 1000; % Max. Anzahl Iterationen net.trainparam.goal = 1e-3; % Fehlerkriterium fuer Abbruch % Netzwerktraining net1 = train(net,p,t); % Simulation, wie gut das Ziel erreicht wurde a = sim(net1,p); % Zeichne das Ergebnis und vergleiche plot(p,a-t,p,t) xlabel('time(s)'); ylabel('output of network and error'); title('humps-funktion') 10
Deutlich zeigt sich: Der L-M-Algorithmus ist nicht nur significant schneller und besser geeignet zur Implementierung des Backpropagation. Zum Test der erreichten Qualität kann mit vom Training unabhängigen Daten folgende Simulation betrachtet werden. x1 = 0:0.01:2; P1=x1; y1=humps(x1); T1=y1; a1 = sim(net1,p1); plot(p1,a1-t1,p1,t1,p,t) 11
4 Aufgabe Das Leistungsvermögen NN wird häufig anhand des 2-Spiralen Problems dokumentiert. Im Ordner aufg5 sind unter dem Verzeichnis gruber MATLAB-Skripten angegeben, die mit Hilfe der NN-Toolbox von MATLAB die Leistungen verschiedener Modifikationen des Backpropagation-Verfahrens zeigen. 12
B. Erstelle Matlab-Skripten für die folgende Aufgaben. Benutze, soweit es möglich ist, die MATLAB Toolbox für Neural Network 2. MATLAB-Skripten bitte per E-Mail an Prof. Sauer senden 1. Aufgabe Im Skriptum wurde unter 2.3.2.3 ein einstufiges Netz mit Hilfe der Delta-Regel erlernt. Gib ein Matlab-Skript an, dass diese Aufgabe ebenfalls löst. Das Netzstruktur ist 0 1 2 3 4 Das NN soll aus Eingabemustern nach folgender Zusammenstellung ein Eingabemuster erzeugen. Muster Eingabe 0 1 2 3 Ausgabe 4 0 1-1 1-1 1 1 1 1 1 1 1 2 1 1 1-1 -1 3 1-1 -1 1-1 Nach der Delta-Regel sind die Gewichte der Verbindungen zwischen den Einheiten der Ein- und Ausgabeschicht zuzuordnen. Die Gewichte sind mit 0 initialisiert, die Lernrate ε hat den Wert 0.25. 2. Aufgabe Gib ein MATLAB-Skript an, das das 8-3-8 Encoder-Problem im Rahmen eines Feedforward-Netzes mit dem Backpropagation löst. Die beiden folgenden Matrizen zeigen die Eingabe und die Ausgabe, wenn das Problem korrekt gelöst wurde. % Lernaufgabe P = [1 0 0 0 0 0 0 0; 0 1 0 0 0 0 0 0, 0 0 1 0 0 0 0 0; 0 0 0 1 0 0 0 0; 0 0 0 0 1 0 0 0; 0 0 0 0 0 1 0 0; 0 0 0 0 0 0 1 0; 0 0 0 0 0 0 0 1]; T = [1 0 0 0 0 0 0 0; 0 1 0 0 0 0 0 0, 0 0 1 0 0 0 0 0; 0 0 0 1 0 0 0 0; 0 0 0 0 1 0 0 0; 0 0 0 0 0 1 0 0; 0 0 0 0 0 0 1 0; 0 0 0 0 0 0 0 1]; a) Erstelle das MATLAB-Skript 3 mit Hilfe von Kommandos aus der MATLAB Toolbox für Neural Network. 2 Lehrbrief15.doc 3 aufg2b.m 13
b) Benutze zur Lösung des Problems das Graphical User Interface der MATLAB Toolbox für Neural Network 3. Aufgabe a) Mit Hilfe der Neural Network Toolbox implementiere ein Feedforward Backpropagation Netz mit einer Struktur, die der im Skriptum 4 vergleichbar ist. Die Implementierung soll im Rahmen eines Matlab-Skripts dokumentiert werden. b) Alle Gewichte in dem unter a) vorliegenden Netz sollen auf 1 gesetzt werden. Wie verändern sich die Gewichtswerte während des Trainings. 4. Aufgabe Gib ein MATLAB-Skript für ein FFNN an, das die Sinus-Funktion approximiert. Die Approximation soll den Bereich von 0 bis 2.4 * π umfassen. Es besteht aus: einer Eingabeschicht, der verborgenen Schicht mit 4 Neuronen, der logistischen Funktion tansig. Die Trainingsfunksfunktion ist traingdx, die Anzahl der Trainingsepochen ist 50.000 und das Fehlerabbruchkriterium ist 1e 6 4 vgl. Skriptum: 2.4.3 14
5. Aufgabe Im Verzeichnis hoesl_ebenhoeh ist im Ordner aufg5 ein MATLAB-Skript mit graphischer Benutzeroberfläche angegeben, das das XOR-Problem (mit Hilfe des Gradientenabstiegsverfahrens, Backpropagation) löst. Die Skript arbeitet mit einer graphischen Benutzeroberfläche und kann mit dem Kommando xor_ebenhoeh_hoesl aufgerufen werden. Es erscheint dann das folgende Fenster, in dem alle Zwischenschritte zur Lösung des XOR protokolliert werden. 1. Überprüfe die Ergebnisse mit Hilfe des im Skriptum angegebenen Java-Applets 5. 2. Evtl. Verbesserungen und nötige Korrekturen geben Sie Bitte per E-Mail an Prof. Sauer 5 vgl. http://fbim.fh-regensburg.de/~saj39122/vhb/nn-script/script/gen/applets/fi/bpxorsim.html 15