Couches d’attention (AdditiveAttention)
Les couches AdditiveAttention sont utilisées dans les réseaux de neurones pour pondérer les éléments d’une séquence en fonction de leur importance relative. L’objectif est de permettre au modèle de se concentrer sur les parties les plus pertinentes de la séquence pour améliorer la qualité des prédictions.
Le principe consiste à calculer un score pour chaque élément de la séquence en combinant les vecteurs de requête (query) et de clé (key) via une fonction additive suivie d’une activation (souvent tanh), puis à appliquer une normalisation softmax pour obtenir des poids d’attention. Ces poids sont utilisés pour produire une combinaison pondérée des valeurs (value), générant une représentation contextuelle de la séquence.
Les couches AdditiveAttention sont utilisées dans les architectures sequence-to-sequence, la traduction automatique, le résumé de texte, la reconnaissance vocale et toute tâche nécessitant de mettre l’accent sur les éléments les plus importants d’une séquence.
En résumé, les couches AdditiveAttention permettent de calculer des représentations contextuelles pondérées des séquences en mettant en avant les éléments les plus pertinents, améliorant ainsi la compréhension et la performance du modèle.
Fonctions :
-
AdditiveAttention()
La couche AdditiveAttention implémente un mécanisme d’attention additive (aussi appelé attention de Bahdanau). Contrairement à l’attention multiplicative (dot-product), elle calcule l’attention en combinant linéairement les requêtes et clés via un réseau de neurones, ce qui peut mieux modéliser certaines relations complexes entre séquences.
Importation :
from tensorflow.keras.layers import AdditiveAttention import numpy as npAttributs :
Paramètre Type Description Valeur par défaut use_scalebool Applique une mise à l’échelle des scores d’attention pour stabiliser l’apprentissage. Falsedropoutfloat Taux de dropout appliqué sur les poids d’attention. 0.0score_biasbool Ajoute un biais lors du calcul des scores d’attention. TrueExemple de code :
from tensorflow.keras.layers import AdditiveAttention import numpy as np # Données simulées : batch de 1 séquence de 3 vecteurs de dimension 5 query = np.random.rand(1, 3, 5).astype(np.float32) value = np.random.rand(1, 4, 5).astype(np.float32) key = np.random.rand(1, 4, 5).astype(np.float32) # Couche AdditiveAttention attention = AdditiveAttention() # Calcul de l'attention output = attention([query, value, key]) print("Shape sortie :", output.shape) # (1, 3, 5)
Explication du code :
Importation de la couche
On importe la couche `AdditiveAttention` de Keras.Préparation des données
On crée des tenseurs `query` (3 vecteurs), `key` et `value` (4 vecteurs chacun) dans un batch de taille 1.Définition de la couche
On instancie la couche `AdditiveAttention` sans paramètres particuliers.Calcul de l’attention
On applique la couche à la liste `[query, value, key]` (ordre requis par la couche) pour calculer l’attention additive.Sortie
La sortie a la forme de la requête, ici (1, 3, 5), avec les vecteurs recombinés selon les poids d’attention.