5 points par GN⁺ 2024-01-04 | 1 commentaires | Partager sur WhatsApp

Encodeur

  • Explication du processus de conversion du texte en vecteurs et de l’ajout d’informations de position aux embeddings ainsi obtenus.
  • L’objectif est de produire des embeddings qui capturent les informations sémantiques du texte d’entrée.

1. Embedding de texte

  • Conversion de "Hello World" en vecteurs pour créer des embeddings.
  • Attribution de valeurs arbitraires à chaque token pour générer un vecteur.

2. Encodage positionnel

  • Ajout d’un encodage positionnel aux embeddings pour incorporer l’information de position des mots.
  • Utilisation de vecteurs fixes pour attribuer à chaque position un motif numérique unique et cohérent.

3. Combinaison de l’encodage positionnel et des embeddings

  • Addition de l’encodage positionnel et des embeddings pour créer une nouvelle matrice utilisée comme entrée de l’encodeur.

Self-attention

  • Explication de l’attention, mécanisme qui permet au modèle de se concentrer sur des parties spécifiques de l’entrée.
  • L’utilisation de l’attention multi-tête permet de se concentrer simultanément sur l’information dans différents espaces de représentation.

4.1 Définition des matrices

  • Définition des matrices K, V et Q pour chaque tête d’attention.

4.2 Calcul des clés, requêtes et valeurs

  • Calcul des matrices de clés, de requêtes et de valeurs en multipliant les embeddings d’entrée par les matrices de poids.

4.3 Calcul de l’attention

  • Calcul du produit scalaire entre les requêtes et chaque vecteur clé, puis division du résultat par la racine carrée de la dimension des vecteurs clés.
  • Application de la fonction softmax pour obtenir les poids d’attention.
  • Multiplication de chaque vecteur de valeur par son poids d’attention.

Couche feed-forward

  • L’encodeur contient un réseau de neurones feed-forward après la couche de self-attention.
  • Ce réseau utilise deux transformations linéaires et la fonction d’activation ReLU.

5.1 Couche feed-forward de base

  • La première couche linéaire étend la dimension de l’entrée, puis après application de la fonction d’activation ReLU, la seconde couche linéaire réduit la dimension à sa taille d’origine.

5.2 Combinaison de tout le processus de l’encodeur

  • Écriture en code d’un bloc d’encodeur incluant l’attention multi-tête et la couche feed-forward.

5.3 Connexions résiduelles et normalisation de couche

  • Les connexions résiduelles consistent à ajouter l’entrée de la couche à sa sortie, et la normalisation de couche est une technique qui normalise l’entrée de la couche.

L’avis de GN⁺

  • Cet article explique des mathématiques complexes de manière simplifiée afin d’aider à comprendre le modèle des transformeurs sur le plan mathématique.
  • Il aide en particulier à comprendre le fonctionnement du mécanisme de self-attention et du réseau de neurones feed-forward.
  • En montrant comment des techniques comme les connexions résiduelles et la normalisation de couche contribuent à la stabilité et aux performances des réseaux de neurones, il apporte un éclairage sur les méthodes qui permettent de résoudre les problèmes d’apprentissage des réseaux profonds.

1 commentaires

 
GN⁺ 2024-01-04
Commentaires sur Hacker News
  • Le « mystère » des transformeurs, c’est qu’au lieu d’une séquence linéaire de poids et de valeurs statiques à chaque couche, ils utilisent 3 matrices différentes obtenues par multiplication de poids appris à partir de la même entrée, puis multiplient ces matrices entre elles. Cela permet davantage de traitement en parallèle, mais la formule d’attention reste très limitée parce qu’elle est statique.

    • Il sera difficile de voir d’autres progrès tant qu’on n’aura pas trouvé un moyen de généraliser le graphe de calcul avec des paramètres apprenables.
    • Il n’est pas certain que ce soit possible au sens traditionnel avec les méthodes à base de gradient existantes, à cause d’effets chaotiques où de petits changements provoquent de fortes variations de performance.
    • Une forme d’algorithme génétique ou de PSO devra probablement intervenir en interne.
  • Si vous voulez une approche plus sobre, plus formelle et plus concise, vous pouvez consulter « The Transformer Model in Equations » de John Thickstun. Tout tient sur une seule page en notation mathématique standard.

  • En lisant l’article, une question vient à l’esprit.

    • Les vecteurs correspondant à « Hello » et « World » semblent aléatoires, tout en donnant l’impression de suivre un motif.
    • Je me demande si la répétition du 2 dans le vecteur a une signification, ou si c’est l’ensemble complet qui est unique.
  • J’aimerais trouver un article ou un papier expliquant pourquoi les transformeurs, bien qu’ils fonctionnent simplement comme des « prédicteurs du token suivant », peuvent quand même traiter des mots ou des sous-mots/tokens absents du jeu de données d’entraînement.

    • Par exemple, lorsqu’on crée dans pandas un tableau avec des colonnes « sdsfs_ff » et « fsdf_value », ou quand on fabrique des exemples absents du jeu d’entraînement et qu’on demande à un LLM de produire une sortie similaire.
    • J’aimerais aussi un lien contenant une discussion sur les embeddings positionnels. Je n’ai pas encore obtenu de réponse satisfaisante sur l’usage des sinus/cosinus et sur (multiplication vs comparaison).
  • Les tutoriels sur les transformeurs sont peut-être les nouveaux tutoriels sur les monades. C’est un concept difficile à comprendre, mais comme pour beaucoup de choses en informatique, il faut se battre avec l’idée et s’exercer sur des exemples pour y parvenir.

  • Je connais certains mots.

  • En tant que personne ayant déjà écrit une ANN from scratch sans utiliser TensorFlow, cette explication reste confuse.

    • Quand j’ai demandé à ChatGPT d’expliquer comment modifier une ANN de base pour implémenter la self-attention sans utiliser les termes matrice ou vecteur, il m’a donné une explication vraiment simple.
    • Je préfère penser à tout en termes de nœuds, de poids et de couches. Les matrices et les vecteurs rendent plus difficile le lien avec ce qui se passe réellement dans une ANN.
    • La manière dont j’ai l’habitude d’écrire une ANN suppose que chaque nœud d’entrée est un scalaire, mais l’algorithme feed forward ressemble à une multiplication vecteur-matrice, parce qu’il multiplie tous les nœuds d’entrée par les poids avant de faire la somme.
  • J’aime bien le site web de Quarto. Je vois de plus en plus d’utilisateurs Python employer Quarto pour publier.

  • Je me demande si, à l’étape 7 du décodeur, il ne faudrait pas Z_encoder_decoder = layer_norm(Z_encoder_decoder + Z_self_attention) au lieu de Z_encoder_decoder = layer_norm(Z_encoder_decoder + Z), et si un layer_norm n’a pas été omis à l’étape 8 du décodeur.

  • Je me demande si les LLM utilisent des réseaux de neurones, et ce qui constitue exactement un « neurone ». Autrement dit, existe-t-il une structure de code sous-jacente correspondant au neurone, ou n’est-ce « que » des mathématiques complexes ?