Couches d’attention (MultiHeadAttention)
Les couches MultiHeadAttention sont utilisées dans les réseaux de neurones pour capturer des relations complexes entre différents éléments d’une séquence. L’objectif est de permettre au modèle de se concentrer sur plusieurs parties pertinentes de la séquence simultanément, améliorant ainsi la compréhension du contexte global.
Le principe consiste à calculer plusieurs mécanismes d’attention en parallèle (les « têtes »), chacun apprenant à pondérer différemment les éléments de la séquence. Les sorties des différentes têtes sont ensuite concaténées et projetées pour produire une représentation enrichie de la séquence, intégrant des informations contextuelles variées.
Les couches MultiHeadAttention sont utilisées dans les architectures transformer, pour des tâches de traduction automatique, génération de texte, résumé automatique, reconnaissance de la parole et toute application nécessitant la capture de dépendances à longue distance dans les séquences.
En résumé, les couches MultiHeadAttention permettent de capter des relations complexes dans les séquences en utilisant plusieurs têtes d’attention simultanées, enrichissant la représentation contextuelle pour améliorer la performance du réseau.
Fonctions :
-
MultiHeadAttention()
La couche MultiHeadAttention implémente le mécanisme d’attention multi-têtes, qui permet au modèle de se concentrer simultanément sur différentes parties de la séquence d’entrée. Elle calcule plusieurs « têtes » d’attention parallèles, puis concatène et projette leurs résultats pour capturer des relations complexes dans les données séquentielles.
Importation :
from tensorflow.keras.layers import MultiHeadAttention import numpy as npAttributs :
Paramètre Type Description Valeur par défaut num_headsint Nombre de têtes d’attention parallèles. — key_dimint Dimension de la clé dans chaque tête d’attention. — value_dimint ou NoneDimension de la valeur dans chaque tête (par défaut égale à key_dim).Nonedropoutfloat Taux de dropout appliqué sur les poids d’attention. 0.0use_biasbool Indique si les projections linéaires utilisent un biais. TrueExemple de code :
from tensorflow.keras.layers import MultiHeadAttention import numpy as np # Données simulées : batch de 1 séquence de 4 vecteurs de dimension 8 query = np.random.rand(1, 4, 8).astype(np.float32) value = np.random.rand(1, 4, 8).astype(np.float32) key = np.random.rand(1, 4, 8).astype(np.float32) # Couche MultiHeadAttention avec 2 têtes, dimension clé 4 mha = MultiHeadAttention(num_heads=2, key_dim=4) # Calcul de l'attention output = mha(query=query, value=value, key=key) print("Shape sortie :", output.shape) # (1, 4, 8)
Explication du code :
Importation de la couche
La couche `MultiHeadAttention` est importée depuis Keras.Préparation des données
Les tenseurs `query`, `key` et `value` sont des séquences simulées, chacun contenant 4 vecteurs de dimension 8 dans un batch de taille 1.Définition de la couche
On crée une instance de `MultiHeadAttention` avec 2 têtes et une dimension de clé de 4.Calcul de l’attention
La couche calcule les scores d’attention entre `query`, `key` et `value` en parallèle sur les têtes, puis concatène les résultats.Sortie
Le tenseur de sortie garde la même forme que la séquence d’entrée, ici (1, 4, 8).