Memory Bank
Découvre ce qu’est une banque mémoire en deep learning. Explore comment les banques mémoire stockent des embeddings pour l’apprentissage contrastif, le suivi d’objets et la compréhension vidéo.
Une banque mémoire est une structure de données utilisée dans les algorithmes de machine learning pour stocker et référencer des informations provenant d'itérations précédentes ou d'échantillons traités, découplant ainsi efficacement la capacité mémoire du modèle de ses contraintes de calcul immédiates. Dans le contexte de l'apprentissage profond (DL), une banque mémoire sert généralement de référentiel pour les représentations vectorielles ou les vecteurs de caractéristiques. Cela permet à un modèle de comparer l'entrée actuelle à un vaste historique d'entrées précédentes sans devoir retraiter toutes ces données ni les conserver simultanément dans la mémoire vive (RAM) active. En conservant un tampon de représentations, les modèles peuvent apprendre à partir d'un contexte plus large, ce qui améliore les performances dans les tâches nécessitant une cohérence à long terme ou une comparaison avec de grands jeux de données.
Fonctionnement d'une banque mémoire#
La fonction principale d'une banque mémoire est d'étendre les informations disponibles au-delà de la taille de lot actuelle. Pendant l'entraînement, lorsque les données traversent le réseau neuronal, les représentations de caractéristiques obtenues sont ajoutées à la banque. Si la banque atteint sa capacité maximale, les caractéristiques les plus anciennes sont généralement supprimées pour faire de la place aux nouvelles, selon un processus appelé file premier entré, premier sorti (FIFO).
Ce mécanisme est particulièrement essentiel, car la mémoire du GPU est limitée. Sans banque mémoire, comparer une seule image à un million d'autres images nécessiterait une taille de lot impossible à gérer sur du matériel standard. Avec une banque mémoire, le modèle peut stocker les vecteurs légers de ces millions d'images et les référencer efficacement à l'aide de techniques de recherche par similarité, telles que le produit scalaire ou la similarité cosinus.
Applications concrètes#
Les banques mémoire sont devenues un élément essentiel de plusieurs flux de travail avancés en vision par ordinateur (CV) et en traitement du langage naturel :
- Apprentissage contrastif (apprentissage auto-supervisé) : l'une des applications les plus connues se trouve dans l'apprentissage contrastif, notamment dans des algorithmes comme le Contraste par momentum (MoCo). Ici, l'objectif est d'apprendre au modèle à distinguer une image donnée de nombreux échantillons « négatifs » (des images différentes). Une banque mémoire stocke les représentations de milliers d'échantillons négatifs, ce qui permet au modèle d'apprendre des caractéristiques robustes sans nécessiter de données d'entraînement étiquetées. Pour obtenir des détails techniques approfondis, les chercheurs se réfèrent souvent à l'article sur MoCo, qui a popularisé cette approche.
- Suivi d'objets à long terme : dans l'analyse vidéo, un objet (comme une voiture ou une personne) peut être temporairement masqué par un obstacle. Les systèmes de suivi classiques peuvent perdre l'identité (ID) de l'objet pendant cette occlusion. Les systèmes de suivi avancés utilisent une banque mémoire pour stocker les caractéristiques visuelles des objets détectés précédemment. Lorsque l'objet réapparaît, le système interroge la banque afin de rétablir l'ID correct. Les utilisateurs qui s'appuient sur Ultralytics YOLO26 pour le suivi d'objets bénéficient d'une logique interne similaire, qui maintient la cohérence de l'identité d'une image à l'autre.
- Compréhension vidéo : pour reconnaître des actions qui s'étendent sur plusieurs secondes ou minutes, les modèles ont besoin d'un contexte temporel. Une banque mémoire sert de tampon pour les images ou clips précédents, permettant au réseau de « se rappeler » ce qui s'est passé au début d'une vidéo tout en traitant sa fin. Cela est essentiel pour une reconnaissance précise des actions.
Distinction entre concepts connexes#
Il est utile de distinguer la banque mémoire d'autres concepts de stockage et de traitement présents dans le glossaire :
- Banque mémoire et base de données vectorielle : toutes deux stockent des représentations vectorielles pour permettre leur récupération. Cependant, une banque mémoire est généralement une structure transitoire en mémoire, utilisée dynamiquement pendant l'entraînement ou l'inférence active d'une seule session du modèle. Une base de données vectorielle (comme celles utilisées dans le RAG) est une solution de stockage persistante et évolutive, conçue pour durer indéfiniment et servir plusieurs applications.
- Banque mémoire et fenêtre de contexte : une fenêtre de contexte (courante dans les Transformers) définit la longueur maximale de la séquence d'entrée que le modèle traite à la fois (par exemple, 32k tokens). Une banque mémoire est un tampon externe qui stocke des représentations compressées en dehors de la fenêtre de traitement active, ce qui permet théoriquement une profondeur mémoire infinie, comme dans des architectures telles que Transformer-XL.
- Banque mémoire et taille de lot : la taille de lot détermine le nombre d'échantillons traités en parallèle pour les mises à jour des gradients. Une banque mémoire augmente le nombre effectif d'échantillons que le modèle peut « voir » à des fins de comparaison sans accroître le coût de calcul des passes avant et arrière.
Exemple de code : simuler une banque de caractéristiques#
L'extrait Python suivant illustre le concept d'une banque mémoire premier entré, premier sorti (FIFO) à l'aide de torch. Cette structure est souvent utilisée pour conserver un historique glissant de vecteurs de caractéristiques pendant des boucles d'entraînement personnalisées ou des tâches d'inférence complexes.
import torch
# Initialize a memory bank (Capacity: 100 features, Vector Dim: 128)
# In a real scenario, these would be embeddings from a model like YOLO26
memory_bank = torch.randn(100, 128)
# Simulate receiving a new batch of features (e.g., from the current image batch)
new_features = torch.randn(10, 128)
# Update the bank: Enqueue new features, Dequeue the oldest ones
# This maintains a fixed size while keeping the memory 'fresh'
memory_bank = torch.cat([memory_bank[10:], new_features], dim=0)
print(f"Updated Memory Bank Shape: {memory_bank.shape}")
# Output: Updated Memory Bank Shape: torch.Size([100, 128])Défis et considérations#
Bien qu'elles soient puissantes, les banques mémoire introduisent le défi de la « dérive des représentations ». Comme le réseau encodeur change légèrement à chaque étape d'entraînement, les caractéristiques stockées dans la banque depuis 100 étapes peuvent être « obsolètes » ou incohérentes avec l'état actuel du modèle. Des techniques telles que l'utilisation d'un encodeur à momentum (une moyenne du modèle mise à jour lentement) contribuent à atténuer ce problème.
Pour les équipes qui cherchent à gérer les versions des jeux de données et les artefacts de modèles utilisant ces techniques avancées, l'Ultralytics Platform fournit un hub centralisé pour organiser les données, suivre les expériences et déployer efficacement les modèles. La gestion de la complexité du stockage et de la récupération des caractéristiques est essentielle pour passer de l'intelligence artificielle (AI) expérimentale à des systèmes de production robustes.









