Memory Bank
Aprende qué es un banco de memoria en el aprendizaje profundo. Explora cómo los bancos de memoria almacenan incrustaciones para el aprendizaje contrastivo, el seguimiento de objetos y la comprensión de vídeo.
Un banco de memoria es una estructura de datos utilizada en algoritmos de aprendizaje automático para almacenar y consultar información de iteraciones pasadas o muestras procesadas, lo que desacopla 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 que un modelo compare la entrada actual con un vasto historial de entradas previas sin necesidad de volver a procesar o mantener todos esos datos en la memoria de acceso aleatorio (RAM) activa simultáneamente. Al mantener un búfer de representaciones, los modelos pueden aprender a partir de un contexto más amplio, mejorando el rendimiento en tareas que requieren consistencia a largo plazo o comparación con grandes conjuntos de datos.
Link to this sectionLa 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 de lote actual. Durante el entrenamiento, a medida que los datos fluyen a través de la red neuronal, las representaciones de características resultantes se introducen en el banco. Si el banco alcanza su capacidad máxima, las características más antiguas suelen eliminarse para dejar espacio a las nuevas, un proceso conocido como cola FIFO (First-In, First-Out).
Este mecanismo es especialmente vital porque la memoria de la GPU es finita. Sin un banco de memoria, comparar una sola imagen contra un millón de otras imágenes requeriría un tamaño de lote imposible de ajustar en hardware estándar. Con un banco de memoria, el modelo puede almacenar vectores ligeros de esos millones de imágenes y consultarlos de manera eficiente mediante técnicas de búsqueda de similitud, como el producto escalar o la similitud de coseno.
Link to this sectionAplicaciones en el mundo real#
Los bancos de memoria se han convertido en una piedra angular en varios flujos de trabajo avanzados de visión artificial (CV) y lenguaje natural:
- Aprendizaje contrastivo (aprendizaje autosupervisado): Una de las aplicaciones más famosas es el aprendizaje contrastivo, específicamente en algoritmos como Momentum Contrast (MoCo). Aquí, el objetivo es enseñar al modelo a distinguir una imagen específica de muchas muestras "negativas" (imágenes diferentes). Un banco de memoria almacena miles de representaciones de muestras negativas, permitiendo al modelo aprender características robustas sin requerir datos de entrenamiento etiquetados. Para detalles técnicos 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 en el pasado. Cuando el objeto reaparece, el sistema consulta el banco para restablecer la ID correcta. Los usuarios que aprovechan Ultralytics YOLO26 para el seguimiento de objetos se benefician de una lógica interna similar que mantiene la consistencia 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 un búfer para fotogramas o clips pasados, permitiendo que la red "recuerde" lo que ocurrió al principio de un vídeo mientras procesa el final. Esto es crucial para un reconocimiento de acciones preciso.
Link to this sectionDistinguir conceptos relacionados#
Es útil diferenciar el banco de memoria de otros conceptos de almacenamiento y procesamiento que se encuentran 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 es normalmente una estructura transitoria en memoria utilizada dinámicamente durante el entrenamiento o la inferencia activa de una única sesión de modelo. Una base de datos vectorial (como las utilizadas en RAG) es una solución de almacenamiento persistente y escalable destinada a durar indefinidamente y servir a múltiples aplicaciones.
- Banco de memoria frente a ventana de contexto: Una ventana de contexto (común en Transformers) define la longitud máxima de la secuencia de entrada que el modelo procesa a la 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 teóricamente permite una profundidad de memoria infinita, como se observa en arquitecturas como Transformer-XL.
- Banco de memoria frente a tamaño de lote: El tamaño de lote dicta cuántas muestras se procesan en paralelo para las actualizaciones de gradiente. Un banco de memoria aumenta el número efectivo de muestras que el modelo puede "ver" con fines de comparación sin aumentar el coste computacional de los pases hacia adelante y hacia atrás.
Link to this sectionEjemplo de código: Simulación de un banco de características#
El siguiente fragmento de Python demuestra el concepto de un banco de memoria FIFO (First-In, First-Out) utilizando torch. Esta estructura se utiliza a menudo para mantener un historial continuo 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])Link to this sectionDesafíos y consideraciones#
Aunque son potentes, los bancos de memoria introducen el desafío de la "deriva de representación". Dado que la red codificadora cambia ligeramente con cada paso de entrenamiento, las características almacenadas en el banco hace 100 pasos podrían estar "obsoletas" o ser inconsistentes con el estado actual del modelo. Técnicas como el uso de un codificador de momento (un promedio de actualización lenta del modelo) 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, la Plataforma Ultralytics proporciona un centro centralizado para organizar datos, realizar un seguimiento de experimentos y desplegar modelos de manera eficiente. Gestionar la complejidad del almacenamiento y la recuperación de características es esencial para pasar de la inteligencia artificial (IA) experimental a sistemas de producción robustos.






