'Optimal' Variable Initialisierung und Lernrate in Tensorflow für Matrix-Faktorisierung

9

Ich versuche eine sehr einfache Optimierung in Tensorflow - das Problem der Matrixfaktorisierung. Geben Sie eine Matrix V (m X n) ein und zerlegen Sie sie in W (m X r) und H (r X n) . Ich leihe mir eine Gradienten-basierte Tensorflow-basierte Implementierung zur Matrix-Faktorisierung aus hier .

>

Details über die Matrix V. In seiner ursprünglichen Form wäre das Histogramm der Einträge wie folgt:

Um die Einträge auf eine Skala von [0, 1] zu bringen, führe ich die folgende Vorverarbeitung durch.

%Vor%

Nach der Normalisierung würde das Histogramm der Daten wie folgt aussehen:

Meine Fragen sind:

  1. Angesichts der Art der Daten: zwischen 0 und 1 und den meisten Einträgen, die näher bei 0 als 1 sind, was wäre die optimale Initialisierung für W und H ?
  2. Wie sollten die Lernraten basierend auf verschiedenen Kostenfunktionen definiert werden:   |A-WH|_F und |(A-WH)/A| ?

Das minimale Arbeitsbeispiel wäre wie folgt:

%Vor%

Somit sieht V_df so aus:

%Vor%

Nun, der Code definiert W, H

%Vor%

Definieren Sie Kosten und Optimierer:

%Vor%

Die Sitzung wird ausgeführt:

%Vor%

Ich erkannte, dass ich, wenn ich etwas wie initializer = tf.random_uniform_initializer(maxval=V_df.max().max()) benutzte, Matrizen W und H bekam, so dass ihr Produkt viel größer als V war. Ich erkannte auch, dass die Lernrate ( lr ) wahrscheinlich 0,0001 betrug langsam.

Ich habe mich gefragt, ob es irgendwelche Faustregeln gibt, um gute Initialisierungen und Lernraten für das Problem der Matrixfaktorisierung zu definieren.

    
Nipun Batra 28.03.2017, 13:18
quelle

1 Antwort

1

Ich denke, dass die Wahl der Lernrate ein empirisches Problem von Versuch und Irrtum ist, es sei denn, Sie verwenden einen zweiten Algorithmus, um optimale Werte zu finden. Es ist auch ein praktisches Problem, abhängig davon, wie viel Zeit Sie für die Berechnung zur Verfügung haben - vorausgesetzt, Sie haben verfügbare Rechenressourcen.

Allerdings sollte man beim Einstellen von Initialisierungs- und Lernraten vorsichtig sein, da einige Werte niemals konvergieren werden, abhängig vom Lernproblem der Maschine. Eine Faustregel ist, die Größe in Schritten von 3 und nicht 10 manuell zu ändern (nach Andrew Ng): Statt von 0,1 auf 1,0 zu wechseln, würden Sie von 0,1 auf 0,3 gehen.

Für Ihre spezifischen Daten, die mehrere Werte in der Nähe von 0 enthalten, ist es möglich, optimale Initialisierungswerte unter Berücksichtigung der spezifischen "Hypothese" / des Modells zu finden. Sie müssen jedoch "optimal" definieren. Sollte die Methode so schnell wie möglich, so genau wie möglich oder in der Mitte zwischen diesen Extremen sein? (Genauigkeit ist nicht immer ein Problem bei der Suche nach genauen Lösungen. Wenn es jedoch ist, kann die Wahl der Stopp-Regel und die Kriterien zur Fehlerreduzierung das Ergebnis beeinflussen.)

Auch wenn Sie optimale Parameter für diesen Datensatz finden, können Sie Probleme haben, dieselbe Formel für andere Datensätze zu verwenden. Wenn Sie dieselben Parameter für ein anderes Problem verwenden möchten, verlieren Sie die Generalisierbarkeit, es sei denn, Sie haben starke Gründe zu erwarten, dass andere Datensätze einer ähnlichen Verteilung folgen.

Für den spezifischen Algorithmus, der einen stochastischen Gradient verwendet, scheint es keine einfachen Antworten zu geben *. Die TensorFlow-Dokumentation bezieht sich auf zwei Quellen:

* "Es ist hoffentlich klar, dass die Auswahl einer guten Matrix B im Update ... die Standard-Gradientenmethode wesentlich verbessern kann ... Oft ist eine solche Wahl jedoch nicht offensichtlich und in stochastischen Einstellungen. Es ist nicht naheliegend, wie diese Matrix zu wählen ist, außerdem wissen wir in vielen stochastischen Einstellungen nicht einmal die wahre Funktion, die wir minimieren, da die Daten einfach in einem Stream ankommen und so eine gute Distanz generieren Matrix ist unmöglich. " Duchi & amp; Sänger, 2013, p. 5

    
noumenal 13.04.2017 11:34
quelle