(künstliche) Neuronale Netze (c) Till Hänisch 2003, BA Heidenheim
Literatur zusätzlich zum Lit. Verz. Michael Negnevitsky, Artificial Intelligence, Addison Wesley 2002
Warum? Manche Probleme (z.b. Klassifikation) durch Programme schwer lösbar Vergabe von Krediten, Mustererkennung, Kaufentscheidung bei Wertpapieren Formulierung expliziter Regeln unsicheres Wissen für Menschen leicht(er) Simulation der Funktionsweise des menschl. Gehirns Wie funktioniert das Gehirn?
Aufbau des Gehirns Säugetiergehirn, Ausschnitt Aus [Cell], S. 1119 Axon Neuron
Neuron Struktur eines Neurons, Die Pfeile geben die Richtung des Signalflusses an. Das Axon ist der Ausgang des Neurons, die Dendriten die Eingänge Aus [Cell], S. 528
Signalübertragung Aktionspotential Wird durch kurzen Impuls ausgelöst, der die Membran kurzzeitig depolarisisiert (grüne Kurve im mittleren Bild). Dadurch werden spannungsgesteuerte Na- Kanäle geöffnet (Na-Ionen strömen durch den geöffneten Kanal aus). Nach Inaktivierung des Kanals geht das Membranpotential langsam wieder auf das Ruhepotential zurück (durch Einstrom von K- Ionen durch Kalium Kanäle) Aus [Cell], S. 529
Lernen Eliminierung von Synapsen Zunächst ist jedes Neuron mit zahlreichen anderen Verbunden. Durch komplexe Vorgänge (konkurrierende Aktivierung von Na-Kanälen) werden Synapsen (=Verbindungen zwischen Axon und Dendriten) eliminiert. Aus [Cell], S. 1128
künstliche Neuronen künstliches neuronales Netzwerk Die genaue Funktion der Neuronen im Gehirn (oder allgemein bei der Signalübertragung zwischen Zellen) ist im Detail nicht geklärt. Künstliche neuronale Netze können als Modell dienen, um die tatsächlichen Vorgänge besser zu verstehen. Die Neuronen werden in Schichten angeordnet (übl. 1-10 innere Layer), jedes Axon ist mit allen Dendriten der nächsten Schicht verbunden. Die Aktivierung eines Neurons hängt von seinen Eingängen ab, die Verbindungen haben eine spezifische Stärke d.h. Gewichtung. Beim Lernen werden die Synapsen nicht tatsächlich eliminiert, sondern die Gewichtungsfaktoren verändert (ggf. auf 0) Aus [Cell], S. 779
Exkurs Intrazelluläre Prozesse können ebenfalls durch neuronale Netze dargestellt werden: Spezifische Rezeptoren aktivieren Kinasen. Die Abbildung zeigt ein (stark vereinfachtes) Modell einer zellulären Kommunikationskette, das Prinzip ist jedoch das tatsächlich vorhandene. Aus [Cell], S. 781
künstliches Neuron Künstliches Neuron. Die Eingänge xi werden mit den Gewichten wi multipliziert. Die Aktivierung erfolgt durch eine Schwellwertfunktion f. Die Werte sind kontinuierlich (Unterschied zum tatsächlichen Neuron, hier wird die Intensität der Stimulierung durch die Zahl der aktivierten Neuronen und die Frequenz der Aktivierungen bestimmt) Aus [Luger], S. 462
Schwellwertfunktion Verschiedene Schwellwertfunktionen Durch diese Funktion wird das Aktivierungsverhalten festgelegt. Bei geringer Erregung soll keine Aktivierung stattfinden, ab einer bestimmten Schwelle soll das Neuron aktiviert werden. Die Θ- Funktion hat den (später entscheidenden) Nachteil, nicht differenzierbar zu sein. Wir verwenden zunächst die Θ Funktion (a), später eine logistische Funktion (c): f(x)=1/(1+exp(-λx)) Aus [Luger], S. 470
Perceptron Ein einfaches Perceptron (Rosenblatt 1958) Zwei Eingänge, Ergebnis ist t < t public double calc(double x1, double x2) { double sum = x1*w1 + x2*w2 + Bias*w3; double my_result; if (sum >= t) my_result = 1; else my_result = -1; return my_result; Der dritte (verborgene) Eingang wird als Kalibrierung oder Bias bezeichnet und hat einen festen Wert (hier 1) Beispiel: Berechnung der logischen UND Funktion, w1=w2=1, w3=-2 x y s f(s) 1 1 0 1 1 0-1 -1 0 1-1 -1 0 0-2 -1 } Aber: Woher kommen die Gewichte?
lernen Überwachtes Lernen: Das Neuron erhält (beliebige) Eingabewerte xi, der Ausgabewert f wird berechnet und mit dem (vom Trainer) vorgegebenen Ergebnis d verglichen. Die Gewichte wi werden so angepasst, dass das gewünschte Ergebnis erzielt wird: wi=c(d-f)xi 0.75 0.5-0.6 0.75 0.5-0.6 System.out.println(w1 + " " + w2 + " " + w3); double myresult = calc(x1,x2); w1=w1+c*(result-myresult)*x1; w2=w2+c*(result-myresult)*x2; w3=w3+c*(result-myresult)*bias; System.out.println(w1 + " " + w2 + " " + w3); System.out.println(""); Beispiel: c=0.2, w1=0.75, w2=0.5, w3=-0.6 nach 10 Trainingsrunden hat das Neuron die Funktion gelernt, Ausgabe: 0.0 AND 0.0 = -1.0 1.0 AND 1.0 = 1.0 0.0 AND 1.0 = -1.0 1.0 AND 0.0 = -1.0 0.75 0.5-0.6 0.75 0.5-0.6 0.75 0.5-0.6 0.75 0.5-0.6 0.75 0.5-0.6 0.75 0.5-0.6 0.75 0.5-0.6 0.35 0.5-1.0 0.35 0.5-1.0 0.75 0.9-0.6 0.75 0.9-0.6 0.75 0.9-0.6 0.75 0.9-0.6 0.75 0.9-0.6 0.75 0.9-0.6 0.75 0.5-1.0 0.75 0.5-1.0 0.75 0.5-1.0 so bleibt s dann
anderes Beispiel: logische XOR-Funktion, Ergebnis nach 200 Trainigsrunden: 1.0 XOR 1.0 = -1.0 0.0 XOR 1.0 = -1.0 1.0 XOR 0.0 = -1.0 0.0 XOR 0.0 = -1.0 Haeh? Funktioniert nicht! Warum nicht? Was kann ein einzelnes Neuron? Eingabewerte klassifizieren, Grenze ist lineare Funktion (Gerade) Wie sieht s bei der XOR-Funktion aus? Komplexe Klassifikation
XOR-Problem eine mögliche Lösung Wie trainiert man ein solches Netz? Unser Verfahren (Perceptron-Lernverfahren) funktioniert nur bei einem einzelnen Neuron, Problem hier (mehrere Schichten): Wie müsste das Ergebnis eines der mittleren Neuronen sein? Nur so ist ein Vergleich möglich! nach [Luger], S. 479
Backpropagation Backpropagation Algorithmus aus [Luger], S. 473 Wie funktioniert s? W=cδi(j)X δ(k)=(d-f)f(1-f) : letzte Schicht δi(j)=fi(j)(1-fi(j)) δl(j+1)wil(j+1) : innere Schichten Rekursion beginnend bei letzter Schicht
Architektur Klassifikationssystem Ein neuronales Netz muss die zu untersuchenden Merkmale als Eingabe an den Neuronen der ersten Schicht erhalten. Diese müssen aus den Rohdaten extrahiert werden, z.b. Spracherkennung beim Autotelefon: Die Phoneme werden aus dem Audio-Datenstrom extrahiert aus [Luger], S. 467
NETtalk NETtalk Architektur Sejnowski, Rosenberg, 1987 Aussprache von englischem Text regelbasierte Programme lösen diese Aufgabe nicht zufriedenstellend Als Eingabe werden Textstücke von je 7 Buchstaben verwendet, der mittlere Bichstabe soll ausgesprochen werden (Aussprache hängt vom Kontext ab, 29 Eingabeeinheiten für die Buchstaben + Satzzeichen)). Die Ausgabeeinheiten entsprechen 21 Phonemen sowie Silbengrenzen, Betonung. Training mit Backpropagation. Ergebnisse: Lernfortschritte sind zunächst gross, werden dann kleiner. Werden bei einem trainierten Netz einzelne Gewichte (zufällig) geändert, wird die Aussprache insgesamt etwas schlechter --> Fehlertoleranz aus [Luger], S. 478
Kreditvergabe Eine Bank will die Entscheidung über die Vergabe von Krediten automatisieren. Dazu werden eine reihe von Merkmalen definiert, anhand derer ein neuronales Netz entscheiden (klassifizieren) soll, ob ein Kredit vergeben, bzw. ob eine persönliche Begegnung nötig ist. Zum Training werden die folgenden Daten verwendet Unternehmen hoher Gewinn solide Rücklagen schlechte EK-Quote rückl. Umsatz Kreditvergabe pers. Empfang Albert GmbH - + - - ja ja Brova Verlag - + - + nein ja Calvin Fein + - - - ja ja Erdol Inc. - - + + nein nein FAG Autoteile + + - - ja nein Dolly Muster KG - - + - nein nein Zwei Neuronen (eins für Kredit, eins für pers. Empfang) mit jeweils 4 Eingängen (eben die Merkmale). Als Wertebereich für die Merkmale wird (-1,1) verwendet. Nach einem Übungsblatt des Lehrstuhls für Wirtschaftsinformatik I (Prof. Heinzl), Universität Mannheim
Kredit pers. Empfang public double calc(double x[]) { double sum = 0; for(int i=0;i<nrofinputs;i++) sum+=x[i]*w[i]; sum += Bias*w[NrOfInputs]; return (sum >= t)? 1 : -1; } public void learn(double x[], double result) { double myresult = calc(x); for(int i=0;i<nrofinputs;i++) w[i] = w[i] + c*(result-myresult)*x[i]; w[nrofinputs] = w[nrofinputs] + c*(result-myresult)*bias; } Unternehmen hoher Gewinn solide Rücklagen schlechte EK-Quote rückl. Umsatz Kreditvergabe pers. Empfang Mama s Grillstube + - + +?????? Kriegt Mama Kredit? [OfficeMac:KI/NN/Kredit] till% java Kredit Kriegt Mama's Grillstube Kredit? nein Darf Mama in die Bank? nein
lernen revisited Bisher: Beaufsichtigtes Lernen. Was ist, wenn kein Trainer da ist? Wie lernen Menschen? (etwa sehen)? Also: Unbeaufsichtigtes Lernen Hebb sches Lernen (Donald Hebb, 1949) Wenn ein Neuron i nahe genug an Neuron j ist, und wiederholt an dessen Aktivierung beteiligt ist, sollte die Synapse zwichen beiden verstärkt werden aus [Negnevitsky], S. 199 Anders: (Stent, 1973) Wenn zwei miteinander verbundene Neuronen gemeinsam aktiviert werden, wird das Gewicht der Verbindung verstärkt Wenn zwei miteinander verbundene Neuronen getrennt aktiviert werden, wird das Gewicht der Verbindung erniedrigt Problem: Die Gewichte werden (nach Hebb) während des Trainings immer weiter erhöht. Lösung: Die Gewichte werden durch einen forgetting factor in jedem Lernschritt reduziert: wij(p)=αyi(p)xi(p)-φyj(p)wij(p), α: Lernrate, Φ Vergesslichkeitsfaktor
Beispiel: Ein Netz mit 5 Neuronen. Zunächst wird eine Einheitsmatrix als Gewicht verwendet, die Schwelle der Sigma- Funktion wird mit zufälligen Werten aus (0,1) initialisiert. Nach Training mit den angegebenen Vektoren ergibt sich die Gewichtsmatrix der rechten Spalte. Ergebnis: Als Ausgabe auf den Vektor (1,0,0,0,1) erhält man (0,1,0,0,1). Die Eingabekomponente x5 ergibt ein Ergebnis bei den Neuronen 2 und 5. Die Komponente x1 taucht im Ergebnis nicht auf (was nicht weiter verwunderlich ist, da diese bei den Trainingsdaten nie vorkam). aus [Negnevitsky], S. 201
Wettbewerbslernen Beim Hebb schen Lernen sind (evtl.) mehrere Ausgangsneuronen gleichzeitig aktiv. Beim competitive learning wird ein Neuron ausgewählt (winner-takesall Neuron). Self organizing feature maps (Kohonen, 1989) aus [Negnevitsky], S. 203
Realisierung Die Neuronen haben Verbindungen zu allen Eingängen und zusätzlich Verbindungen untereinander, die zur Auswahl des stärksten Neurons dienen. Dabei wird jeweils unter den benachbarten Neuronen das mit der stärksten Aktivierung ausgewählt (Zu Beginn des Trainings aus einer relativ großen Umgebung, später immer kleiner). aus [Negnevitsky], S. 204
aus [Negnevitsky], S. 208 Beispiel Ein Netz aus 100 Neuronen (10x10 Gitter). Jedes Neuron hat zwei Eingänge (Klassifikation zweidimensionaler Vektoren) a) Ausgangskonfiguration, Gewichte zufällig b) Nach 100 Iterationen c) Nach 1000 Iterationen d) Nach 10000 Iterationen Training mit zufälligen Vektoren, Komponenten aus [-1,1]
Ergebnis: Das Netz erhält die Vektoren X1=(0.2,0.9) X2=(0.6,-0.2) X3=(-0.7,-0.8) Dadurch werden die Neuronen 6, 69 bzw. 92 aktiviert Jedes Neuron entspricht also einem Gebiet des Raums der Eingabedaten, also einem best. Muster