La pendenza del gradiente è possibile per SVM con kernel (se sì, perché le persone usano la programmazione quadratica)?


21

Perché le persone usano tecniche di programmazione quadratica (come SMO) quando hanno a che fare con SVM con kernel? Cosa c'è di sbagliato nella discesa del gradiente? È impossibile da usare con i kernel o è troppo lento (e perché?).

Ecco un po 'più di contesto: cercando di capire un po' meglio le SVM, ho usato la Discesa a gradiente per addestrare un classificatore SVM lineare usando la seguente funzione di costo:

J(w,b)=Ci=1mmax(0,1y(i)(wtx(i)+b))+12wtw

Sto usando le seguenti notazioni:

  • w è la funzione pesi del modello è il suo parametro di polarizzazione.b
  • x(i) è il vettore di funzionalità dell'istanza di training .ith
  • y(i) è la classe target (-1 o 1) per l' istanza .ith
  • m è il numero di istanze di addestramento.
  • C è l'iperparametro di regolarizzazione.

Ho ricavato un vettore (sub) gradiente (per quanto riguarda e ) da questa equazione, e Gradient Descent funzionato bene.wb

utvK(u,v)KK(u,v)=eγuv2

Se è troppo lento, perché? La funzione di costo non è convessa? O è perché il gradiente cambia troppo velocemente (non è Lipschitz continuo) quindi l'algoritmo continua a saltare attraverso le valli durante la discesa, quindi converge molto lentamente? Ma anche in questo caso, come può essere peggio della complessità temporale della Programmazione quadratica, che è ? Se si tratta di minimi locali, lo stocastico GD con ricottura simulata non può superarli? O(nsamples2×nfeatures)

Risposte:


6

Imposta modo che w t ϕ ( x ) = u tK e w t w = u t K u , con K = ϕ ( x ) t ϕ ( x ) , dove ϕ ( x ) è una mappatura della matrice di input originale, xw=ϕ(x)uwtϕ(x)=utKwtw=utKuK=φ(X)tφ(X)φ(X)X. Ciò consente di risolvere l'SVM attraverso la formulazione primaria. Usando la tua notazione per la perdita:

J(w,b)=Ci=1mmax(0,1y(i)(utK(i)+b))+12utKu

è unamatrice m × m e u è unamatrice m × 1 . Né è infinito.Km×mum×1

In effetti, il doppio è di solito più veloce da risolvere, ma anche il primitivo ha i suoi vantaggi, come le soluzioni approssimative (che non sono garantite nella doppia formulazione).


Ora, perché il doppio è molto più importante non è affatto ovvio: [1]

Le ragioni storiche per cui gran parte della ricerca dell'ultimo decennio ha riguardato la doppia ottimizzazione non sono chiare . Riteniamo che sia perché le SVM sono state introdotte per la prima volta nella loro formulazione del margine rigido [Boser et al., 1992], per cui una doppia ottimizzazione (a causa dei vincoli) sembra più naturale. In generale, tuttavia, dovrebbero essere preferite le SVM a margine debole, anche se i dati di allenamento sono separabili: il limite decisionale è più solido perché vengono presi in considerazione più punti di addestramento [Chapelle et al., 2000]


Chapelle (2007) sostiene che la complessità temporale dell'ottimizzazione sia primaria che doppia è , il caso peggiore è O ( n 3 ) , ma hanno analizzato le perdite quadratiche e approssimative della cerniera, quindi non è un perdita della cerniera, poiché non è differenziabile con il metodo di Newton.O(nnsv+nsv3)O(n3)


[1] Chapelle, O. (2007). Addestramento di una macchina vettoriale di supporto in primordiale. Calcolo neurale, 19 (5), 1155-1178.


1
+1 Potresti forse espandere anche la complessità temporale
seanv507

@ seanv507 grazie, in effetti avrei dovuto affrontarlo, aggiornerò presto questa risposta.
Firebug

4

Se applichiamo una trasformazione a tutti i vettori del peso di input ( x ( i ) ), otteniamo la seguente funzione di costo:ϕx(i)

J(w,b)=Ci=1mmax(0,1y(i)(wtϕ(x(i))+b))+12wtw

Il trucco del kernel sostituisce con K ( u , v ) . Poiché il vettore di peso w non viene trasformato, il trucco del kernel non può essere applicato alla funzione di costo sopra .ϕ(u)tϕ(v)K(u,v)w

La funzione di costo sopra corrisponde alla forma primaria dell'obiettivo SVM:

minw,b,ζCi=1mζ(i)+12wtw

soggetto a e ζ ( i )0 per i = 1 , , my(i)(wtϕ(x(i))+b)1ζ(i))ζ(i)0i=1,,m

La doppia forma è:

minα12αtQα1tα

ytα=00αiCi=1,2,,m

1Qm×mQij=y(i)y(j)ϕ(x(i))tϕ(x(j))

Qij like so:

Qij=y(i)y(j)K(x(i),x(j))

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).


1
I'm not sure why you marked your answer Community Wiki. This seems like a perfectly valid answer to your question.
Sycorax says Reinstate Monica

Thanks @GeneralAbrial. I marked my answer as Community Wiki to avoid any suspicion that I knew the answer before asking the question.
MiniQuark

1
You should always do what you think is right, but it's perfectly kosher to ask and answer your own question.
Sycorax says Reinstate Monica

Wait, couldn't you transform the weight vector to w=ϕ(x)u so that wtϕ(x)=uK and wtw=utKu, with K=ϕtϕ, and then optimize the sample weights u?
Firebug

2

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 where x becomes ϕ(x), the loss function then becomes
J(w,b)=Ci=1mmax(0,1y(i)(wtϕ(x(i))+b))+12wtw
If Gaussian kernel is applied, ϕ(x(i)) will have ifinite dimensions, so will w.

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.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.