记忆库是一种用于机器学习算法的数据结构,用于存储和引用过去迭代或已处理样本的信息,从而有效地将模型的记忆容量与其即时计算限制解耦。在深度学习(DL)的背景下,记忆库通常作为嵌入向量或特征向量的存储库。 这使得模型能够将当前输入与海量历史输入进行比对,而无需重新处理或将所有数据同时保存在活动随机存取存储器(RAM)中。通过维持表示缓冲区,模型能够从更广阔的上下文中学习,从而在需要长期一致性或与大型数据集进行比对的任务中提升性能。
记忆库的主要功能是将可用信息扩展至当前批处理规模之外。在训练过程中,当数据流经神经网络时,生成的特征表示会被推入记忆库。若记忆库达到最大容量,通常会移除最旧的特征以腾出空间容纳新特征,该过程称为先进先出(FIFO)队列机制。
该机制至关重要,因为 GPU 内存是有限的。若没有内存库,将单张图像与百万张其他图像进行比对时,所需批量大小将超出标准硬件的承载能力。借助内存库,模型可存储百万张图像的轻量化向量,并通过相似度搜索技术(如点积或余弦相似度)高效调用这些向量。
内存库已成为若干先进计算机视觉(CV)和自然语言处理工作流中的基石:
区分内存库与词汇表中其他存储和处理概念是有帮助的:
以下是 Python 该代码片段演示了采用FIFO(先进先出)机制的存储器库概念。 torch该结构常用于在自定义训练循环或复杂推理任务中维护特征向量的滚动历史。
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])
尽管功能强大,记忆库却带来了"表征漂移"的挑战。由于编码器网络在每次训练步骤中都会发生细微变化,记忆库中100步前存储的特征可能已"过时"或与当前模型状态不一致。采用动量编码器(即模型缓慢更新的平均值)等技术有助于缓解这一问题。
对于希望管理数据集版本并利用这些先进技术处理模型成果的团队而言Ultralytics 提供了一个集中式枢纽,可高效组织数据、track 实验并部署模型。管理特征存储与检索的复杂性,对于将实验性人工智能(AI)转化为稳健的生产系统至关重要。