大模型ChatGPT能记住和你的对话吗?事实上,尽管在使用过程中似乎给人以这样的印象,但其记忆机制远比它表面上呈现的要复杂。
Django框架的技术奠基者Simon Willison在一篇博客文章中提出了一个关键观点:许多LLM在看似拥有记忆的同时,实则是无状态函数的体现。一篇针对该主题深入解析的博客文章,引起了业界的广泛关注。
虚假的记忆印象
从计算机科学的角度理解,LLM的推理过程可以看作是无状态函数的调用。即给定的输入文本将输出一个动作序列。不过,对于使用过ChatGPT或Gemini的用户,他们能够明显感觉到LLM似乎‘记住’了之前的对话内容。
LLM之所以能给人一种有记忆能力的印象,其秘密并不在于模型本身,而是在每次提问时所使用的提示中,会包含之前的全部对话内容,我们通常称之为上下文信息。这样一来,如果缺少了上下文,LLM将无法获得先前讨论的内容,每次重新开启对话窗口,意味着对LLM来说是一次全新的文本序列的开始。
分析上下文重要性
认为LLM是可以‘记住’信息的,这种理解误导了人们。其中,LLM的上下文长度是一个重要的维度,它能直接影响模型对先前对话的记忆。如果对话内容超出了上下文窗口的长度,那么最初的对话将被移除,给人一种模型‘忘记’了的感觉。
Andrej Karpathy将上下文窗口形容为LLM的‘工作记忆的有限宝贵资源’。其实,我们可以通过引入一些外部记忆,来扩展LLM的存储能力以满足产品的需求。但这些方法不管多么先进,终究属于‘短期记忆’的范畴,并且在扩展模型上下文长度时成本会呈指数增长。GPT-4o的免费版本支持8k上下文,而付费版本能达到128k,这远远超出了以前的32k的支持,但依然不足以保存一个网页的原始HTML代码。
探索长期记忆方案
对于LLM的长期记忆,人们尝试了几种方法:一种是将之前的对话总结成提示输入LLM,虽然会丢失一些细节,但相比简单的截断,能够保留更多的信息;另一种是外接矢量数据库,这种方式可以在LLM需要时检索并补充相关信息,不过若数据库内容庞大,检索会相应增加响应的时间。
实际开发中,结合检索和摘要是一种平衡成本与性能、长期记忆与短期记忆的普遍手段。
深入训练过程中的记忆机制
尽管LLM的推理过程中显示出了‘无状态’的特点,但其训练过程并非如此,否则模型就无法学习任何知识。不过关键问题是,LLM是通过机械复制训练数据,还是通过类似人类的学习和理解,整合信息并将其编码到参数之中呢?DeepMind最近发布了一篇论文,从一面揭示了这个问题。
通过研究LLM在面对类似训练数据的提示时能否逐字输出数据,这种攻击手段被称作典型的prompt攻击,可以揭示模型在训练中的记忆模式。所有被测试的模型都显示出了能逐字输出训练数据的迹象,不同模型的行为也各不相同。对于拥有更大参数的模型来说,其输出中包含的训练数据的概率会更高。这暗示了大型模型可能通过其参数,将训练数据以‘机械式’的方式保存。
如果能够改良这一记忆方式,让训练数据以更加概括和抽象的方式存储,是否能够提升模型的综合能力呢?本文从多个角度深层次分析了大型语言模型(LLM)的记忆机制,让我们对这个技术有了更深的了解。