@ NamenLozer und Torpedo
Habe leider erst heute mal wieder Zeit gefunden, hier vorbei zu surfen. Sind ja schon etliche Antworten gekommen. Gibt also kaum noch was zu ergänzen, oder?
Vielleicht noch, dass man in die Neuronen gern die Sigmoidfunktion reinpackt. Sie lautet:
Result := 1 / (1 + exp(-x/t))
wobei x die Summe aller gewichteten Eingangssignale eines Neurons ist.
Man nimmt sie deshalb so gerne, weil sie im ganzen Definitionsbereich monoton wachsend und stetig und differenzierbar ist.
Dadurch lässt sich bei der Rückwärtsrechnung mathematisch recht einfach berechnen, wie die Synapsengewichte verändert werden müssen, damit das Ergebnis besser wird. Außerdem hat sie als Ergebnis immer einen Wert zwischen 0 und 1
Vernetzt man nun viele dieser Neuronen z.B. in 3 Schichten (E, V und A), dann sieht die Vorwärts-Reizleitung in einem solchen Netz also für die Strecke von den Eingabeneuronen zu den verdeckten Neuronen so aus:
Delphi-Quellcode:
for V := 1 to MaxV do
begin
SummeV[V] := 0;
end;
for V := 1 to MaxV do
begin
for E := 0 to MaxE do // hinter dem Index E=0 verbirgt sich RE[0]=-1 und GEV[0,V]=Biaswert des Neurons Nr.V
begin
SummeV[V] := SummeV[V] + GEV[E,V] * RE[E];
end;
end;
for V := 1 to MaxV do
begin
RV[V] := sig(SummeV[V]);
end;
GEV sind die Synapsengewichte (und Biaswerte), RE die Reizwerte der Eingabeneuronen, RV die Reizwerte der verdeckten Neuronen.
In der nächsten Schicht (zu den Ausgabeneuronen) dann analog.
Bei der Rückwärtsrechnung werden dann die Synapsengewichte GEV bzw GVA entsprechend der aufgetretenen Abweichung zum Sollergebnis angepasst. Hier multipliziert man aber noch einen Lernfaktor 0 < LF < 1 mit rein. Schließlich bringt dich dein Lehrer ja auch nicht gleich bei jedem Fehler um, sondern geht sie Sache etwas geduldiger an. ;o)
Die Formeln hierfür führen aber wohl hier zu weit...