内存库是机器学习算法中使用的一种数据结构,用于存储和引用来自过去迭代或已处理样本的信息,有效地将模型的内存容量与其即时计算限制解耦。在 深度学习 (DL) 的背景下,内存库通常用作 嵌入 (embeddings) 或特征向量的存储库。这使得模型能够将当前输入与大量的历史输入进行比较,而无需同时重新处理或将所有数据保存在活动随机存取存储器 (RAM) 中。通过维护一个表示缓冲区,模型可以从更广泛的上下文中学习,从而提高在需要长期一致性或与大型数据集进行比较的任务中的性能。
内存库的主要功能是扩展可用信息,使其超出当前的batch size。在训练过程中,当数据流经神经网络时,生成的特征表示被推入内存库。如果内存库达到其最大容量,最旧的特征通常会被移除,为新特征腾出空间,这一过程被称为先进先出 (FIFO) 队列。
这种机制尤为重要,因为GPU内存是有限的。如果没有内存库,将一张图像与一百万张其他图像进行比较将需要一个标准硬件无法容纳的batch size。有了内存库,模型可以存储这百万张图像的轻量级向量,并使用相似性搜索技术(例如点积或余弦相似度)高效地引用它们。
内存库已成为几种先进的计算机视觉 (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 Platform 提供了一个集中式平台,用于高效组织数据、track实验和部署模型。管理特征存储和检索的复杂性对于将实验性的 人工智能 (AI) 转向稳健的生产系统至关重要。

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