跳到主要内容

多模态记忆

为什么文本记忆机制覆盖不了多模态信息?​

  • 局限: 一张脸的模样、一个人的嗓音等很难用文字描述,前述文本记忆机制无法存储;
  • 问题: 如何跨越上下文边界存储此类多模态记忆,仍处于学术界前沿;
  • 三条思路: 存储原始多模态数据与文本描述、把嵌入压缩存储到上下文、把嵌入压缩存储到模型参数;

思路一:存储原始数据加文本描述怎么做?​

  • 做法: Agent 看到一张没有见过的人脸后,调用工具剪切出图片中的人脸部分,以图片格式保存下来;
  • 索引: 再用文本加以描述和索引,例如在 Markdown 中引用这张图片;
  • 检索: 当 Agent 再次看到一张人脸需要辨认是谁时,先用文本描述检索到相关图片,再读取原始图片,判断是否为同一个人;
  • 边界: 用文本描述多模态信息,仍无法彻底解决有些多模态信息难以用文本表达的问题;

思路二:把嵌入压缩存储到上下文怎么做?​

  • 做法: Agent 调用工具剪切出人脸部分后,计算其嵌入,并把嵌入保存到上下文中;
  • 结构: 上下文中维护一个区域,保存多个多模态信息(如多张人脸、多个人的声纹)各自的嵌入;
  • 检索: Agent 可以始终在上下文中看到所有多模态信息,并利用注意力机制找到最相关的信息;
  • 效率: 相比存储文本描述,每张人脸、每个人的声纹一般只需存储一个嵌入,在上下文中只占 1 个 token 的空间;
  • 量级: 一段 1000 token 的上下文区域就足以容纳 1000 张人脸;

思路三:把嵌入写进模型参数可行吗?​

  • 直接做法: 为每个用户训练一个专属 LoRA,把需要存储的多模态信息写进模型权重;
  • 实测问题: 这样训练出的 fact-LoRA 直接提问时几乎能完美复述,但一旦需要在这些事实之上做间接推理便告失灵;
  • 原因: 冻结的骨干模型从未学过如何去“查阅”一个临时挂载上来的适配器——把事实存进去是一回事,让模型知道何时该取用它则是另一回事;
  • User as Engram 的做法: 不训练 LoRA,而是把多模态信息的嵌入精准地写入 Engram 模型中一个空闲的哈希 N-gram 槽位;
  • 可行的原因: 这类模型在预训练阶段便已学会通过哈希查表来调取记忆,并由一个能感知上下文的门控机制决定何时调取,于是新写入的事实会自然地在应该被想起的时候被想起;
  • 取舍: 相比思路二,存储到 engram 的方法扩展性更强,但需要预训练模型本身支持 Engram,并且查准率可能不如思路二;
  • 出处: Li, Bojie. User as Engram: Internalizing Per-User Memory as Local Parametric Edits. arXiv:2606.19172;