Kognitive Systeme II: Lernende Systeme Schmid, Kitzelmann, Hecker WS 05/06 3. Übungsblatt Abgabe spätestens bis zur Übung am 28.11.05 1 Regressionslernen mit Neuronalen Netzen In dieser Aufgabe soll eine reellwertige Funktion f : R × R → R mittels eines neuronalen Netzes approximiert werden. Das Netz soll aus einem Input- und Output Layer, sowie einem Hidden Layer bestehen. Zum Trainieren des Netzes soll der Backpropagation-Algorithmus verwendet werden. Da die Bildmenge der zu lernenden Funktion die (unbeschränkte) Menge der reellen Zahlen ist, müssen für den Output-Layer lineare Units ohne Sigmoid-Funktion verwendet werden. Im Hidden-Layer bleibt es jedoch bei Sigmoid-Units. 1. Implementiert ein neuronales Netz in Java. Verwendet dazu die Vorgaben von der Übungsseite. (5 Punkte) Bei den Vorgaben enthält die Klasse Main die main-Methode und ist bereits fertig implementiert (und sollte auch nicht geändert werden). Die Klasse ANN repräsentiert das eigentliche Netz. Hier sind von Euch der Konstruktor, sowie die Methoden train, feed und print zu implementieren (Ihr könnt aber nach Belieben weitere private Klassen und Methoden hinzufügen). Die Anzahl der Hidden-Units, die Lernrate sowie die Trainingsepochen sind nicht fest vorgegeben und werden dem Programm auf der Kommandozeile übergeben. Zum Beispiel startet java bin/Main 0.1 2 1000 das Programm und trainiert ein Netz mit 2 Neuronen im Hidden-Layer, mit einer Lernrate von 0.1 und 1000 Trainingsepochen. Im Ordner Data befinden sich zwei weitere Dateien: • training.dat enthält 500 Trainingsbeispiele (eins pro Zeile, die ersten beiden Werte sind die Inputs, der dritte repräsentiert den Trainingsoutput) 1 • test.dat enthält ein Testset mit weiteren 250 Beispielen, inklusive dem erwünschten Output Beim Aufruf des Programms wird zuerst das Netz mit der Trainingsmenge und den vorgegebenen Parametern antrainiert. Danach wird mit Hilfe des Testsets der mittlere quadrierte Fehler des Netzes bestimmt. Anschließend wird noch das Netz als Gewichtsmatrizen der einzelnen Layer in die Datei Data/netout.dat geschrieben (daher die Methode ANN.print). Um die Genauigkeit Eures Netzes ausführlicher zu testen, könnt Ihr beim Aufruf des Programms optional einen vierten Parameter ’verbose’ angeben. Dann wird der quadrierte Fehler für jede Instanz im Testset ausgegeben. Hinweise: • Vergesst die Gewichte für das Bias-Input (Schwelle) w0 nicht! • Da der Output-Layer aus linearen Units besteht, werden die Fehlerterme für diese Neuronen anders berechnet, als im Backprop-Algorithmus im Skript angegeben (wie, das steht auch im Skript...). Bei den Hidden-Units bleibt aber alles beim Alten. 2. Trainiert mit Eurem Programm ein Netz, das auf dem Testset einen mittleren quadrierten Fehler ≤ 0.002 aufweist. Gebt hierfür die von Euch verwendeten Parameter an und schickt die Datei netout.dat mit Eurer Lösung mit. (1 Punkt) Verwendet als Parameterwerte 1–100 Hidden Units, eine Lernrate von 0.05–0.5 und max. 10000 Epochen. Hinweis: Augrund der zufällig gesetzen initialen Gewichte schwankt der Fehler bei mehreren Programmdurchläufen, trotz gleicher Parameterwerte. Stellt daher sicher, dass die geforderte Fehlerschranke auch bei mehrfachen Durchläufen nicht überschritten wird. Wenn der Fehler sehr stark schwankt, ist wahrscheinlich die Anzahl der Epochen zu klein, oder die Lernrate zu groß. 3. Warum ist diese Art der Parameteroptimierung bedenklich? (0 Punkte) 2 Backpropagation mit alternativer Fehlerfunktion Eine Möglichkeit, um Overfitting zu verhindern, ist das Hinzufügen eines sogenannten penalty term zur Fehlerfunktion, was zu kleineren Gewichten und damit zu weniger komplexen gelernten Funktionen führt. 1. Eine alternative Fehlerfunktion sei gegeben durch E(~w) ≡ 1 ∑ ∑ (tkd − okd )2 + γ ∑ w2ji 2 d∈D i, j k∈Out puts 2 Leitet aus dierser Definition von E (die der Standard-Definition, siehe lec.4–p.97, einen penalty term hinzufügt) die inkrementelle Gradient Descent Update-Regel ab. (3 Punkte) 2. Zeigt dass die abgeleitete Regel implementiert werden kann, indem jedes Gewicht mit der Konstanten 1 − 2γη multipliziert wird, bevor die Standard Update-Regel (siehe lec.4– p.98) auf das Gewicht angewandt wird. (1 Punkt) 3 Backpropagation Handsimulation Gegeben sei ein Neuronales Netz mir zwei Input Units a und b, einer Hidden Unit c und einer Output Unit d. Dieses Netz hat fünf Gewichte (wc0 , wca , wcb , wd0 , wdc ), wobei wx0 das Gewicht des Bias-Input (Schwelle) für Unit x repräsentiert. Die Gewichte seien mit (0.1,0.1,0.1,0.1,0.1) initialisiert. Betrachtet nun folgende beiden Trainingsbeispiele: a 1 0 Beispiel 1. 2. b 0 1 d 1 0 Führt eine Backprop-Handsimulation für eine Epoche, mit einer Lernrate η = 0.3 und ohne Momentum durch. (0 Punkte) 3