Dal commento di Emre sopra, la Sezione 4.4 dei metodi teorici di Gruppo nell'apprendimento automatico di Risi Kondor contiene informazioni dettagliate e prove sulla creazione di metodi del kernel che hanno intrinsecamente simmetrie. Lo riassumerò in un modo speranzosamente intuitivo (sono un fisico, non un matematico!).
La maggior parte degli algoritmi ML ha una moltiplicazione matriciale come,
Sio=ΣjWio j Xj=ΣjWio j (e⃗ j⋅X⃗ )
con
X⃗ essendo l'input e
Wio j essendo i pesi che desideriamo allenare.
Metodo del kernel
Inserisci il regno dei metodi del kernel e lascia che l'algoritmo gestisca l'input tramite,
Sio=ΣjWio j k (ej, x )
dove ora generalizziamo
x ,ej∈ X.
Prendi in considerazione un gruppo sol che agisce X attraverso x →Tg( x ) per g∈ G. Un modo semplice per rendere invariante il nostro algoritmo in questo gruppo è creare un kernel,
Ksol( x , y)=1| G |Σg∈ Gk ( x ,Tg( y) )
con
k ( x , y) = k (Tg( x ) ,Tg( y) ).
Così,
Ksol( x ,Th( y) )=1| G |Σg∈ Gk ( x ,Tgh( y) )=1| G |Σg∈ Gk ( x ,Tg( y) )=1| G |Σg∈ Gk (Tg( x ) , y)
Per k ( x , y) = x ⋅ y che funziona per tutte le rappresentazioni unitarie,
Ksol( x ,Th( y) )= [1| G |Σg∈ GTg( x ) ] ⋅ y
Che offre una matrice di trasformazione che può simmetrizzare l'input nell'algoritmo.
SO (2) Esempio
In realtà solo il gruppo a cui è associato π2 rotazioni per semplicità.
Eseguiamo la regressione lineare sui dati (x⃗ i,yi)∈R2×R dove ci aspettiamo una simmetria rotazionale.
Il nostro problema di ottimizzazione diventa,
minWjy~i∑i12(yi−y~i)2=∑jWjkG(ej,xi)+bi
Il nocciolo k(x,y)=∥x−y∥2soddisfa . Puoi anche usare e una varietà di kernel.k(x,y)=k(Tg(x),Tg(y))k(x,y)=x⋅y
Pertanto,
kG(ej,xi)=14∑n=14∥R(nπ/2) e⃗ j−x⃗ i∥2=14∑n=14(cos(nπ/2)−x⃗ i1)2+(sin(nπ/2)−x⃗ i2)2=14[2x⃗ 2i1+2x⃗ 2i2+(1−x⃗ i1)2+(1−x⃗ i2)2+(1+x⃗ i1)2+(1+x⃗ i2)2]=x⃗ 2i1+x⃗ 2i2+1
Nota che non è necessario riassumere perché è lo stesso per entrambi. Quindi il nostro problema diventa,
j
minWy~i∑i12(yi−y~i)2=W[x⃗ 2i1+x⃗ 2i2+1]+bi
Il che produce la simmetria sferica attesa!
Tic-Tac-Toe
Codice di esempio può essere visto qui . Mostra come possiamo creare una matrice che codifichi la simmetria e la utilizzi. Nota che questo è davvero un male quando lo eseguo davvero! Lavorare con altri kernel al momento.