Memory Bank
了解深度学习中的记忆库。探索记忆库如何存储嵌入,用于对比学习、目标跟踪和视频理解。
记忆库是一种用于机器学习算法的数据结构,用于存储和引用过去迭代或已处理样本中的信息,从而有效地将模型的记忆容量与其即时计算限制解耦。在深度学习(DL)中,记忆库通常用作嵌入或特征向量的存储库。这样,模型就可以将当前输入与大量历史输入进行比较,而无需同时重新处理所有数据或将其全部保存在活动的随机存取存储器(RAM)中。通过维护表示缓冲区,模型可以从更广泛的上下文中学习,从而提升需要长期一致性或与大型数据集进行比较的任务的性能。
记忆库的工作机制#
记忆库的主要功能是将可用信息扩展到当前批量大小之外。在训练期间,数据流经神经网络,生成的特征表示会被推入记忆库。如果记忆库达到最大容量,通常会移除最早的特征,为新特征腾出空间,这一过程称为先进先出(FIFO)队列。
这一机制尤为重要,因为GPU内存是有限的。如果没有记忆库,将单张图像与另外一百万张图像进行比较,就需要使用无法在标准硬件上容纳的批量大小。有了记忆库,模型可以存储这百万张图像的轻量级向量,并使用相似度搜索技术(例如点积或余弦相似度)高效地引用这些向量。
实际应用#
记忆库已成为多个高级计算机视觉(CV)和自然语言工作流的核心:
- 对比学习(自监督学习): 最著名的应用之一是对比学习,尤其是在动量对比(MoCo)等算法中。在这里,目标是教会模型将特定图像与许多“负”样本(不同图像)区分开来。记忆库存储数千个负样本表示,使模型无需带标签的训练数据即可学习稳健的特征。对于详细的技术内容,研究人员通常会参考推广了这一方法的MoCo 论文。
- 长期目标跟踪: 在视频分析中,某个目标(如汽车或人)可能会暂时被障碍物遮挡。标准跟踪器可能会在这次遮挡期间丢失目标的身份(ID)。高级跟踪器会使用记忆库存储过去检测到的目标的视觉特征。当目标重新出现时,系统会查询记忆库,以重新确定正确的 ID。使用Ultralytics YOLO26进行目标跟踪的用户可以受益于类似的内部逻辑,该逻辑能够保持跨帧的身份一致性。
- 视频理解: 要识别持续数秒或数分钟的动作,模型需要时间上下文。记忆库充当过去帧或视频片段的缓冲区,使网络在处理视频结尾时能够“记住”视频开头发生的事情。这对于准确的动作识别至关重要。
区分相关概念#
将记忆库与术语表中的其他存储和处理概念区分开来会很有帮助:
- 记忆库与向量数据库的区别: 两者都存储用于检索的嵌入。不过,记忆库通常是在单个模型会话的训练或主动推理期间动态使用的临时内存结构。向量数据库(例如RAG中使用的数据库)则是持久、可扩展的存储解决方案,旨在无限期保存数据并服务于多个应用。
- 记忆库与上下文窗口的区别: 上下文窗口(在 Transformer 中很常见)定义了模型一次处理的最大输入序列长度(例如 32k 个令牌)。记忆库是一个外部缓冲区,用于在活动处理窗口之外存储压缩表示,理论上可以实现无限的记忆深度,这一点在Transformer-XL等架构中有所体现。
- 记忆库与批量大小的区别: 批量大小决定了为进行梯度更新而并行处理的样本数量。记忆库可以增加模型用于比较的有效样本数量,而无需增加前向传播和反向传播的计算成本。
代码示例:模拟特征库#
以下Python代码片段使用 torch 演示了先进先出(FIFO)记忆库的概念。这种结构常用于在自定义训练循环或复杂推理任务期间维护特征向量的滚动历史记录。
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 Platform提供了一个集中式中心,用于组织数据、跟踪实验并高效部署模型。管理特征存储和检索的复杂性,对于从实验性人工智能(AI)迈向稳健的生产系统至关重要。









