Quale funzione potrebbe essere un kernel?


21

Nel contesto dell'apprendimento automatico e del riconoscimento di modelli, esiste un concetto chiamato Kernel Trick . Di fronte a problemi in cui mi viene chiesto di determinare se una funzione potrebbe essere una funzione del kernel o meno, cosa si dovrebbe fare esattamente? Dovrei prima verificare se hanno la forma delle tre o quattro funzioni del kernel come polinomio, RBF e gaussiano? Allora cosa dovrei fare? Devo dimostrare che è definito positivo? Qualcuno potrebbe risolvere un esempio per mostrare una soluzione passo-passo per tali problemi? Come per esempio, è una funzione del kernelf(x)=extx' (supponiamo che non sappiamo è un kernel gaussiano)?

Risposte:


27

Generalmente, una funzione è una funzione kernel valida (nel senso del trucco del kernel) se soddisfa due proprietà chiave:k(x,y)

  • simmetria: k(x,y)=k(y,x)

  • semi-definitività positiva.

Riferimento: pagina 4 di http://www.cs.berkeley.edu/~jordan/courses/281B-spring04/lectures/lec3.pdf

Il controllo della simmetria è generalmente semplice mediante ispezione. La verifica analitica della semi-definitività positiva a volte può essere piuttosto pelosa. Posso pensare a due strategie per verificare questo fatto:

  • (1) Ispezione per una rappresentazione di "prodotto interno"

Considera . Possiamo trovare alcuni ϕ ( a ) tali che k ( x , y ) = ϕ ( x ) T ϕ ( y ) ? Un po 'di matematica mostra che e x + y = e x e y , quindi sia ϕ ( a ) = e a e il gioco è fatto.k(x,y)=ex+yϕ(a)k(x,y)=ϕ(x)Tϕ(y)ex+y=exeyϕ(a)=ea

Se sei fortunato, il tuo sarà suscettibile di questa analisi. In caso contrario, puoi ricorrere all'opzione (2):k()

  • (2) Verifica della definizione positiva mediante simulazione casuale.

Considera la funzione su -dim vettori k ( x , y ) = D d = 1 min ( x d , y d ) , dove ogni vettore x , y deve essere non negativo e sommare a uno. È un kernel valido?Dk(x,y)=d=1Dmin(xd,yd)x,y

Possiamo verificarlo mediante simulazione. Disegna un insieme di vettori casuali { x i } N i = 1 e costruisci una matrice Gram K dove K i j = k ( x i , x j ) . Quindi controlla se K è positivo (semi) definito.N{xi}i=1NKKij=k(xi,xj)K

Il modo migliore per farlo numericamente è trovare gli autovalori della matrice (usando buone librerie numeriche esistenti come scipy o matlab) e verificare che il più piccolo autovalore sia maggiore o uguale a 0 . Se sì, la matrice è psd Altrimenti, non hai un kernel valido.K

Esempio di codice MATLAB / Octave:

D=5;
N=100;

X = zeros(N,D);
for n = 1:N
   xcur = rand(1,D);
   X(n,:) = xcur/sum(xcur);
end

K = zeros(N,N);
for n = 1:N;  for m = 1:N
    K(n,m) = sum( min( X(n,:), X(m,:) ) );
end;  end;

disp( min( eig(K) ) );

Questo è un test molto semplice, ma fai attenzione . Se il test fallisce, puoi essere sicuro che il kernel non è valido, ma se passa il kernel potrebbe non essere valido.

Trovo che indipendentemente da quante matrici casuali generi e indipendentemente da e D , questo kernel supera il test, quindi è probabilmente semi-definito positivo (in realtà, questo è il noto kernel di intersezione dell'istogramma ed è stato dimostrato valido).ND

Tuttavia, lo stesso test su fallisce ad ogni tentativo che gli ho dato (almeno 20). Quindi è sicuramente non valido e abbastanza facile da verificare.k(x,y)=d=1Dmax(xd,yd)

Mi piace molto questa seconda opzione perché è abbastanza rapida e molto più facile da eseguire il debug delle prove formali compilate. Secondo la slide 19 di Jitendra Malik , il kernel di intersezione è stato introdotto nel 1991 ma non si è dimostrato corretto fino al 2005. Le prove formali possono essere molto impegnative!


Da quanto ho capito, la seconda condizione è solo semi- indefinita positiva . E da quanto mi è stato detto, è necessario solo se si desidera dimostrare la convergenza dell'algoritmo SVM. In pratica, ci sono molti kernel che non sono PSD, ma funzionano bene nella pratica.
Peter,

@Peter: sì, hai ragione. Può essere * semi- * definito, non solo definito. Modificato di conseguenza.
Mike Hughes,

Nel dominio SVM, l'uso di un kernel PSD assicura che il problema sia convesso, quindi l'ottimizzazione raggiunge una soluzione unica, ottimale a livello globale. Senza la proprietà PSD, non esiste alcuna garanzia che la soluzione trovata sia la più vicina possibile. Ma sì, ci sono diversi kernel (come il Sigmoid) che non sono PSD ma hanno ancora successo nella pratica. Un riferimento decente per questo problema è: perso.lcpc.fr/tarel.jean-philippe/publis/jpt-icme05.pdf .
Mike Hughes,
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.