3. Übungsblatt

Werbung
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
Herunterladen