2. Je vais détailler le fonctionnement des transformers dans le contexte du NLP, qui est le domaine où le premier papier a été publié en 2017 ("Attention is all you need")
A noter que les transformers s'attaquent désormais à d'autres domaines (Vision, Time Series, ...)
3. First things first
Rappelons que dans le NLP, les algorithmes ne comprennent pas "directement" les mots
Il faut que ces mots soient transformés en nombres.
C'est le boulot des algorithmes de "word embedding", qui donc transforment les mots en vecteurs de nombres
4. Il y a plusieurs façons de faire du word Embedding.
Promis, on les verra en détail dans d'autres Threads
5. Ces algorithmes reposent en grande partie sur une grande idée, celle de la "Distributional Semantics" énoncée pour la première fois par JR Firth en 1957
En gros, derrière tout cela, il y a le fait que le sens des mots dépend directement des mots voisins
6. Le résultat de ces algorithmes de word embeddings, c'est que chacun des mots sera représenté par un vecteur de nombres
La taille de ce vecteur peut varier
et bien évidemment, plus la dimension est importante, et plus on a une description fine de chacun des mots
7. Grâce à ces vecteurs, on peut faire des choses intéressantes
Il y a le fameux " ROI - HOMME + FEMME = REINE"
Les mots étant des vecteurs de nombres, on peut faire des opérations vectorielles et trouver du sens dans ce type d'opération
8. On peut également mesurer la similarité entre des mots, grâce au produit vectoriel par exemple
9. Par contre, un des défauts majeurs de cette approche, c'est que le caractère POLYSEMIQUE des mots n'est pas pris en compte
Même si un mot a plusieurs sens, le vecteur qui le représente sera le même, quelque soit son sens
10. Prenons un exemple
Dans ces deux phrases :
> "ma voiture se trouvent dans les bouchons"
> "les bouchons de champagne ont sauté hier"
il est clair que le mot "bouchon" n'a pas le même sens dans les deux phrases
11. Et c'est là que le mécanisme de self-attention proposé dans les transformers apporte énormément
Car le self-attention va proposer un nouvel embedding contextualisé
Autrement dit, les deux embeddings des mots "bouchons" dans les exemples pris seront différents
12. Alors, comment ça marche ?
En fait l'idée est assez simple et je vais vous l'expliquer pas à pas
13. Prenons l'exemple de la phrase "Ma voiture est dans les bouchons"
Chacun de ces mots peut être représenté par un vecteur embedding
Appelons ces vecteurs v1 à v6
Ils ont bien évidemment tous la même dimension
14. Ce que fait le self attention pour transformer chacun de ces vecteurs
c'est d'abord de calculer la similarité entre chacun de ces mots en faisant le produit vectoriel entre chacun des vecteurs
Similarité = produit vectoriel (par exemple)
15. Ce que garantit l'embedding c'est que plus les vecteurs sont proches, plus leur produit vectoriel sera élevé
Donc pour transformer le vecteur v1, on va calculer les produits vectoriels entre le vecteur v1 et les 6 vecteurs, dont lui même
=> v1.v1, v1.v2, ... v1.v6
16. Chacun de ces produits vectoriels donne un nombre
Il est bien évident, que le produit vectoriel le plus important dans ce cas, c'est v1.v1
> quoi de plus ressemblant pour un vecteur que lui même ?
17. Ensuite on divise ces résultats par une constante (dépendante de la taille de l'embedding)
et on normalise chacune de ces 6 quantités en utilisant un #softmax
18. Si vous ne connaissez pas cette fonction Softmax, elle est très simple
On prend l'exponentielle de chacun des 6 nombres, qu'on divise ensuite par la somme des exponentielles. Ainsi la somme des 6 quantités obtenues vaut 1
Appelons ces coefficients les scores : s1 à s6
19. Le résultat de la self Attention, ce sera finalement la combinaison des 6 vecteurs, avec les coefficients que l'on vient de calculer
y1 = s1.v1 + ... + s6.v6
20. y1 sera évidemment très proche de v1
Mais plus il y aura un mot qui se rapprochera de v1, plus le score associé avec ce mot sera élevé, et plus y1 se différenciera de v1
21. C'est là le phénomène de l'attention. Si dans notre contexte, un autre mot est proche du mot étudié, celui ci sera modifié et portera le contexte de l'autre mot
On a ainsi des représentations vectorielles qui seront modifiées avec le contexte
Elles ne sont plus statiques
22. Pour reprendre mes 2 exemples
> "Ma voiture est dans les bouchons" et "les bouchons de champagne ont sauté"
les deux représentations de bouchons seront différentes avec la self-attention
La première sera influencé par "voiture" et l'autre par "Champagne" très certainement
22. Résumons ce qu'on a vu par un petit schéma
23. Ouf !
Voici expliquée la grande idée qu'il y a derrière le self-attention en oeuvre dans les Transformers
Mais en réalité, il faut aller un peu plus loin pour capter la beauté de ce que fait cet algorithme
24. Lorsque j'ai décrit la transformation de chacun des vecteurs (par exemple de v1 à y1)
il faut remarquer que dans l'opération, chacun des vecteurs est utilisé à TROIS endroits différents
🔽🔽 Continuer le Thread
25. D'abord quand c'est lui qui est pris comme référence.
Par exemple, ce sera le cas quand on prend v1 et qu'on veut le transformer et qu'on calcule les produits vectoriels avec les autres vecteurs
26. Deuxième fonction : quand le vecteur est justement utilisé pour calculer les scores
27. Troisième fonction : quand le vecteur est appelé pour faire la combinaison finale à partir des coefficients ou score utilisé
28. L'idée GENIALE de l'algorithme, c'est d'apprendre des représentations différentes de chacun des vecteurs suivant la fonction en question
Pour faire cela, on transforme les vecteurs en les multipliant par des matrices qui ont été calculées dans la phase d'apprentissage
29. La première fonction, c'est la fonction "Query".
C'est pas v1 qui sera utilisé, mais une projection de v1 en utilisant une matrice que l'on appelle Wq
Soit Wq.v1
30. La deuxième fonction, c'est la fonction "Key"
De la même manière, on utilisera des projections de v1 à v6 en utilisant la matrice Wk
31. Et enfin pour la troisième fonction, c'est la fonction "Value", utilisée avec des projections des 6 vecteurs utilisant la matrice Wv
32. Ces trois matrices sont apprises pendant la phase d'apprentissage.
Ce qu'elles font ?
C'est simplement de projeter chacune des représentations sur des axes différents, et qui seront plus pertinents pour les calculs de Self-Attention
Ces axes ont été appris.
33. Par exemple, on peut imaginer que dans mes 2 exemples de bouchons, les matrices Wq, Wk et Wv ont appris qu'il fallait mettre plus en valeur la dimension "transport" dans mon premier cas, et la dimension "Réunion" ou "Fete" dans le deuxième cas
Vous voyez l'idée ...
34. Il y a encore des petites choses à dire sur cet algorithme de transformers et d'Attention (le fait de pouvoir paralléliser les calculs, de ne pas avoir de perte de gradient comme dans les RNN)
Mais cette partie est à mon avis la plus sensible.
35. On aura l'occasion d'y revenir dans le détail.
36. J'espère que cela vous a plu !
Merci de partager et de liker si c'est le cas !
A très vite
• • •
Missing some Tweet in this thread? You can try to
force a refresh
Peut-être aurez vous le temps de lire mes dernières publications.
Au programme :
> Régression Logistique
> Matrice de confusion
> Binary tree : Gini vs Entropy
> Transformers et self Attention
> Les réseaux à convolution
Bonne lecture !
🔽🔽 Thread
[Régression Logistique]
Voir différemment cet algorithme et tout comprendre grâce à la géométrie
2. Personnellement, ces notions autour de la matrice de confusion, j'ai mis un bon bout de temps avant de les retenir une fois pour toute.
Et pour retenir tout ça, j'ai un super moyen mnémotechnique que je vais vous donner.
Ready?
3. D'abord de quoi parle-t-on ?
On parle de résultats d'une classification faite par un modèle de Machine Learning (Regression logistique, SVM, RF, KNN, Réseau de neurones, Naive Bayes ... et j'en passe)