深圳Yolo 视觉
深圳
立即加入
词汇表

记忆库

内存库是机器学习算法中使用的一种数据结构,用于存储和引用来自过去迭代或已处理样本的信息,有效地将模型的内存容量与其即时计算限制解耦。在 深度学习 (DL) 的背景下,内存库通常用作 嵌入 (embeddings) 或特征向量的存储库。这使得模型能够将当前输入与大量的历史输入进行比较,而无需同时重新处理或将所有数据保存在活动随机存取存储器 (RAM) 中。通过维护一个表示缓冲区,模型可以从更广泛的上下文中学习,从而提高在需要长期一致性或与大型数据集进行比较的任务中的性能。

内存库的机制

内存库的主要功能是扩展可用信息,使其超出当前的batch size。在训练过程中,当数据流经神经网络时,生成的特征表示被推入内存库。如果内存库达到其最大容量,最旧的特征通常会被移除,为新特征腾出空间,这一过程被称为先进先出 (FIFO) 队列。

这种机制尤为重要,因为GPU内存是有限的。如果没有内存库,将一张图像与一百万张其他图像进行比较将需要一个标准硬件无法容纳的batch size。有了内存库,模型可以存储这百万张图像的轻量级向量,并使用相似性搜索技术(例如点积或余弦相似度)高效地引用它们。

实际应用

内存库已成为几种先进的计算机视觉 (CV)和自然语言工作流程的基石:

  • 对比学习(自监督学习): 最著名的应用之一是 对比学习,特别是在 Momentum Contrast (MoCo) 等算法中。其目标是教会模型将特定图像与许多“负样本”(不同图像)区分开来。记忆库存储数千个负样本 表示,使模型无需标注 训练数据即可学习鲁棒特征。有关深入的技术细节, 研究人员常引用推广了这种方法的MoCo论文
  • 长期目标跟踪:在视频分析中,一个物体(如汽车或人)可能会被障碍物暂时遮挡。标准跟踪器在此遮挡期间可能会丢失物体的身份(ID)。高级跟踪器使用内存库存储过去detect到的物体的视觉特征。当物体重新出现时,系统查询内存库以重新建立正确的ID。利用Ultralytics YOLO26进行object tracking的用户受益于类似的内部逻辑,该逻辑可在帧之间保持身份一致性。
  • 视频理解:为了识别持续数秒或数分钟的动作,模型需要时间上下文。内存库充当过去帧或片段的缓冲区,使网络能够在处理视频结尾时“记住”视频开头发生的事情。这对于准确的动作识别至关重要。

区分相关概念

区分内存库与词汇表中其他存储和处理概念会很有帮助:

  • 记忆库与向量数据库两者都存储嵌入以供检索。然而,记忆库通常是一个瞬态的内存结构,在单个模型会话的训练活动推理期间动态使用。向量数据库(如在RAG中使用的)是一个持久的、可扩展的存储解决方案,旨在无限期地存在并服务于多个应用程序。
  • 记忆库与上下文窗口上下文窗口(在Transformer中常见)定义了模型一次性处理的最大输入序列长度(例如,32k token)。记忆库是一个外部缓冲区,它存储活动处理窗口之外的压缩表示,理论上允许无限的记忆深度,正如在Transformer-XL等架构中所见。
  • 记忆库与批次大小批次大小决定了在梯度更新时并行处理的样本数量。记忆库增加了模型可以“看到”用于比较的有效样本数量,而不增加前向和后向传播的计算成本。

代码示例:模拟特征库

以下是 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 Platform 提供了一个集中式平台,用于高效组织数据、track实验和部署模型。管理特征存储和检索的复杂性对于将实验性的 人工智能 (AI) 转向稳健的生产系统至关重要。

让我们一起共建AI的未来!

开启您的机器学习未来之旅