Ich habe die AI-Klasse bei Coursera und ich habe eine Frage im Zusammenhang mit meiner Umsetzung des Gradientenabstiegsalgorithmus.
vor kurzem begonnenHier ist meine aktuelle Implementierung (ich habe die mathematischen Ausdrücke einfach in Java-Code übersetzt):
%Vor%}
Der Code funktioniert ganz gut, aber nur, wenn ich ein wenig Alpha wähle, hier LearningRate genannt. Wenn es höher als 0,00001 ist, divergiert es.
Haben Sie Vorschläge, wie die Umsetzung zu optimieren oder eine Erklärung für die „Alpha-Ausgabe“ und eine mögliche Lösung für das?
Aktualisierung:
Hier ist der Hauptteil einschließlich einiger Beispieleingaben:
%Vor%Der mathematische Ausdruck des Gradientenabfalls ist wie folgt:
Um dieses Problem zu lösen, müssen die Daten mit diesem Formular normalisiert werden: (Xi-mu) / s. Xi ist der aktuelle Trainingssatzwert, der Mittelwert der Werte in der aktuellen Spalte und der Maximalwert minus dem Minimalwert der aktuellen Spalte. Diese Formel wird die Trainingsdaten ungefähr in einen Bereich zwischen -1 und 1 bringen, was es ermöglicht, höhere Lernraten und Gradientenabstieg zu wählen, um schneller zu konvergieren. Aber es ist danach notwendig, das vorhergesagte Ergebnis zu denormalisieren.
In dieser Funktion. Ergebnisvariable überschreibt jede Iteration, wobei der alte Wert verloren geht. Bei der Eingabe der Werte berechnet nur das letzte Element im Array. Der Rest von ihnen ist egal.
Sie sollten java.math.BigDecimal für Ihre arithmetischen Operationen verwenden.
double hat seine Abrundungsprobleme bei der Ausführung von Arithmetik.
Tags und Links java artificial-intelligence gradient-descent