kurze Wiederholung der letzten Stunde: Neuronale Netze martin.loesch@kit.edu (0721) 608 45944 Labor Wissensrepräsentation
Neuronale Netze Motivation Perzeptron Übersicht Multilayer Neural Networks Grundlagen für praktische Übungen Aufgaben der letzten Stunde 2
NEURONALE NETZE 3
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 4
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) 5
Perzeptron verstehen geometrische Interpretation: Trennhyperebene (in R 2 : Gerade) Gewichte definieren genaue Lage der Ebene (Gewichte = Normale der Ebene) Gewichtete Summe = Skalarprodukt aus Eingaben und Gewichtsvektor p 1 Gewichtsvektor > 0 p 2 Gewichtsvektor > 0 n 1 Gewichtsvektor < 0 n 2 Gewichtsvektor < 0 6
Lernen - Geometrische Interpretation Hilfsmenge { } N = x x = x, x N Neues Lernproblem xw > 0, x N P Im Beispiel: alle x i aus P
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.
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 9
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 10
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 11
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! 12
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 13
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 14
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 15
Overfitting Fehler auf Verifikationsdaten steigt ab einer Anzahl von Lernzyklen Mögliches Abbruchkriterium für Lernvorgang 16
GRUNDLAGEN FÜR PRAXIS- ÜBUNGEN 17
C++-Library Flood Open Source Neural Networks Library in C++ verfügbar unter http://www.cimne.com/flood/download.asp Bietet Perzeptronen Multi-layer Netzwerke verschiedene Trainingsalgorithmen weitere Utilities Verwendbar zur Lösung der folgenden Aufgaben 18
AUFGABEN AUS LETZTER STUNDE 19
Aufgabe 1: Einrichtung Einrichtung der Library für die weitere Verwendung Download Entpacken in Visual C++ geeignet einbinden von allen erfolgreich beendet? 20
Aufgabe 2: Perzeptronen (1) a) Verwende die Klasse Perceptron der Flood-Library, um von Hand einen logischen AND-Operator zu programmieren (2 Eingänge, 1 Ausgang, 1&1=1, 1&0=0, 0&1=0, 0&0=0). von allen erfolgreich beendet? mögliche Lösung: AndOp = new FL::Perceptron(2); FL::Vector<double> weights(2); AndOp.set_activation_function(FL::Perceptron::Linear); AndOp->set_bias(-0.75); weights[0] = 0.5; weights[1] = 0.5; AndOp->set_synaptic_weights(weights); FL::Vector<double> inputs(2); inputs[0] = INPUT1; inputs[1] = INPUT2; double outputsignal = AndOp->calculate_output(inputs); 21
Aufgabe 2: Perzeptronen (2) Wie kommt man zu den Parametern? Ausprobieren Grafisch überlegen (Gewichtsvektor = Normalenvektor) Gleichungssystem aufstellen: 1 w 1 +1 w 2 = w 1 + w 2 > θ 0 w 1 +1 w 2 = w 2 < θ 1 w 1 +0 w 2 = w 1 < θ 22
Aufgabe 2: Perzeptronen (3) b) Erweitere die Lösung von Teilaufgabe a), so dass der Benutzer die Anzahl der Eingaben auswählen kann und neben dem AND-Operator auch ein OR-Operator realisiert wird. alle erfolgreich? mögliche Lösung für AND: AndOp = new FL::Perceptron(numberOfInputSignals); FL::Vector<double> weights(numberofinputsignals); double andinputweight = 1.0 / numberofinputsignals; double andthreshold = 1.0 (andinputweight / 2.0); AndOp->set_bias(-andThreshold); for (int i=0; i<numberofinputsignals; i++){ weights[i] = andinputweight; } AndOp->set_synaptic_weights(weights); 23
Aufgabe 2: Perzeptronen (4) mögliche Lösung für AND: AndOp = new FL::Perceptron(numberOfInputSignals); FL::Vector<double> weights(numberofinputsignals); double andinputweight = 1.0 / numberofinputsignals; double andthreshold = 1.0 (andinputweight / 2.0); AndOp->set_bias(-andThreshold); for (int i=0; i<numberofinputsignals; i++){ weights[i] = andinputweight; } AndOp->set_synaptic_weights(weights); mögliche Lösung für OR: double orinputweight = 1.0 / numberofinputsignals; double orthreshold = orinputweight / 2.0); OrOp->set_bias(-orThreshold); for (int i=0; i<numberofinputsignals; i++){ weights[i] = orinputweight; } OrOp->set_synaptic_weights(weights); 24
Aufgabe 2: Perzeptronen (5) c) Für den Fall von genau 2 Eingängen: Realisiere einen XOR-Operator unter Einsatz mehrerer Perzeptronen. alle erfolgreich? mögliche Lösung: FL::Perceptron xorul(2), xorlr(2), xorout(2); double threshold = 0.25; FL::Vector<double> xulweights(2), xlrweights(2), xoroutweights(2); xulweights[0] = 0.5; xulweights[1] = -0.5; xlrweights[0] = -0.5; xlrweights[1] = 0.5; xoroutweights[0] = 0.5; xoroutweights[1] = 0.5; Normalisierung der jeweiligen Ausgaben 25
Fragen? Labor Wissensrepräsentation 26
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/