kurze Wiederholung der letzten Stunde: Neuronale Netze martin.loesch@kit.edu (0721) 608 45944 Labor Wissensrepräsentation
Aufgaben der letzten Stunde Übersicht Neuronale Netze Motivation Perzeptron Multilayer Neural Networks Grundlagen für praktische Übungen 2
AUFGABEN AUS LETZTER STUNDE 3
Aufgabe 4: Lernen eines Perzeptrons Die Einstellung der Gewichte eines Perzeptron per Hand ist aufwändig und fehlerträchtig. Der Perzeptron-Lernalgorithmus stellt daher eine sinnvolle Alternative dar. a) Implementieren Sie eine Funktion, die (gegeben eine Menge von Trainingsdaten) die Gewichte eines Perzeptrons einlernen kann. b) Verwenden Sie die neu implementierte Lernfunktion, um Gewichte einzulernen für Perzeptronen zur Realisierung einer (1) AND-Funktion (2) OR-Funktion 4
Perzeptron Lernalgorithmus Start: Gegeben Lerndatenmenge P N Der Gewichtsvektor w(0) wird zufällig generiert. Setze t:=0. Testen: Ein Punkt x in P N wird zufällig gewählt. Falls x P und w(t) x > 0 gehe zu Testen Falls x P und w(t) x 0 gehe zu Addieren Falls x N und w(t) x < 0 gehe zu Testen Falls x N und w(t) x 0 gehe zu Subtrahieren Addieren: Setze w(t+1) = w(t)+x. Setze t:= t+1. Gehe zu Testen. Subtrahieren: Setze w(t+1) = w(t)-x. Setze t:=t+1. Gehe zu Testen.
Vorgegebener Ablauf: Framework-Quelldatei Daten laden Perzeptron trainieren Perzeptron verwenden Trainingsdaten werden aus Datei geladen: TrainingData* loaddatafromfile(filename) Perzeptron wird trainiert: Perzeptron* trainnewperceptron(traindata) MUSS IMPLEMENTIERT WERDEN! Perzeptron wird verwendet/getestet: void runperceptron(perceptron* neuron) 6
Anzahl der Eingänge Eine Instanz pro Zeile Komma-separierte Werte Daten-Dateiformat Letzer Wert: Klasse der Instanz Beispiele: anddata.txt 2 0,0,- 0,1,- 1,0,- 1,1,+ ordata.txt 2 0,0,- 0,1,+ 1,0,+ 1,1,+ xordata.txt 2 0,0,- 0,1,+ 1,0,+ 1,1,- 7
Lösungsauszug: Training PerceptronConfig adaptconfig(resultperceptron->get_inputs_number()); initializeperceptronconfiguration(adaptconfig); resultperceptron->set_activation_function(fl::perceptron::threshold); applyconfiguration(resultperceptron, adaptconfig); while (!evaluateperceptroncorrectness(resultperceptron, *data)){ LabeledData* testinst = &(data->operator[](rand() % data->size())); if (testinst->label == POS){ if (resultperceptron->calculate_output(testinst->data)<0.5){ adaptconfig.threshold += 1.0; for (unsigned int i=0; i<adaptconfig.weights.get_size(); i++){ adaptconfig.weights[i] += testinst->data[i]; } } } else { if (resultperceptron->calculate_output(testinst->data)>0.5){ adaptconfig.threshold -= 1.0; for (unsigned int i=0; i<adaptconfig.weights.get_size(); i++){ adaptconfig.weights[i] -= testinst->data[i]; } } } applyconfiguration(resultperceptron, adaptconfig); } 8
NEURONALE NETZE 9
Motivation menschliches Gehirn und PC-Rechner komplementär in ihren Stärken und Schwächen Rechner sollen Vorteile des menschlichen Gehirns ebenfalls nutzen hohe Parallelisierung Robustheit etc. Gehirn besteht aus einzelnen Gehirnzellen (Neuronen), die durch Vernetzung erst Macht gewinnen 10
Aufbau Perzeptron einzelne künstliche Nervenzelle verarbeitet Eingabesignale zu einzelnem Ausgabesignal Aufbau: x Eingabevektor t Target (Soll-Ausgabe) x 0 =1 x 1 x 2 x n... w 2 w 1 w n w 0 Σ o = { 1 1 n i=1 Bias Trick x 0 =1 w ix i θ sonst w 0 = θ w Gewichtsvektor o Output (Ist-Ausgabe) 11
Multi Layer Neural Network (MLNN) Netzaufbau: mehrere versteckte (innere) Schichten Lernverfahren: Backpropagation-Algorithmus [Rumelhart86, Werbos74] Neuronenaufbau: nichtlineare Aktivierungsfunktion -1-1 i1-1 i2 i3 i4 i5 12
Aufbau der Neuronen x 1 w 1 x 0 =1 w 0 nichtlinear, wichtig für Lernalgorithmus x 2. w 2 Σ x n w n x ij = i-te Eingabe des Neurons j w ij = das Gewicht zwischen Neuron i und Neuron j net j = i w ij x ij Propagierungsfunktion o j = Ausgabe des Neurons j t j = Zielausgabe (target) des Ausgabeneurons j f(x) = Aktivierungsfunktion output = Menge der Ausgabeneuronen Downstream (j) = direkte Nachfolger des Neurons j 13
Vorgaben Backpropagation Algorithmus I Menge T von Trainingsbeispielen (Eingabevektor/ Ausgabevektor) Lernrate η Netztopologie Anzahl und Ausmaße der Zwischenschichten Schichten sind vollständig vorwärts gerichtet verbunden Lernziel Finden einer Gewichtsbelegung W, die T korrekt wiedergibt 14
Backpropagation Algorithmus II Initialisieren der Gewichte mit kleinen zufälligen Werten Wiederhole Auswahl eines Beispielmusters d Bestimmen der Netzausgabe Bestimmen des Ausgabefehlers (bzgl. Sollausgabe) Sukzessives Rückpropagieren des Fehlers auf die einzelnen Neuronen Anpassen der Gewichtsbelegung um solange ein gewähltes Abbruchkriterium nicht erfüllt ist! 15
Topologieauswahl Zusammenhang zwischen Anzahl der (hidden) layer und Zielfunktion? 3 Layer (1 hidden Layer - sigmoid): jede Boolsche Funktion jede kontinuierliche beschränkte Funktion [Cybenko 1989, Hornik et al. 1989] 4 Layer (2 hidden Layer -sigmoid) beliebige Funktionen mit beliebiger Genauigkeit [Cybenko 1988] Schon eine geringe Tiefe ist ausreichend 16
Lernverhalten - Topologieauswahl Anzahl der Neuronen pro Schicht im Bezug zu der Anzahl von (stochastisch unabhängigen) Lerndaten ist wichtig Aber: allgemeine Aussage nicht möglich Beispiel: gestrichelte Kurve soll eingelernt werden wenig Neuronen viele Neuronen wenig Lerndaten 17
Auswahl repräsentativer Trainingsbeispiele Lerndaten für die Anpassung der Gewichte Verifikationsdaten für das Testen der Generalisierung gute Verteilung der Beispiele Klassifikation: Daten aus allen Klassen Regression: gesamter Definitionsbereich Beispiele insbesondere aus komplexen Regionen Klassifikation: Randregionen zwischen Klassen Regression: Verlaufsänderungen 18
Overfitting Fehler auf Verifikationsdaten steigt ab einer Anzahl von Lernzyklen Mögliches Abbruchkriterium für Lernvorgang 19
Fragen? Labor Wissensrepräsentation 20
Literatur Tom Mitchell: Machine Learning. McGraw-Hill, New York, 1997. M. Berthold, D.J. Hand: Intelligent Data Analysis. P. Rojas: Theorie der Neuronalen Netze Eine systematische Einführung. Springer Verlag, 1993. C. Bishop: Neural Networks for Pattern Recognition. Oxford University Press, 1995. Vorlesung Neuronale Netze 2006 : http://isl.ira.uka.de/ siehe auch Skriptum Ein kleiner Überblick über Neuronale Netze : http://www.dkriesel.com/