D'après le commentaire d'Emre ci-dessus, la section 4.4 des méthodes théoriques de groupe en apprentissage automatique par Risi Kondor contient des informations détaillées et des preuves sur la création de méthodes de noyau qui ont intrinsèquement des symétries. Je vais le résumer d'une manière, je l'espère, intuitive (je suis un physicien et non un mathématicien!).
La plupart des algorithmes ML ont une multiplication matricielle comme,
si=∑jWij xj=∑jWij (e⃗ j⋅x⃗ )
avec x⃗ étant l'entrée etWijétant les poids que nous souhaitons entraîner.
Méthode du noyau
Entrez dans le domaine des méthodes du noyau et laissez l'algorithme gérer l'entrée via,
si=∑jWij k(ej, x)
où maintenant on généralise àx , ej∈ X.
Considérons un groupe g qui agit sur X par x → Tg( x ) pour g∈ G . Un moyen simple de rendre notre algorithme invariant sous ce groupe est de faire un noyau,
kg( x , y)= 1| G |∑g∈ Gk ( x , Tg( y) )
aveck ( x , y) = k ( Tg( x ) , Tg( y) ).
Donc,
kg( x , Th( y) )= 1| G |∑g∈ Gk ( x , Tgh( y) )= 1| G |∑g∈ Gk ( x , Tg( y) )= 1| G |∑g∈ Gk ( Tg( x ) , y)
Pour k ( x , y) = x ⋅ y qui fonctionne pour toutes les représentations unitaires,
kg( x , Th( y) )= [ 1| G |∑g∈ GTg( x ) ] ⋅ y
Ce qui offre une matrice de transformation qui peut symétriser l'entrée dans l'algorithme.
SO (2) Exemple
En fait, juste le groupe qui correspond à π2 rotations pour plus de simplicité.
Exécutons une régression linéaire sur les données (x⃗ i,yi)∈R2×R où nous nous attendons à une symétrie de rotation.
Notre problème d'optimisation devient,
minWjy~i∑i12(yi−y~i)2=∑jWjkG(ej,xi)+bi
k(x,y)=∥x−y∥2k(x,y)=k(Tg(x),Tg(y))k(x,y)=x⋅y
Ainsi,
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
Notez que nous n'avons pas besoin de faire la somme de car c'est la même chose pour les deux. Donc, notre problème devient,
jminWy~i∑i12(yi−y~i)2=W[x⃗ 2i1+x⃗ 2i2+1]+bi
Ce qui donne la symétrie sphérique attendue!
Tic-Tac-Toe
Un exemple de code peut être vu ici . Il montre comment nous pouvons créer une matrice qui code la symétrie et l'utiliser. Notez que c'est vraiment mauvais quand je le lance! Travailler avec d'autres noyaux en ce moment.