kurze Wiederholung der letzten Stunde: Neuronale Netze martin.loesch@kit.edu (0721) 608 45944 Labor Wissensrepräsentation
Übersicht Neuronale Netze Motivation Perzeptron 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.
AUFGABEN AUS LETZTER STUNDE 9
Aufgabe 1: Einrichtung Einrichtung der Library für die weitere Verwendung Download Entpacken in Visual C++ geeignet einbinden von allen erfolgreich beendet? 10
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::Threshold); 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); 11
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 < θ 12
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); 13
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); 14
XOR-Aufgabe (Aufgabe 2: Perzeptronen) c) Für den Fall von genau 2 Eingängen: Realisiere einen XOR-Operator unter Einsatz mehrerer Perzeptronen. Lösung: Mind. 2 Perzeptronen zur Erkennung von Teillösungen, mind. 1 Perzeptron zur Kombination der Teillösungen. 15
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 bias = -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; 16
Aufgabe 3: Netz von Perzeptronen Die Verknüpfung mehrerer Perzeptronen zu einem Netz erlaubt die Lösung auch komplexerer Probleme als nur die linear separierbaren. Löse mit Hilfe eines Netzes von mehreren Perzeptronen das dargestellte Klassifikationsproblem (2 diskrete Eingänge, mögliche Werte: {0, 1, 2, 3}). Aufbau der Lösung: 2 Eingaben, das eigentliche Netz von Perzeptronen, pro zu erkennender Klasse je ein x 1 Ausgabe-Perzeptron. x 2 Aufgabe 17
Fragen? Labor Wissensrepräsentation 18
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/