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)=C∑i=1mmax(0,1−y(i)(wt⋅x(i)+b))+12wt⋅w

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

ut⋅vK(u,v)KK(u,v)=e−γ‖u−v‖2

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 t ⋅ K 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)=ut⋅Kwtw=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)=C∑i=1mmax(0,1−y(i)(ut⋅K(i)+b))+12ut⋅K⋅u

è 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)=C∑i=1mmax(0,1−y(i)(wt⋅ϕ(x(i))+b))+12wt⋅w

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,ζC∑i=1mζ(i)+12wt⋅w

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αt⋅Q⋅α−1t⋅α

yt⋅α=00≤αi≤Ci=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)=u⋅K 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)=C∑i=1mmax(0,1−y(i)(wt⋅ϕ(x(i))+b))+12wt⋅w
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.