Memory Bank
Descubre qué es un banco de memoria en deep learning. Explora cómo los bancos de memoria almacenan embeddings para el aprendizaje contrastivo, el seguimiento de objetos y la comprensión de vídeos.
Un banco de memoria es una estructura de datos utilizada en algoritmos de aprendizaje automático para almacenar y consultar información de iteraciones anteriores o de muestras procesadas, desacoplando eficazmente la capacidad de memoria del modelo de sus limitaciones computacionales inmediatas. En el contexto del aprendizaje profundo (DL), un banco de memoria suele servir como repositorio de embeddings o vectores de características. Esto permite al modelo comparar la entrada actual con un amplio historial de entradas anteriores sin tener que volver a procesar todos esos datos ni mantenerlos simultáneamente en la memoria de acceso aleatorio (RAM) activa. Al mantener un búfer de representaciones, los modelos pueden aprender de un contexto más amplio, lo que mejora el rendimiento en tareas que requieren coherencia a largo plazo o comparación con grandes conjuntos de datos.
Mecánica de un banco de memoria#
La función principal de un banco de memoria es ampliar la información disponible más allá del tamaño del lote actual. Durante el entrenamiento, a medida que los datos atraviesan la red neuronal, las representaciones de características resultantes se introducen en el banco. Si el banco alcanza su capacidad máxima, normalmente se eliminan las características más antiguas para dejar espacio a las nuevas, en un proceso conocido como cola de primero en entrar, primero en salir (FIFO).
Este mecanismo es especialmente importante porque la memoria de la GPU es finita. Sin un banco de memoria, comparar una sola imagen con un millón de imágenes requeriría un tamaño del lote imposible de alojar en hardware estándar. Con un banco de memoria, el modelo puede almacenar vectores ligeros de esas imágenes y consultarlos eficazmente mediante técnicas de búsqueda por similitud, como el producto escalar o la similitud coseno.
Aplicaciones en el mundo real#
Los bancos de memoria se han convertido en un elemento fundamental de varios flujos de trabajo avanzados de visión por ordenador (CV) y procesamiento del lenguaje natural:
- Aprendizaje contrastivo (aprendizaje autosupervisado): Una de las aplicaciones más conocidas se encuentra en el aprendizaje contrastivo, concretamente en algoritmos como el Contraste por momentum (MoCo). En este caso, el objetivo es enseñar al modelo a distinguir una imagen concreta de muchas muestras «negativas» (imágenes diferentes). Un banco de memoria almacena miles de representaciones de muestras negativas, lo que permite al modelo aprender características robustas sin necesitar [datos de entrenamiento](https://ultralytics-translation-1.invalid etiquetados). Para obtener detalles técnicos más profundos, los investigadores suelen consultar el artículo de MoCo que popularizó este enfoque.
- Seguimiento de objetos a largo plazo: En el análisis de vídeo, un objeto (como un coche o una persona) puede quedar temporalmente oculto por un obstáculo. Los rastreadores estándar podrían perder la identidad (ID) del objeto durante esta oclusión. Los rastreadores avanzados utilizan un banco de memoria para almacenar las características visuales de los objetos detectados anteriormente. Cuando el objeto reaparece, el sistema consulta el banco para restablecer el ID correcto. Los usuarios que aprovechan Ultralytics YOLO26 para el seguimiento de objetos se benefician de una lógica interna similar que mantiene la coherencia de la identidad entre fotogramas.
- Comprensión de vídeo: Para reconocer acciones que abarcan varios segundos o minutos, los modelos necesitan contexto temporal. Un banco de memoria actúa como búfer para fotogramas o clips anteriores, lo que permite a la red «recordar» lo que ocurrió al principio de un vídeo mientras procesa el final. Esto es crucial para un reconocimiento preciso de acciones.
Diferenciación de conceptos relacionados#
Es útil diferenciar el banco de memoria de otros conceptos de almacenamiento y procesamiento que aparecen en el glosario:
- Banco de memoria frente a base de datos vectorial: Ambos almacenan embeddings para su recuperación. Sin embargo, un banco de memoria suele ser una estructura transitoria en memoria que se utiliza dinámicamente durante el entrenamiento o la inferencia activa de una única sesión del modelo. Una base de datos vectorial (como las que se utilizan en RAG) es una solución de almacenamiento persistente y escalable, concebida para durar indefinidamente y prestar servicio a varias aplicaciones.
- Banco de memoria frente a ventana de contexto: Una ventana de contexto (habitual en Transformers) define la longitud máxima de la secuencia de entrada que procesa el modelo de una vez (por ejemplo, 32k tokens). Un banco de memoria es un búfer externo que almacena representaciones comprimidas fuera de la ventana de procesamiento activa, lo que, en teoría, permite una profundidad de memoria infinita, como se observa en arquitecturas como Transformer-XL.
- Banco de memoria frente a tamaño del lote: El tamaño del lote determina cuántas muestras se procesan en paralelo para actualizar los gradientes. Un banco de memoria aumenta el número efectivo de muestras que el modelo puede «ver» con fines de comparación sin incrementar el coste computacional de las pasadas hacia delante y hacia atrás.
Ejemplo de código: simulación de un banco de características#
El siguiente fragmento de Python demuestra el concepto de un banco de memoria de primero en entrar, primero en salir (FIFO) mediante torch. Esta estructura se utiliza a menudo para mantener un historial rotatorio de vectores de características durante bucles de entrenamiento personalizados o tareas de inferencia complejas.
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])Desafíos y aspectos que debes tener en cuenta#
Aunque son potentes, los bancos de memoria introducen el desafío de la «deriva de las representaciones». Como la red codificadora cambia ligeramente con cada paso de entrenamiento, las características almacenadas en el banco hace 100 pasos pueden estar «desactualizadas» o ser incoherentes con el estado actual del modelo. Técnicas como el uso de un codificador de momentum (un promedio del modelo que se actualiza lentamente) ayudan a mitigar este problema.
Para los equipos que buscan gestionar versiones de conjuntos de datos y artefactos de modelos que utilizan estas técnicas avanzadas, Ultralytics Platform proporciona un centro centralizado para organizar datos, realizar un seguimiento de experimentos e implementar modelos de forma eficiente. Gestionar la complejidad del almacenamiento y la recuperación de características es esencial para pasar de la inteligencia artificial (AI) experimental a sistemas de producción robustos.









