Attention Sink
iaDéfinition
Les Attention Sinks (puits d'attention) sont un phenomene decouverts par Xiao et al. (MIT, 2023) dans les Transformers auto-regressifs : les LLMs tendent a concentrer massivement leur attention sur les tout premiers tokens de la sequence (generalement le token BOS — Beginning of Sequence), quelle que soit leur contenu semantique. Ces 'puits' absorbent une fraction disproportionnee des softmax weights d'attention. La cause : dans l'attention softmax, les poids doivent toujours sommer a 1. Quand le modele veut 'ne pas attendre' les tokens recents (generer des informations independantes du contexte, ou effectuer une 'no-op'), il doit neamnoins distribuer ses poids quelque part. Les premiers tokens deviennent des 'poubelles' ou deposer ce poids exces — ce comportement est appris pendant le pretraining. L'impact sur les systemes de streaming et de long contexte : StreamingLLM (Xiao et al., 2023) a exploite cette decouverte pour permettre l'inference sur des contextes indefiniment longs avec une fenetre de KV cache fixe. En conservant toujours les K premiers tokens (les attention sinks) dans le KV cache, plus une fenetre glissante de tokens recents, le modele maintient ses capacites de generation meme sur des sequences de millions de tokens. L'implication pour la suppression des KV caches : des travaux d'elagage du KV cache (comme ScissorHands, H2O) qui suppriment les tokens 'non importants' basee sur leurs scores d'attention echouaient jusqu'a ce qu'ils prennent en compte les attention sinks — supprimer les premiers tokens, meme s'ils semblent peu importants semantiquement, degrade massivement les performances. Des solutions architecturales : Mistral 7B a introduit le 'Initial Token Aware' training ou les premiers tokens sont traites differemment. LLaMA 3 et d'autres modeles recents utilisent des strategies de pre-training qui reduisent (sans eliminer) la dependance aux attention sinks, ameliorant les capacites de long contexte.
StreamingLLM : fenetre glissante avec sinks
# StreamingLLM : garder N sinks + W tokens recents
class StreamingCache:
def __init__(self, n_sinks=4, window_size=1024):
self.n_sinks = n_sinks # Nb de tokens 'pivots' a conserver
self.window_size = window_size # Fenetre de tokens recents
self.sink_kv = None # KV cache des pivots (sauvegardes)
self.recent_kv = [] # KV cache des tokens recents
def update(self, new_kv, position):
if position < self.n_sinks:
# Les premiers tokens deviennent des sinks permanents
if self.sink_kv is None:
self.sink_kv = [new_kv]
else:
self.sink_kv.append(new_kv)
else:
# Fenetre glissante pour les tokens recents
self.recent_kv.append(new_kv)
if len(self.recent_kv) > self.window_size:
self.recent_kv.pop(0)
return self.sink_kv + self.recent_kv # Cache actif
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h