Wie lässt sich die Lernrate und die Varianz eines Gradienten-Algorithmus bestimmen?

9

Ich habe letzte Woche angefangen, das maschinelle Lernen zu lernen. Wenn ich ein Gradientenskript erstellen möchte, um die Modellparameter zu schätzen, stieß ich auf ein Problem: Wie man eine angemessene Lernrate und Varianz auswählt. Ich fand, dass unterschiedliche (Lernrate, Varianz) Paare zu unterschiedlichen Ergebnissen führen können Manchmal kann man sogar keine Konvergenz erreichen. Auch wenn ein anderer Trainingsdatensatz geändert wird, wird ein gut ausgewähltes Paar (Lernrate, Varianz) wahrscheinlich nicht funktionieren. Zum Beispiel (Skript unten), wenn ich die Lernrate auf 0,001 und die Abweichung auf 0,00001 setze, kann ich für 'data1' die passende theta0_guess und theta1_guess bekommen. Aber für 'data2' können sie nicht die Konvergenz der Algorithmen erreichen, selbst wenn ich versuchte, dass Dutzende (Lernrate, Varianz) Paare immer noch nicht zur Konvergenz gelangen können.

Wenn also jemand mir sagen könnte, dass es einige Kriterien oder Methoden gibt, um das Paar (Lernrate, Varianz) zu bestimmen.

%Vor%     
zhoufanking 19.05.2013, 23:13
quelle

2 Antworten

14

Plotten ist der beste Weg, um zu sehen, wie Ihr Algorithmus funktioniert. Um zu sehen, ob Sie Konvergenz erreicht haben, können Sie die Entwicklung der Kostenfunktion nach jeder Iteration grafisch darstellen, nach einer bestimmten Iteration werden Sie sehen, dass es nicht viel besser ist, Sie können Konvergenz annehmen, schauen Sie sich den folgenden Code an:

%Vor%

Dies wird die folgende Grafik darstellen (Ausführung mit Lernrate = 0,01, Varianz = 0,00001)

Wie Sie sehen, werden Sie nach tausend Iterationen nicht viel verbessern. Normalerweise erkläre ich die Konvergenz, wenn die Kostenfunktion in einer Iteration weniger als 0.001 abnimmt, aber dies basiert nur auf meinen eigenen Erfahrungen.

Bei der Wahl der Lernrate ist es das Beste, was Sie tun können, die Kostenfunktion zu plotten und zu sehen, wie sie funktioniert, und immer an diese beiden Dinge zu denken:

  • Wenn die Lernrate zu klein ist, erhalten Sie eine langsame Konvergenz
  • Wenn die Lernrate zu groß ist, verringert sich Ihre Kostenfunktion nicht in jeder Iteration und daher konvergiert sie nicht

Wenn Sie Ihren Code ausführen, wählen Sie learning_rate & gt; 0.029 und Varianz = 0.001 Sie werden im zweiten Fall sein, Gradientenabstieg konvergiert nicht, während, wenn Sie Werte learning_rate & lt; 0,0001, Varianz = 0,001 Sie werden sehen, dass Ihr Algorithmus eine Menge Iteration benötigt, um zu konvergieren.

Nicht Konvergenzbeispiel mit Lernrate = 0.03

Langsames Konvergenzbeispiel mit Lernrate = 0,0001

    
jabaldonedo 20.05.2013, 11:09
quelle
0

Es gibt eine Reihe von Möglichkeiten, die Konvergenz eines Gradienten-Algorithmus zu garantieren. Es gibt eine Liniensuche, eine feste Schrittgröße, die sich auf die Lipschitz-Konstante des Gradienten bezieht (das ist im Falle einer Funktion. Bei einer Tabelle wie Ihrer können Sie die Differenz zwischen aufeinanderfolgenden Werten bestimmen), eine abnehmende Schrittgröße für jede Iteration und einige andere. Einige davon finden Sie hier .

    
Hugo Goncalves 21.07.2013 07:06
quelle