multilayer-perceptron in excel abbilden

Neue Frage »

neuron Auf diesen Beitrag antworten »
multilayer-perceptron in excel abbilden
Meine Frage:
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
neuron Auf diesen Beitrag antworten »
graph des perceptrons
anbei bild
 
 
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?
Leopold Auf diesen Beitrag antworten »

multilayer, perceptron, neuronen, eingang, ausgang, zwischenschicht, BIAS, supervised, backpropagation, leak, ... verwirrt

smile 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. smile
neuron Auf diesen Beitrag antworten »
erste schritte
hallo kiste,

danke für dein angebot mir zu helfen Gott . jedes wissen ist mir willkommen Wink

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 Mit Zunge
kiste Auf diesen Beitrag antworten »
RE: erste schritte
Zitat:
Original von neuron
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 ?

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.
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 Big Laugh (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 geschockt

jetzt kommen wieder meine fragen (ab jetzt neuland, da ich den backprop-prozess noch nicht verstanden und durchegführt habe verwirrt )

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 ! Prost
sven

ps: wie kann ich dich ansprechen, ausser "kiste" ?
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.
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »