Warum verwenden Leute Techniken der quadratischen Programmierung (wie SMO), wenn sie mit kernelisierten SVMs arbeiten? Was ist los mit Gradient Descent? Kann man es nicht mit Kerneln benutzen oder ist es einfach zu langsam (und warum?).
Hier ist ein wenig mehr Kontext: Um die SVMs ein bisschen besser zu verstehen, habe ich mit Gradient Descent einen linearen SVM-Klassifikator mit der folgenden Kostenfunktion trainiert:
Ich benutze die folgenden Notationen:
- b ist die Feature-Gewichtung des Modells und ist sein Bias-Parameter.
- ist der Merkmalsvektor der Trainingsinstanz.
- ist die Zielklasse (-1 oder 1) für die Instanz .
- ist die Anzahl der Trainingsinstanzen.
- ist der Regularisierungs-Hyperparameter.
Aus dieser Gleichung habe ich einen (Sub-) Gradientenvektor (in Bezug auf und ) abgeleitet, und Gradient Descent hat einwandfrei funktioniert. b
Jetzt möchte ich nichtlineare Probleme angehen. Kann ich einfach alle Punktprodukte durch in der Kostenfunktion ersetzen , wobei die Kernelfunktion ist (zum Beispiel)? der Gaußsche RBF, ), dann verwende die Berechnung, um abzuleiten einen (Sub-) Gradientenvektor und mit Gradient Descent fortfahren? K( u , v )KK( u , v )= e - γ ≤ u - v ≤ 2
Wenn es zu langsam ist, warum ist das so? Ist die Kostenfunktion nicht konvex? Oder liegt es daran, dass sich die Steigung zu schnell ändert (sie ist nicht Lipschitz-stetig), sodass der Algorithmus während des Abstiegs immer wieder über Täler springt und daher sehr langsam konvergiert? Aber selbst dann, wie kann es schlimmer sein als die zeitliche Komplexität von Quadratic Programming, die ? Wenn es um lokale Minima geht, kann Stochastic GD mit simuliertem Tempern diese nicht überwinden?
quelle
Wenn wir eine Transformation auf alle Eingabegewichtsvektoren ( x ( i ) ) anwenden , erhalten wir die folgende Kostenfunktion:ϕ x(i)
Der Kernel - Trick ersetzt von K ( u , v ) . Da der Wichtungsvektor w wird nicht transformiert, kann der Kernel Trick oben nicht auf die Kostenfunktion angewendet werden .ϕ(u)t⋅ϕ(v) K(u,v) w
Die obige Kostenfunktion entspricht der Urform des SVM-Ziels:
unterliegt und ζ ( i ) ≥ 0 für i = 1 , ⋯ , my(i)(wt⋅ϕ(x(i))+b)≥1−ζ(i)) ζ(i)≥0 i=1,⋯,m
Die duale Form ist:
where1 is a vector full of 1s and Q is an m×m matrix with elements Qij=y(i)y(j)ϕ(x(i))t⋅ϕ(x(j)) .
Now we can use the kernel trick by computingQij like so:
So the kernel trick can only be used on the dual form of the SVM problem (plus some other algorithms such as logistic regression).
Now you can use off-the-shelf Quadratic Programming libraries to solve this problem, or use Lagrangian multipliers to get an unconstrained function (the dual cost function), then search for a minimum using Gradient Descent or any other optimization technique. One of the most efficient approach seems to be the SMO algorithm implemented by the
libsvm
library (for kernelized SVM).quelle
I might be wrong, but I don't see how we can replace the dot products with kernels without turning it into the dual problem.
The kernels map the input implicitly to some feature space wherex becomes ϕ(x) , the loss function then becomes
J(w,b)=C∑i=1mmax(0,1−y(i)(wt⋅ϕ(x(i))+b))+12wt⋅w ϕ(x(i)) will have ifinite dimensions, so will w .
If Gaussian kernel is applied,
It seems difficult to optimize a vector of infinite dimensions using gradient descent directly.
Update
Firebug's answer gives a way of replacing the dot products with kernels in the primal formulation.
quelle