English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

invité
1 / ?
retour aux leçons

Un embedding est une table de correspondance, pas une fonction

Une première couche après un tokenizer

Un tokenizer fournit au modèle des identifiants entiers : [256, 1842, 7301, ...]. La première chose qu’un transformer fait : convertir chaque identifiant en un vecteur de d_model flottants. Ce vecteur vit dans un espace de d_model dimensions (768 dimensions pour ANDREA-120M).


Une couche d’embedding est une table de correspondance, pas une fonction. Imaginez une matrice géante :


forme : (V, d_model)
ligne 0 :    [e_0_0, e_0_1, ..., e_0_767]
ligne 1 :    [e_1_0, e_1_1, ..., e_1_767]
...
ligne 8448 : [e_8448_0, e_8448_1, ..., e_8448_767]

L'identifiant de jeton i sélectionne la ligne i. Accès direct au tableau. Aucun calcul, aucune activation. Juste un index.


Flux d'intégration des jetons et positions


Flottants entraînables

Chaque entrée de ce tableau commence comme un petit flottant aléatoire (généralement tiré d'une distribution normale mise à l'échelle par 1/sqrt(d_model)). La rétropropagation met à jour chaque ligne chaque fois que son identifiant de jeton apparaît dans un lot. Après l'entraînement, les jetons similaires (cat, dog, pet) finissent par avoir des vecteurs similaires ; les jetons non liés (cat, Tuesday, xylophone) se retrouvent éloignés dans l'espace vectoriel.


Coût d'embedding des tokens ANDREA-120M


QuantitéValeur
V8,449
d_model768
Paramètres6,488,832

Environ 6,5 M de paramètres résident dans une table d'embedding de tokens, soit environ 5,4 % du total d'ANDREA-120M. Chaque emplacement du vocabulaire reçoit ces 768 flottants.

Dimensionnement des tables d'embedding

Calculez le nombre de paramètres d'embedding de tokens pour deux variantes futures. (a) ANDREA-480M : V = 16 641 (un tokenizer à 16 384 segments plus 256 octets plus 1 BOS), d_model = 1536. (b) ANDREA-12M : V = 4 353, d_model = 384. Montrez le calcul V × d_model pour chaque.

Les produits scalaires mesurent la similarité

Les vecteurs comme des flèches

Un vecteur à 768 dimensions vit dans un espace que les humains ne peuvent pas visualiser, mais la même algèbre fonctionne dans n'importe quelle dimension. Deux opérations clés sont importantes pour les transformers :


Norme (longueur d'une flèche) :


||v|| = sqrt(v_0² + v_1² + ... + v_767²)

Produit scalaire (alignement entre deux flèches) :


u · v = u_0 × v_0 + u_1 × v_1 + ... + u_767 × v_767

Ce que vous dit un produit scalaire

Deux faits qui sont valables dans n'importe quelle dimension :


- u · v = ||u|| × ||v|| × cos(theta), où theta est l'angle entre eux.

- Les vecteurs pointant dans la même direction donnent de grands produits scalaires positifs.

- Les vecteurs pointant dans des directions opposées donnent de grands produits scalaires négatifs.

- Les vecteurs formant un angle droit donnent un produit scalaire nul.


Produit scalaire = similarité non normalisée. Deux embeddings entraînés pour cat et dog finissent par avoir un produit scalaire élevé car la rétropropagation les a rapprochés (tous deux prédisent des contextes liés aux animaux domestiques). cat et Tuesday finissent par être presque orthogonaux car ils prédisent des contextes différents.


Pourquoi un Transformer s’en soucie

L’activité 5 (grow_a_language_model_attention) construit l’attention à partir de produits scalaires : un vecteur requête multiplié scalairement par des vecteurs clés produit des scores indiquant quels tokens passés comptent pour prédire le suivant. Les embeddings et les produits scalaires portent ensemble toutes les interactions à l’intérieur d’un transformer.

Prédire la similarité

Après l’entraînement, l’embedding d’ANDREA-120M pour `believ` (ligne de token 4287, hypothétique) finit approximativement aligné avec `know`, `understand`, `learn`. Sans calculer les valeurs exactes, prédisez un ordre du plus grand au plus petit produit scalaire : `believ · know`, `believ · stone`, `believ · understand`. Justifiez votre classement en une phrase par paire.

ANDREA utilise des embeddings de position appris

Un problème

Un embedding de token indique au modèle quel mot se trouve à cette position. Il ne lui indique pas où ce mot se situe. Sans information de position, un transformeur traite the cat sat on a mat et mat a on sat cat the de manière identique : un même ensemble de tokens, sans signal d’ordre.


Trois solutions existent dans la littérature des transformeurs :


Sinusoïdal (Vaswani 2017). Une formule mathématique fixe basée sur des sinus et cosinus. La position 0 reçoit un vecteur 768 spécifique ; la position 1 en reçoit un autre ; jamais entraîné, jamais mis à jour. Se généralise à n’importe quelle position via la formule.


RoPE (Rotary Position Embedding). Fait tourner les vecteurs de requête et de clé en fonction de la position. Utilisé par LLaMA, Qwen. Aucun paramètre supplémentaire ; la rotation est intégrée à l’attention.


Learned. Une table d’embedding séparée de forme (T, d_model) où T est une longueur de contexte. Chaque ligne s’entraîne par rétropropagation, tout comme les embeddings de tokens.


Choix d’ANDREA : Learned

ANDREA hérite d’une approche de position learned de microGPT, qui l’a héritée de nanoGPT, qui l’a héritée de GPT-2. Une raison :


- Simplicité. Aucune mathématique spéciale dans l'attention. Une table de positions ressemble à une table de tokens.

- Compatibilité avec CUDA personnalisé. Le moteur microgpt_cuda.cu d'ANDREA gère deux recherches d'embeddings de manière identique ; aucun noyau sin/cos n'est nécessaire.

- Suffisant pour un contexte fixe. ANDREA limite T à 1024. Une table apprise fonctionne bien pour des séquences de longueur fixe.


Coût de l'Embedding de Position ANDREA-120M


QuantitéValeur
T (contexte)1,024
d_model768
Paramètres786,432

0,79M paramètres pour la position. Combinés aux embeddings de tokens : 6,49M + 0,79M = 7,27M paramètres d’embedding au total pour ANDREA-120M.


Comment ils se combinent

À chaque position t dans une séquence d’entrée :


x_t = token_embedding[token_id_t] + position_embedding[t]

Deux vecteurs de 768 dimensions, additionnés élément par élément. Le résultat, x_t, entre dans le premier bloc transformer. Le modèle ne les sépare plus jamais ; il apprend à utiliser le signal combiné.

Apprises versus sinusoïdales

Comparez deux stratégies d’embedding de position pour un modèle ANDREA hypothétique. Stratégie A : apprises, T = 1024. Stratégie B : sinusoïdales, T arbitraire (fonctionne pour toute longueur de séquence). Nommez un avantage de chacune. Puis indiquez laquelle ANDREA choisit et une raison du point de vue CUDA / ingénierie.

Où vivent les paramètres d’embedding

Une couche d’embedding complète ANDREA-120M


ComposantFormeParamètres
Table d'embedding de tokens8,449 × 7686,488,832
Table d'embedding de position1,024 × 768786,432
Total7,275,264

Environ 7,3 M paramètres. Le nombre total de paramètres d'ANDREA-120M : ~120 M. La couche d'embedding seule : 6 %. Les 94 % restants se trouvent dans les blocs de transformeur (attention + MLP, abordés dans les activités 5-7).


Embeddings non partagés vs partagés

De nombreux modèles de transformeurs (y compris GPT-2) lient un embedding de token à une projection de sortie finale : la même matrice V × d_model est utilisée à l’entrée et à la sortie (logits sur le vocabulaire). Ce partage économise V × d_model paramètres et améliore souvent la qualité.


ANDREA utilise des embeddings non liés : l’embedding d’entrée et la projection de sortie s’entraînent comme des matrices distinctes. L’activité 7 (grow_a_language_model_transformer_block) couvre une couche finale.


Un passage avant jusqu’à présent

Entrée : identifiants de tokens [256, 1842, 7301, ...] (1024 au total). Chaque identifiant recherche un vecteur de 768 dimensions. Chaque position recherche un vecteur de 768 dimensions. Somme élément par élément. Résultat : une matrice (1024, 768) x de vecteurs token + position. x entre dans le bloc transformeur 1.


L’activité 5 (grow_a_language_model_attention) couvre ce que fait le bloc 1 : attention produit scalaire mis à l’échelle avec masque causal et softmax.

Prédire la structure des embeddings

Réfléchir : ANDREA-120M possède 8449 embeddings de tokens et 1024 embeddings de position, partageant un même espace de 768 dimensions. Après l’entraînement, que prévoyez-vous : (a) à quoi ressemblerait une matrice d’embeddings de tokens (des motifs de regroupement ?), ou (b) à quoi ressemblerait une matrice d’embeddings de position (un gradient lisse ?). Choisissez l’une des deux options et prédisez en une ou deux phrases. Il n’y a pas de mauvaise réponse ; le raisonnement compte.