Nur zum Spaß versuche ich, ein neuronales Netzwerk aufzubauen.
Für die Rückübertragung habe ich zwei Techniken gesehen.
Der erste wird hier und auch an vielen anderen Orten verwendet.
Was es tut, ist:
- Es berechnet den Fehler für jedes Ausgangsneuron.
- Es überträgt es zurück in das Netzwerk (Berechnung eines Fehlers für jedes innere Neuron).
- Es aktualisiert die Gewichte mit der Formel: (wo ist die Gewichtsänderung, die Lerngeschwindigkeit, der Fehler des Neurons, das die Eingabe von der Synapse empfängt und die Ausgabe ist, die auf der Synapse gesendet wird).
- Es wird für jeden Eintrag des Datensatzes so oft wie erforderlich wiederholt.
Das in diesem Tutorial vorgeschlagene neuronale Netzwerk (auch auf GitHub verfügbar) verwendet jedoch eine andere Technik:
- Es wird eine Fehlerfunktion verwendet (die andere Methode verfügt zwar über eine Fehlerfunktion, verwendet sie jedoch nicht für das Training).
- Es hat eine andere Funktion, die den endgültigen Fehler ausgehend von den Gewichten berechnen kann.
- Diese Funktion wird minimiert (durch Gefälle).
Welche Methode sollte nun angewendet werden?
Ich denke, der erste ist der am häufigsten verwendete (weil ich verschiedene Beispiele dafür gesehen habe), aber funktioniert das auch?
Insbesondere weiß ich nicht:
- Unterliegt es nicht eher lokalen Minimums (da es keine quadratischen Funktionen verwendet)?
- Haben Einträge des Datensatzes, die zufällig höhere Werte in den Neuronen erzeugen (nicht nur die ausgegebenen), mehr Einfluss auf die Gewichtung als andere Einträge, da die Variation der einzelnen Gewichte vom Ausgabewert des ausgegebenen Neurons beeinflusst wird?
Jetzt bevorzuge ich die erste Technik, weil ich finde, dass sie einfacher zu implementieren und leichter zu überlegen ist.
Gibt es einen tatsächlichen Grund für die Verwendung der zweiten Methode, wenn sie die genannten Probleme aufweist (was ich hoffe, dass dies nicht der Fall ist)?