Pourquoi les gens utilisent-ils des techniques de programmation quadratique (comme SMO) lorsqu'ils traitent avec des SVM noyés? Quel est le problème avec Gradient Descent? Est-il impossible de l'utiliser avec des noyaux ou est-ce simplement trop lent (et pourquoi?).
Voici un peu plus de contexte: en essayant de mieux comprendre les SVM, j'ai utilisé Gradient Descent pour former un classificateur SVM linéaire en utilisant la fonction de coût suivante:
J'utilise les notations suivantes:
- est le poids caractéristique du modèle et est son paramètre de biais.
- est levecteur d' entités de la formation.
- est la classe cible (-1 ou 1) pour la instance.
- est le nombre d'instances de formation.
- est l'hyperparamètre de régularisation.
J'ai dérivé un vecteur (sub) gradient (en ce qui concerne et ) de cette équation, et Gradient Descent a très bien fonctionné.
J'aimerais maintenant aborder des problèmes non linéaires. Puis-je simplement remplacer tous les produits scalaires par K ( u , v dans la fonction de coût, où K est la fonction du noyau (par exemple le RBF gaussien, K ( u , v ) = e - γ ‖ u - v ‖ 2 ), puis utilisez le calcul pour dériver un vecteur de (sous-) gradient et continuer avec Gradient Descent?
Si c'est trop lent, pourquoi? La fonction de coût n'est-elle pas convexe? Ou est-ce parce que le gradient change trop vite (ce n'est pas Lipschitz continu) donc l'algorithme continue de sauter à travers les vallées pendant la descente, donc il converge très lentement? Mais même alors, comment peut-elle être pire que la complexité temporelle de la programmation quadratique, qui est ? S'il s'agit de minima locaux, le GD stochastique avec recuit simulé ne peut-il pas les surmonter?
la source
Si nous appliquons une transformation à tous les vecteurs de poids d'entrée ( x ( i ) ), nous obtenons la fonction de coût suivante:ϕ x(i)
La fonction de coût ci-dessus correspond à la forme primitive de l'objectif SVM:
subject toy(i)(wt⋅ϕ(x(i))+b)≥1−ζ(i)) and ζ(i)≥0 for i=1,⋯,m
The dual form is:
subject toyt⋅α=0 and 0≤αi≤C for i=1,2,⋯,m
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).la source
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.
la source