multilayer-perceptron in excel abbilden |
13.03.2010, 16:53 | neuron | Auf diesen Beitrag antworten » | ||
multilayer-perceptron in excel abbilden hallo und guten tag, ich beschäftige mich interessehalber mit KNN, speziell die abbildung und programmierung eines multilayer-perceptrons in excel würde ich gerne lernen und umsetzen. sehr gute kenntnisse in excel und vba vorhanden. ich bin berufstätig, 38 jahre und mathematische grundkenntnisse sind vorhanden. was stelle ich mir vor ? die geführte schrittweise umsetzung eines perceptrons unter herannahme konkreter beispielfälle, damit mir die abstrakten formeln auch irgendwas sagen ;o) über vergütungen können wir reden ;o) beispielsweise möchte ich folgendes modellieren/umsetzen/kapieren: - multilayer perceptron mit 3 eingangsneuronen, einer zwischenschicht mit zwei neuronen und einem ausgangsneuron, - die 3 eingangsneuronen verarbeiten nichtbinäre inputs (konkret: die zahlen 1, 2 und 3) - die neuronen der zwischenschicht und der ausgangsschicht verwenden ein BIAS - das ausgangsneuron liefert 1 oder 0 - lernverfahren: supervised, backpropagation (umsetzung eines zwei-schichtigen perceptrons bereits realisiert/kapiert). mein größtes leak ist der prozess backpropagation wer kann/möchte mir helfen ? danke für feedback gruß, sven direktantwort auch möglich: [email protected] Meine Ideen: siehe oben |
||||
13.03.2010, 18:44 | neuron | Auf diesen Beitrag antworten » | ||
graph des perceptrons anbei bild |
||||
13.03.2010, 19:02 | kiste | Auf diesen Beitrag antworten » | ||
Puh, das ganze ist schon wieder etwas her aber versuchen wir einmal ob ich dir nicht helfen kann. Ich muss dazu sagen dass ich dir in Excel selbst nicht helfen kann, dort musst du also selbst mit dem Programmieren zurecht kommen. Der Backpropagationansatz besteht ja prinzipiell aus 2 Schritten. Zuerst einmal wertest du dein Eingabesignal durch das Netz um dem Fehler mit dem Trainingsbeispiel zu berechnen. Hast du diesen Schritt bereits programmiert oder bestehen bereits dort Probleme? Welche Aktivierungsfunktionen hast du gewählt? |
||||
13.03.2010, 19:18 | Leopold | Auf diesen Beitrag antworten » | ||
multilayer, perceptron, neuronen, eingang, ausgang, zwischenschicht, BIAS, supervised, backpropagation, leak, ... Ich finde das irgendwie total komisch. Vielleicht weil ich nichts davon verstehe. Aber vielleicht geht es ja auch den Nichtmathematikern so, wenn sie uns reden hören. |
||||
13.03.2010, 22:45 | neuron | Auf diesen Beitrag antworten » | ||
erste schritte hallo kiste, danke für dein angebot mir zu helfen . jedes wissen ist mir willkommen ich beschreibe mal ausführlich meine herangehensweise, wenn jemand schon im ansatz einen fehler entdeckt, bitte mitteilen. ich habe mir das wissen aus dem netz zusammengeklaubt, also kein anspruch auf richtigkeit. ziel: netz soll muster erkennen aus 3 eingangssignalen, welche jeweils den zustand 3,2 und 1 annehmen können, entsprechend meiner eingruppierung in stark, mittel und schwach. der output soll 0 oder 1 sein. das netzt wird überwacht trainiert. ein perceptron aus zwei schichten würde hier nicht ausreichen wegen fehlender linearer separierbarkeit. die anfangsgewichte vor dem ersten lernschritt sind: (die neuronen der eingangsschicht heißen E1, E2 und E3. die zwischenschicht besteht aus Z1 und Z2. das ausgangsneuron heißt A1. BIAS für Z1 und Z2 sowie A1. lernrate 0,3 w_E1_Z1 -0,4 w_E2_Z1 0,1 w_E3_Z1 -0,2 w_BIAS_Z1 0,3 w_E1_Z2 0,7 w_E2_Z2 0,8 w_E3_Z2 -0,1 w_BIAS_Z2 -0,5 w_Z1_A1 0,2 w_Z2_A2 -0,4 w_BIAS_A1 0,3 für die neuronen Z1, Z2 und A1 habe ich als aktivierungsfunktion die summation der signale gewählt. ist das ergebnis größer 0 wird gefeuert, ansonsten nicht. konkret hieße das für den ersten lernschritt: E1 = 1, E2 = 3, E3 = 2. Netzoutput A1 soll 1 sein. ermittlung der werte für Z1 und Z2 (gewichte siehe oben): Z1 = -0,4*1 + 0,1*3 + -0,2*2 + BIAS 0,3 = -0,2 --> -0,2 ist kleiner als 0 --> Z1 feuert nicht. Z2 = 0,7*1 + 0,8*3 + -0,1*2 + BIAS -0,5 = 2,4 --> 2,4 ist größer als 0 --> Z1 feuert. konkrete fragen zu diesem schritt: 1. mit welchem wert feuert Z2 ? mit 1 oder mit 2,4 ? 2. wie wird der eingangswert von A1 konkret berechnet ? 3. wie wird der fehler des netzes für den ersten lernschritt berechnet ? 4. wie wird der fehler jetzt zurück durch das netz gejagt und wie ändern sich jetzt die gewichte ? 5. hab ich hier schon große klöpse drin bisher ? vielen dank für konkrete fingerzeige |
||||
13.03.2010, 23:12 | kiste | Auf diesen Beitrag antworten » | ||
RE: erste schritte
1. Mit 1, jedenfalls wenn du das Standardmodell mit deiner Aktivierungsfunktion benutzt. Zur Funktion mehr noch im Punkt 5. 2. Du nimmst die Werte die Z1 und Z2 ausgeben, multiplizierst jeweils mit den Gewichten, subtrahierst deinen BIAS und wieder in die Aktivierungsfunktion rein. Also genauso wie in der ersten Schicht bereits. 3. Das kommt auf das Fehlermaß an. Üblich wäre die quadrierte Summe der Differenzen der Ausgabe und des Sollwertes(den gibst du ja vor). In diesem Fall also einfach(da wir vorerst nur von einem Trainingsbeispiel ausgehen: (Wert der Ausgabe - Soll)^2. 4. Das ist etwas komplizierter. Brauchst du eine Herleitung oder reicht es wenn ich erst einmal nur die Formel raussuche? 5. Ja. Das Backpropagation-Verfahren benötigt meines Wissens nach eine differenzierbare Aktivierungsfunktion. Typisch sind dazu sigmoide Funktionen, z.B. |
||||
Anzeige | ||||
|
||||
14.03.2010, 16:57 | neuron | Auf diesen Beitrag antworten » | ||
RE: erste schritte hallo kiste, vielen dank für deine ausführliche antwort. ich sehe jetzt schon, dass ich teilweise wohl schon auf dem falschen weg war. ich habe das beispiel um deine anregungen erweitert und korrigiert, wäre nett wenn du die schritte mit mir nochmal durchgehst, damit ich sehe dass ich bis dato alles richtig habe. als aktivierungsfunktion habe ich die von dir vorgeschlagene funktion akt = 1/(1+EXP(-x)) gewählt, die ich auch in anderen abhandlungen schon entdeckt hatte, dachte aber ich könnte mich davor drücken (irgendwo anders hatte ich nämlich das hier gelesen: "Weiterhin benötigen wir für die partiellen Ableitungen der Fehlerfunktion ableitbare Aktivierungsfunktionen. Da dies bei den einfachen Sprungfunktionen nicht gegeben ist, nähern wir das Gradientenverfahren durch ein Differenzenverfahren an.") als fehlerfunktion des netzes habe ich auch deine formel verwendet, in excel heißt das fehl = QUADRATESUMME((ist-soll)) angewendet auf mein beispiel, erhalten wir nun folgende werte: Z1 berechnen oZ1 = -0,4*1 + 0,1*3 + -0,2*2 + BIAS 0,3 = -0,2 akt(Z1) = 1/(1+EXP(-oZ1)) = 1/(1+EXP(-(-0,2)) = 0,4502 = aZ1 Z2 berechnen oZ2 = 0,7*1 + 0,8*3 + -0,1*2 + BIAS -0,5 = 2,4 akt(Z2) = 1/(1+EXP(-oZ2)) = 1/(1+EXP(-(2,4)) = 0,9168 = aZ2 am ausgangsneuron A1 kommt jetzt folgendes an: A1 berechnen oA1 = aZ1 * w_Z1_A1 + aZ2 * w_Z2_A1 + BIAS = 0,4502 * 0,2 + 0,9168 * -0,4 + 0,3 = 0,0233 akt(A1) = 1/(1+EXP(-oA1)) = 1/(1+EXP(-0,0233)) = 0,5058 der fehler des netzes wäre Netzfehler berechnen Soll = 1 fehl = QUADRATESUMME((ist-soll)) = QUADRATESUMME((0,5058-1)) = 0,2442 puhh jetzt kommen wieder meine fragen (ab jetzt neuland, da ich den backprop-prozess noch nicht verstanden und durchegführt habe ) 1. durch die "neue" aktivierungsfunktion erhalte ich für jedes neuron der zwischenschicht und der ausgangsschicht einen wert, auch wenn sie nach "alter" funktionsweise garnicht gefeurt hätten, da schwellwert nicht erreicht wurde. für Z1 erhalte ich jetzt bespielsweise den wert: akt(Z1) = 1/(1+EXP(-oZ1)) = 1/(1+EXP(-(-0,2)) = 0,4502 = aZ1 was sagt mir dieser wert jetzt ? feuert dieses neuron, wenn der wert positiv ist ? oder feuert es immer diesen wert ? oder feuert es, wenn dieser wert größer BIAS ist ? ich vermute, dass dieser wert immer weitergegeben wird, da er ja bei A1 wieder auftaucht ... 2. fehlerrückrechnung. ich denke, jetzt kommt das, was du in deiner letzten antwort unter 4. angeboten hast zu posten ... also schonmal VIEEEEELEN dank vorab ! sven ps: wie kann ich dich ansprechen, ausser "kiste" ? |
||||
20.03.2010, 08:39 | kiste | Auf diesen Beitrag antworten » | ||
Hallo, so finde jetzt mal Zeit etwas zu schreiben. Meines Wissens nach sind Differenzenquotienten als Annäherungen an Ableitungen eher schlecht. Versuchen wir es einmal mit einer differenzierbaren Funktion, die Funktion kannst du ja später dann leicht austauschen. Ist ja nur ein Baustein des Algorithmus. Zu deiner 1. Frage: Es wird auf jeden Fall feuern. Der Bias wurde ja bereits in der Aktivierungsfunktion benutzt. So zu 2. führe ich jetzt einmal ein paar Bezeichner ein. nenne ich das Gewicht von Neuron j an Neuron i in Schicht l. Zum Beispiel ist also dein w_E2_Z1 Mit bezeichne ich die Aktivierungsfunktion und ist dann logischerweise ihre Ableitung. Was noch fehlt sind die BIAS-Werte. So wie ich es kenne gibt es einen Bias pro Neuron an das gefeuert wird. In dem Fall fehlt also bei dir noch ein Bias in der 1. Schicht. Die Bias-Werte bezeichne ich mit , also der Bias in Schicht l an Neuron i. So jetzt geben wir dem Durchreichen durchs Netz noch ein paar Bezeichner. Das ist der Teil den du bereits programmiert hast: Wir nennen die Signale die durch das Netz gehen wieder also an Neuron i in Schicht l. Ich Schicht 0 legen wir den Eingang an, also . Bei dir im Bild ist also z.B. . Analog gilt dann . Wir summieren hier über j. Das sind alle verfügbaren Neuronen aus Schicht l-1. So, soweit hast du es bereits. Das war der Vorwärtsschritt. Jetzt kommt der Rückwärtsschritt für die Fehler. Den Fehler nennen wir , delta für Differenz. Das ist der Fehler an Neuron i in Schicht l. Es gilt für deine Endschicht: . f(x) ist dabei dein Soll-Wert. Für die restlichen Schichten gilt dann: . Hier wird also mit den Fehlern der Schicht weiter drüber "zurückgewichtet". So hast du das ist die Lernregel nicht mehr schwer: und fürs Bias . ist dabei ein Parameter zur Lerngeschwindigkeit. Da musst du ein bisschen rumspielen damit es gute Ergebnisse gibt. |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |