ALBERT-LUDWIGS-UNIVERSITÄT FREIBURG INSTITUT FÜR INFORMATIK Lehrstuhl für Mustererkennung und Bildverarbeitung Prof. Dr.-Ing. Hans Burkhardt Georges-Köhler-Allee Geb. 52, Zi -29 D-79 Freiburg Tel. 76-23 - 826 Übungen zur Vorlesung Grundlagen der Bilderzeugung und Bildanalyse Mustererkennung WS 4/5 Musterlösung 9 Aufgabe 9.: Zwei-Lagen Perceptron. Die Klasse befindet sich innerhalb der Raute; die Klasse 2 ist der Bereich ausserhalb der Raute. 2.5.5.5.5.5.5.5.5.5 2 2.5 2. Das Zwei-Lagen Perceptron lässt sich wie folgt konstruiren: In der ersten Schicht benutzen wir die Geraden als Trennlinien. Vier Geraden formen die Raute: g : x = x g : x = x + g 2 : x = x + g 3 : x = x W =, b = Für die zweite Schicht müssen wir nun das Gebiet, welches von den Geraden eingegrenzt wird, aussuchen. Dazu müssen wir bestimmen, ob sich das gewünschte Gebiet auf der neagtiven oder auf der positiven Seite der Geraden g g 3 befindet und einen dementsprechenden Eintrag in W 2 vornehmen. W 2 =, b 2 = 3 Mit signum als Aktivierungsfunktion erhalten wir: y 2 = signw 2 signw x + b + b 2
{ x Klasse y 2 = x Klasse2 Aufgabe 9.2: Perceptron mit Offset Die gegebenen Daten lauten: ω = {, }, ω 2 = {, }, b = /2, w = Der Algorithmus lautet: wi+ b i+ wi = b i x δ x x Y wobei und { x ω δ x = x ω 2 Y = { x x ω w T i x + b i < x ω 2 w T i x + b i > } Die Klassifikation mit dem resultierenden w und b erfolgt durch Die Grenzlinie ergibt sich als b 2 ω = signx T w + b = x T w + b = x w + x w + b x = w w x b w Für die verschiedenen Iterationen ergeben sich die Grenzlinien g i und Fehlklassifikationen Y i : { }. g : x = /2, Y =, w. Iteration: = + = b /2.5 { } 2 w =, b =.5, g : x = 3, Y 4 =, w2 2. Iteration: = =.5.5 w 2 =, b 2 =.5, g 2 : x = 2x.5, Y 2 =
2 x.5 g g2.5.5 g x x.5.5.5.5.5 2 Aufgabe 9.3: Programmieraufgabe: Perceptron ohne Offset. Eine mögliche Implementation, die mit lediglich einer Schleife über die Anzahl der Iterationen auskommt: function [w, J] = train_perceptronx, l, rho, niter l = -2*l:-.5; w = zerossizex,,; rho_i = ; J = []; // make l columnvector with -, + entries // initialization of w for i=:niter // determine wrong classified examples with current w wx = w * X; wx = wx:; cl = signwx; // estimated class-labels z = findcl==; clz = - * lz; // count distance later as wrong class. err = signcl:.*l:; // - indicates wrong classification Y = finderr==-; // set with indices // determine value of J before update delta_x = -l; Ji = sumdelta_xy.* wxy; // update weight-vector w = w - rho_i* sum X:,Y*delta_xY, c rho_i = rho_i * rho; end; endfunction; Zunächst wird der Vektor l mit Klassenzugehörigkeiten in Werte ± umgerechnet, weil so Fehlklassifikationen einfacher festgestellt werden können. In einer Schleife über die Anzahl der Iterationen wird nun eine Klassifikation aller Trainingsdaten mit dem aktuellen Normalenvektor durchgeführt. Dies liefert einen Vektor cl geschätzter Klassenzugehörigkeiten mit Werten ±. Nach elementweiser Multiplikation mit l sind Fehlklassifikationen genau durch Werte - charakterisiert. Die δ x der Fehklassifikationen sind gerade das negative der entsprechenden l. Mit Hilfe der Formeln aus der Vorlesung wird der Wert der Optimierungsfunktion, die Korrektur des Normalenvektors und die neue Lernrate berechnet. 2. Ein nicht verlangtes Skript, das die gewünschten Ergebnisse liefert wäre
load data 3.dat getf train_perceptron.sci // train perceptrons & generate plots [w,j] = train_perceptronx,l,,; [w2,j2] = train_perceptronx2,l2,,; w w2 xset color, plotj, Iterationen, Opt.-Funktion,... Trainingsverlauf auf Datensatz xset window,xget window + xset color, plotj2, Iterationen, Opt.-Funktion,... Trainingsverlauf auf Datensatz 2 ; Die resultierenden Normalenvektoren sind w = 49.97983, 45.63649 T und w 2 = 62.479,.22976 T. Die Diagramme der Gütefunktion lassen erkennen, daß im ersten Datensatz erfolgreiches Training stattgefunden hat, und die Funktion zu konvergiert ist. Im zweiten datensatz zeigen sich Oszillationen, die darauf deuten, dass das Training noch nicht beendet ist, der Datensatz eventuell durch ein Perceptron nicht separiert werden kann. Opt. Funktion Trainingsverlauf auf Datensatz Opt. Funktion Trainingsverlauf auf Datensatz 2 4e3 24 2e3 2 e3 6 8e3 2 6e3 8 4e3 4 2e3 Iterationen Iterationen 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 x x Visualisiert man sich die Daten und Klassifikationsgebiete, bestätigen sich diese Erkenntnisse. x x 3. Darstellen des Datensatzes ist z.b. möglich mittels //plot dataset 2 xset window,xget window + xset color,2; i = findl2 == ; plot2dx2, i,x22, i,style=-6; xset color,5;
i = findl2 == 2; plot2dx2, i,x22, i,style=-; Die Resultierende Grafik der Daten X 2, l 2 ist x Man sieht, daß die Daten linear separabel sind, jedoch nicht mit einer Ursprungsgeraden, daher kann das Training aus Teil 2 tatsächlich nicht konvergieren. Erste Möglichkeit wäre, den Datensatz um, T zu verschieben, anschließend ist er mit einem linearen Perceptron ohne Offset separierbar. Die zweite Möglichkeit besteht in der Erweiterung der Trainingsdaten um eine weitere Koordinate mit Wert. Perceptron-Training liefert dann einen dreidimensionalen Normalenvektor, dessen ersten beiden Komponenten den gewünschten 2d-Normalenvektor darstellen. Die dritte Komponente ist der gewünschte Offset des Perceptrons.