Hallo Leute: Ich versuche herauszufinden, wie der "Zustand" von VowpalWabbit beibehalten wird, wenn die Größe unserer Eingabesätze wächst. Wenn ich in einer typischen maschinellen Lernumgebung 1000 Eingabevektoren habe, würde ich erwarten, alle diese auf einmal zu senden, auf die Fertigstellung einer Modellbauphase zu warten und dann das Modell zu verwenden, um neue Vorhersagen zu erstellen.
In VW scheint es so, dass die "Online" - Natur des Algorithmus dieses Paradigma verändert, um leistungsfähiger und in der Lage zu sein, sich in Echtzeit anzupassen.
1) Wie wird diese Echtzeitmodellmodifikation implementiert?
2) Nimmt VW im Laufe der Zeit zunehmende Ressourcen in Bezug auf die Gesamtgröße der Eingabedaten an? Das heißt, wenn ich mehr Daten zu meinem VW-Modell hinzufüge (wenn es klein ist), beginnen die Echtzeit-Anpassungsberechnungen länger zu dauern, wenn die kumulative Anzahl von Merkmalsvektor-Eingaben auf 1000, 10000 oder Millionen ansteigt?
Nur um die gute Antwort von carlosdc hinzuzufügen.
Einige der Funktionen, die vowpal wabbit unterscheiden und es erlauben, auf Tera-feature (10 12 ) -Datengrößen zu skalieren, sind:
Der Online-Gewichtsvektor: vowpal wabbit pflegt einen weight-vector , der im Wesentlichen der Vektor von ist Gewichte für das Modell, das es erstellt. Das nennen Sie in Ihrer Frage "den Staat".
Unbegrenzte Datengröße: Die Größe des Gewichtungsvektors ist proportional zur Anzahl der Merkmale (unabhängige Eingabevariablen), nicht zur Anzahl der Beispiele (Instanzen). Das ist es, was vowpal wabbit im Gegensatz zu vielen anderen (nicht online) Lernenden im Weltraum skaliert. Da nicht alle Daten in den Speicher geladen werden müssen, wie es ein typischer Batch-Lerner tut, kann er trotzdem aus Datensätzen lernen, die zu groß sind, um in den Speicher zu passen.
Cluster-Modus:
vowpal wabbit unterstützt das Ausführen auf mehreren Hosts in einem Cluster, wobei den Knoten eine binäre Baumdiagrammstruktur zugewiesen wird und die all-reduce
Reduktion von Blättern zu root verwendet wird.
Hash-Trick:
vowpal wabbit verwendet den sogenannten Hash-Trick . Alle Feature-Namen werden mit murmurhash-32
in eine ganze Zahl umgewandelt. Dies hat mehrere Vorteile: Es ist sehr einfach und zeiteffizient, sich nicht mit der Verwaltung von Hashtabellen und Kollisionen zu befassen, während es gelegentlich möglich ist, dass Merkmale kollidieren. Es stellt sich (in der Praxis) heraus, dass eine kleine Anzahl von Merkmalskollisionen in einem Trainingssatz mit Tausenden von unterschiedlichen Merkmalen dem Hinzufügen eines impliziten Regularisierungsausdrucks ähnelt. Dies verbessert intuitiv die Modellgenauigkeit, anstatt sie zu verringern. Es ist auch agnostisch für die Spärlichkeit (oder Dichte) des Merkmalsraums. Schließlich erlaubt es den Eingabe-Feature-Namen, beliebige Zeichenfolgen zu sein, im Gegensatz zu den meisten konventionellen Lernern, die erfordern, dass die Feature-Namen / IDs sowohl a) numerisch als auch b) eindeutig sind.
Parallelität:
vowpal wabbit nutzt Multi-Core-CPUs, indem das Parsing und Lernen in zwei separaten Threads ausgeführt wird, was die Geschwindigkeit weiter erhöht. Dies macht vw
in der Lage, so schnell zu lernen, wie es Daten liest. Es stellt sich heraus, dass die meisten unterstützten Algorithmen in vw
, counter-intuitiv, durch E / A-Geschwindigkeit und nicht durch Lerngeschwindigkeit eingeschränkt sind.
Checkpointing und inkrementelles Lernen:
vowpal wabbit ermöglicht es Ihnen, Ihr Modell während des Lernens auf der Festplatte zu speichern und dann das Modell zu laden und dort weiter zu lernen, wo Sie mit der Option --save_resume
aufgehört haben.
Testähnliche Fehlerschätzung: Der durchschnittliche Verlust, der von vowpal wabbit "so wie er geht" berechnet wird, ist immer auf ungesehenen Daten (*). Dadurch entfällt die Notwendigkeit, sich mit geplanten Ausfällen zu befassen oder eine Überkreuzvalidierung durchzuführen. Die Fehlerrate, die Sie während des Trainings sehen, ist "testartig".
Jenseits linearer Modelle: vowpal wabbit unterstützt verschiedene Algorithmen, einschließlich Matrix-Faktorisierung (grob spärlich Matrix SVD), Latent Dirichlet Allocation (LDA) und mehr. Es unterstützt auch die direkte Generierung von Terminteraktionen (bi-lineares, quadratisches, kubisches und Feed-Forward-Sigmoid-Neuronalnetz mit benutzerspezifischer Anzahl von Einheiten), Mehrklassenklassifizierung (zusätzlich zur grundlegenden Regression und binären Klassifizierung) und mehr.
Es gibt Tutorials und viele Beispiele in dem offiziellen vw Wiki auf GitHub.
(*) Eine Ausnahme ist, wenn Sie mehrere Durchgänge mit der Option --passes N
verwenden.
VW ist eine (sehr) anspruchsvolle Implementierung des stochastischen Gradientenabfalls. Sie können mehr über den stochastischen Gradientenabstieg hier
lesenEs stellt sich heraus, dass eine gute Implementierung des stochastischen Gradientenabfalls grundsätzlich I / O-gebunden ist, es geht so schnell, wie Sie die Daten bekommen können, also hat VW einige hochentwickelte Datenstrukturen, um die Daten zu "kompilieren" >
Daher lautet die Antwort auf Frage (1) stochastischer Gradientenabfall und die Antwort auf Frage (2) ist definitiv nicht.
Tags und Links performance machine-learning scalability vowpalwabbit online-algorithm