zurück |
Source Code: aufg_1_2.m |
1. EinleitungDie Aufgabenstellung war, das Perceptron aus Aufgabe UE-1.1 mit zwei Trainigssets zu trainieren. Die Trainigsdaten wurden von der Übungsleitung zur Verfügung gestellt. Der angewandte Lösungsweg und die Ergebnisse dieser Aufgabe werden hier im Detail beschrieben.2. LösungswegZur Lösung der Aufgabe wurde das Programm Matlab verwendet. Die Implementierung ist in der Datei aufg_1_2.m enthalten, wobei zur Ausführung die Datei perco.m aus der Aufgabe UE-1.1 benötigt wird. Die Zeilenangaben im folgenden Text beziehen sich auf die Datei aufg_1_2.m2.1 AusgangsdatenDie Trainigsdaten bestehen aus zwei Dateien: Eine enthält die Werte der Trainingsdaten und die andere die Targetwerte, die die Klassenzugehörigkeit der Vektoren beschreiben.Diese Daten können direkt in Matlab eingelesen werden. Allerdings müssen die Targetwerte vor dem Start des Trainings in einen anderen Wertebereich konvertiert werden. In der Datei werden die Klassenzugehörigkeiten mit 0 und 1 kodiert. Beim Training des Perceptrons wird aber eine Kodierung im Bereich von -1 bis 1 erwartet, daher müssen die Werte umgewandelt werden. Dieser Schritt passiert gleich als erstes nach dem Einlesen der Daten (in Zeile 24 für das erste Trainingsset und in Zeile 130 für das zweite Trainingsset). Die Daten der Trainingsvektoren müssen ebenfalls konvertiert werden, und zwar werden aus ihnen homogene Koordinaten erzeugt. Das passiert in Zeile 57 für das erste Trainingsset und in Zeile 163 für das zweite Trainingsset. Es wird ein neuer Vektor erzeugt bei dem an erster Stelle die homogene Komponente und danach die Werte des Trainingsvektors stehen. 2.2 Trainieren des PerceptronsDas Training wird in Zeile 64 für das erste Trainingsset und in Zeile 170 für das zweite Trainingsset durchgeführt, mit einer maximalen Obergrenze von 1 000. Diese Grenze wird manuell festgelegt. Als Ergebnis erhählt man den Gewichtsvektor w, der anschließend geplottet wird um das Perceptron graphisch darzustellen.2.3 Margin berechnenEin wichtiges Kriterium für die Generalisierungsfähigkeit des Perceptrons ist seine Margin. Diese ergibt sich aus dem Minimum über alle Margins aller Trainigspunkte (Zeile 82 für das erste Trainingsset). Details zum Wert der Margin für das aktuelle Perceptron und dessen Bedeutung folgen im nächsten Kapitel (3. Ergebnisse).2.4 Perceptron Konvergenz TheoremMit Hilfe der Formel aus dem Perceptron-Konvergenz-Theorem lässt sich eine obere Schranke für die Anzahl der Korrekturschritte im Trainingsalgorithmus berechnen. Details zum Wert der Schranke für das aktuelle Perceptron und dessen Bedeutung folgen im nächsten Kapitel (3. Ergebnisse).3. ErgebnisseDie Aufgabe teilt sich in zwei Bereiche, da zwei unterschiedliche Trainingssets zu Bearbeiten waren.3.1 Trainingsset 1Die Ergebnisse aus diesem Teil beziehen sich auf das Trainingsset mit den Trainingsvektoren aus der Datei perceptrondata und den Targetvektoren aus der Datei perceptrontarget1.Das Trainingsset ist linear separierbar, daher konvergiert der Perceptron-Trainingsalgorithmus, und zwar nach 9 Durchläufen. Das Ergebnis sieht graphisch dargestellt so aus: ![]() Abbildung 2: Ergebnis für das erste Trainingsset In der Graphik sind die Datenpunkte gemäß ihrer Klassenzugehörigkeit eingefärbt, wodurch sich leicht die lineare Separierbarkeit des Problems erkennen lässt. Außerdem wird sichtbar, dass die Margin des Perceptrons nicht sehr groß sein kann, da die Datenpunkte sehr eng an der Trennlinie liegen. Konkret hat sie für diese Trainingsvektoren den Wert 0.0118 (siehe auch Ausgabe im Matlab-Fenster). Dadurch ergibt sich, dass man Probleme haben würde, dieses Perceptron an neue Daten anzupassen, da seine Generalisierungsfähigkeit beschränkt ist. Ebenfalls von der Margin beeinflusst wird die Berechnung der Obergrenze für die Konvergierungsschritte. Diese hat für die aktuellen Vektoren den Wert 13 739, was für 200 Datensätze eine sehr große Zahl ist. Die Erklärung dafür ist, dass es aufgrund der sehr kleinen Margin und damit der schlechten Generalisierungsfähigkeit des Perceptrons schwieriger ist, die exakte Hyperebene zu finden. Daher muss bei einer Schätzung mit einer größeren Anzahl von Schritten gerechnet werden. Außerdem kommt hinzu, dass das Perceptron-Konvergenz-Theorem nicht die kleinste mögliche Obergrenze bestimmt. 3.2 Trainingsset 2Die Ergebnisse aus diesem Teil beziehen sich auf das Trainingsset mit den Trainingsvektoren aus der Datei perceptrondata und den Targetvektoren aus der Datei perceptrontarget2.Das Trainingsset ist nicht linear separierbar, daher konvergiert der Perceptron-Trainingsalgorithmus nicht. Er durchläuft die Schleife so oft, wie in der Variable maxEpoches angegeben wurde und liefert danach keine richtige Lösung für w. Graphisch sieht das Ergebnis nach 1 000 Durchläufen so aus: ![]() Abbildung 2: Ergebnis für das zweite Trainingsset Die Datenpunkte der beiden Klassen wurden wieder unterschiedlich eingefärbt, wodurch man leicht erkennen kann, dass das Problem nicht linear separierbar ist. Leider ist dies die einzige Möglichkeit festzustellen, ob der Perceptron-Trainingsalgorithmus konvergieren wird (nämlich durch graphische Darstellung der Klassenzuteilung). Testweise wurde die Formel für das Perceptron-Konvergenz-Theorem fünf mal während dem Training ausgewertet. Die Berechnung ist zwar nicht ganz korrekt, da zu keiner Zeit eine Lösung für w vorhanden ist (da das Problem nicht linear separierbar ist). Trotzdem war es interessant, das Verhalten des Trainingsalgorithmus anhand dieser Formel zu beobachten. Dabei wurde festgestellt, dass sich die Grenze während dem Training nach oben und nach unten verschiebt. Der festgelegte Wert für die maximale Anzahl von Schritten im Training wurde hier auf 1 000 gesetzt. Dabei ergeben sich folgende Werte für die Obergrenze: nach 10 Schritten: 18 011 nach 100 Schritten: 13 762 nach 500 Schritten: 15 421 nach 700 Schritten: 17 261 nach 900 Schritten: 17 762 Die Erklärung dafür ist, dass sich der Trainingsalgorithmus immer wieder in lokalen Optimas verläuft und sich daher immer wieder die Margin des Perceptrons ändert. |
nach oben |