Message
par trotter » 21 janv. 2025, 18:38
Je note vite pour pas oublier, comment ça marche en entrée d'un LLM :
"Le chat vert"
Pour chaque mot (ou chaque "token", portion de mot pour les mots trop grands), un vecteur est créé, ici un vecteur de 3 nombres :
-Le=[51.654, 54.32, 12.2]
-chat=[345.21, 543.15, 578.14]
-vert=[9831,573.5, 957,2]
Chaque nombre est une sorte de score par rapport à un concept (petit, grand, féminin, poilu, amer...), déduit tout seul par le modèle lors de l'entrainement.
Exemple :
mobile=0 immobile=1000, un corail aura 5.5, un chat aura 345.21
petit=0 grand=1000, un corail aura 4.2, Jupiter aura 994.999
piquant=0 doux=1000, un corail aura 4.2, un chat aura 985
Ca s'appelle l'embedding.
Chaque vecteur est envoyé à chaque neurone de la couche d'entrée qui donne un nombre en sortie.
[51.654, 54.32, 12.2]-->neurone 1-->3.145
[51.654, 54.32, 12.2]-->neurone 2-->61.64
[51.654, 54.32, 12.2]-->neurone 3-->891.14
[3.145, 61.64, 891.14] = "Le" en sortie de la première couche de neurones.
Ce nombre est filé au mécanisme d'attention qui va le booster ou le nerfer selon son importance dans la phrase. Par exemple "Le" on s'en fiche un peu, "chat" est moyennement intéressant, "vert" est surprenant ici.
Car, en plus du vecteur d'embedding, chaque mot a TROIS AUTRES VECTEURS (déduis du premier) !!!
-un vecteur "question" qui représente ce que le mot cherche chez d'autres mots : il cherche un mot "mobile", "petit", "piquant"...
-un vecteur "clef", qui ressemble beaucoup à l'embedding mais montre comment le mot se présente aux autres. Il ne parle pas de lui uniquement (je suis petit, je suis grand), mais plus de ce qu'il veut montrer aux autres (ça peut être les mêmes concepts ou d'autres : je suis masculin, je suis un nom, je suis grand).
-un vecteur "value", déduit des 2 autres.
Avec ce dernier vecteur "value", on peut déterminer l'importance de chaque mot dans la phrase.
Et c'est là que ça coinçait sur les vieux LLM : il faut faire des opérations sur le vecteur "question"+le vecteur "clef" entre tous les tokens.
Bref pour GPT-1 on pouvait pas dépasser 512 tokens car le calcul devenait énorme.
Surtout qu'on avait pas 3 nombres pour un seul vecteur pour GPT-1, mais 768 nombres....