Gradientenabstieg in Java

8

Ich habe die AI-Klasse bei Coursera und ich habe eine Frage im Zusammenhang mit meiner Umsetzung des Gradientenabstiegsalgorithmus.

vor kurzem begonnen

Hier 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:

    
Bastian Schoettle 23.08.2015, 18:27
quelle

3 Antworten

1

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.

    
Bastian Schoettle 28.08.2015, 14:48
quelle
2
%Vor%

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.

    
Semih SÜZEN 28.05.2016 17:09
quelle
0

Sie sollten java.math.BigDecimal für Ihre arithmetischen Operationen verwenden.
double hat seine Abrundungsprobleme bei der Ausführung von Arithmetik.

    
Amit Bhati 23.08.2015 18:36
quelle