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, 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 incrustaciones o vectores de características. Esto permite a un modelo comparar la entrada actual con un amplio historial de entradas anteriores 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 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.
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 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 «primero en entrar, primero en salir» (FIFO).
Este mecanismo es especialmente importante porque GPU 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 de lote imposible de ajustar en el hardware estándar. Con un banco de memoria, el modelo puede almacenar vectores ligeros de esos millones de imágenes y referenciarlos de forma eficiente utilizando técnicas de búsqueda por similitud, como el producto escalar o la similitud coseno.
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 :
Es útil diferenciar el banco de memoria de otros conceptos de almacenamiento y procesamiento que se encuentran en el glosario:
Los siguientes Python El fragmento muestra el concepto de un banco de memoria de entrada por delante, salida por delante
(FIFO) 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])
Aunque potentes, los bancos de memoria introducen el reto de la «deriva de representación». Dado que la red del codificador cambia ligeramente con cada paso de entrenamiento, las características almacenadas en el banco desde hace 100 pasos pueden estar «obsoletas» o ser inconsistentes con el estado actual del modelo. Técnicas como el uso de un codificador de impulso (una media 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 proporciona un centro centralizado para organizar datos, track los experimentos e implementar 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 .