Description du biais positionnel dans les transformers auto-régressifs
Avec un masque causal, chaque token ne peut voir que les tokens qui le précèdent. Cela signifie que les tokens situés au début sont accessibles à presque tous les calculs d’attention ultérieurs, alors que ceux situés plus tard ne le sont qu’à partir d’un certain point.
Ce type d’encodage de position favorisent la proximité avec le token courant. Ainsi, les jetons situés près de la fin de la séquence bénéficient d’une attention renforcée, car leur représentation est plus fortement influencée par la similarité de position avec le token en cours de génération.
L’encodage de position est nécessaire dans les transformers à cause du calcul de l’attention qui prend en compte tous les azutres tokens de la séquence. Sans encodage positionnel, chaque token identique aurait la même influence, peu importe l’endroit dans la séquence :
“Le chat mange la souris” et “La souris mange le chat” seraient équivalents. Avec l’encodage de position, deux tokens identiques mais à des positions différentes auront des vecteurs différents.
Encodage absolu (sinusoïdal ou appris)
Ajouté aux embeddings initiaux. Limité pour extrapoler à des longueurs supérieures à celles vues à l’entraînement.
Stable Mask (2402.04779)
Ajout d’un “pseudo-score” $-\gamma\times(j-1)$ présente une approche de “compensation” du score d’attention excessif sur les premiers tokens en ajoutant un “pseudo-score”: $-\gamma \times (j-1)$ pour la j-ième position, qui diminue au fur et à mesure de la séquence.
Calibration du score d’attention (2406.16008) présente une approche dans laquelle on a le score d’attention de la query avec un doc à la position k qui est fonction ($f$) de la pertinence du doc \(\text{rel}(\text{doc}_k)\) et du biais positionnel à la position k $b_k$. En simplifiant la fonction $f$ (rasoir d’Occam) par une fonction linéaire, on a alors \(\text{Attn}(\text{query}, doc_k) = \text{rel}(\text{doc}_k) + b_k + \epsilon\) Donc en gros ils supposent que le score d’attention entre le document et la query est une combinaison linéaire du biais de position et de la pertinence réelle du document avec la query. Pour isoler $\text{rel}(\text{doc}_k)$, ils introduisent un document “dummy” à la même position $k$ que le document: \(\text{doc}_{\text{k;dum}}$, on a alors $\text{rel}(\text{doc}_k) = \text{Attn}(\text{query}, doc_k) - \text{Attn}(\text{query}, doc_{k;dum}) + \epsilon\) Grâce à la pertinence “effective” de chaque document, ils calculent, $\forall k$, un coefficient de rééchelonnement $\alpha_k$, qui est une fonction Softmax appliquée sur le score de pertinence du document $\text{doc}_k$.
Attention bidirectionnelle entre documents (PCW 2212.10947) propose une modification de l’attention entre documents pour un traitement “indépendant”: Au lieu d’utiliser l’attention causale (unidirectionnelle) qui impose un ordre strict. A contrario, le papier l’approche d’attention bidirectionnelle entre documents propose une approche d’attention bidirectionnelle qui permet à chaque document d’interagir équitablement avec tous les autres.
</div>
<div class="col-md-6">
</div>
</div>
Diminuer le biais positionnel dû à RoPE: L’objectif principal de ROPE est d’encoder l’information positionnelle de sorte que le produit scalaire des embeddings de requête et de clé contienne intrinsèquement l’information relative à la position, c’est-à-dire $f(q_m, m)^T f(k_n, n) = f(q_m, k_n, m - n)$. Ici, $f$ est la fonction d’encodage positionnel appliquée aux embeddings de requête et de clé aux positions $m$ et $n$, respectivement. Pour satisfaire cette condition, la fonction $f$ est définie comme une fonction complexe vectorielle :
\[f(x, m) = x e^{im\theta} = \left[(x_1 + i x_2)e^{im\theta_1};(x_3 + i x_4)e^{im\theta_2};\ldots;(x_{l-1} + i x_l)e^{im\theta_{l/2}}\right]^T\]Dans cette équation, $l$ représente la dimension des embeddings, $\theta_k = 10000^{-2k/l}$, et $i$ est l’unité imaginaire. Pour le calcul du score d’attention, RoPE considère la partie réelle du produit, spécifiquement $\operatorname{Re}\left(f(q_m, m)^T f(k_n, n)\right)$. La fonction trigonométrique $\cos((m-n) \theta)$ est périodique, d’où la waveform qu’on obtient. pour certaines valeurs de $(m−n)$, le cosinus (et le sinus) prend des valeurs élevées (les “pics”), tandis que pour d’autres il prend des valeurs faibles (les “creux”). Ainsi, si une information cruciale se trouve à une position qui correspond à un trough de l’oscillation, son score d’attention sera relativement bas. La fréquence des oscillations est modulée par rapport à $\theta_k$: Donc ce qui se fait couramment pour contrebalancer ça, c’est de prendre plusieurs bases de $\theta$, qui fixe l’échelle exponentielle à laquelle les fréquences décroissent.
Ainsi, plusieurs approches visent à contre-balancer le biais positionnel induit par RoPE:
Attention Bucket (2312.04455)
Plusieurs bases $\theta$ traitées en parallèle.
MS-PoE (2403.04797)
C’est une approche qui applique un facteur $r$ à la position des tokens par tête, modifiant du coup l’oscillation par tête $m/r \theta$ afin de garder la base RoPE sur laquelle a été entraîné le modèle (dans une approche de correction du biais à l’inférence)
</div>
IN2 training (2404.16811)
Fine-tuning sur des QA avec contextes longs formés par concaténation aléatoire de segments courts.
Réordonnancement des documents (ACL-Long’24)
Placer les plus pertinents en début ou fin de prompt.
On mesure
\[A_G = \frac{1}{|G|} \sum_{j\in G} a_{l,j}\]où $l$=dernier token (interrogateur), $G$=positions de la clé, $a_{l,j}$=poids d’attention.
Choix de la dimension $t$ et de l’échelle $s<1$ minimisant la perte
\[\arg\min_{h_t,s<1} \mathbb{E}\left[\sum_{i=1}^{|P|} \mathcal{L}(x,y,p_i; F(\theta,h_t,s))\right]\]avec $F(\theta,h_t,s)$ le modèle scaled sur la $t$-ième dimension.
Modification : scaler la dimension $p$ uniquement pour le calcul du score d’attention du dernier token $l$ :
\[z = \begin{cases} \mathrm{Softmax}\left((q_i K^\top + \mathrm{Mask})/\sqrt d\right)V, & i<l,\\ \mathrm{Softmax}\left((\bar q_l\;\bar K^\top)/\sqrt d\right)V, & i=l. \end{cases}\]Gain significatif sur LongBench :
Introduction de tokens de contrôle formant une spline :
\[s(t)=\sum_{i=0}^n N_{i,k}(t)\,\mathbf p_i\]