【译】为什么在记忆成为核心组件之前我们无法实现 AGI
原作:史蒂夫·纽曼
引子:思考的难点在于知道要思考什么
上次,我描述了像 ChatGPT 这样的大型语言模型所面临的严峻挑战:它们是在完成的文本上进行训练的,而对创建复杂的文章所必需的概述、充实、修改和迭代过程没有任何见解、设计、代码、战略计划或其他复杂工件。为了实现人类水平的通用智能,我们需要解决这个问题。
今天,我将在“记忆”的大标题下探讨另一组挑战,这些挑战也阻碍人工智能进行深度工作。我认为,正如LLMs当前的进展浪潮是由深度整合丰富的短期记忆(以“注意力”的形式)推动的一样,下一步将需要深度整合同样的短期记忆。丰富的长期记忆……目前的方法(例如向量数据库)还不够,因为它们没有集成到神经网络架构和训练过程的核心中。
记忆是在现实世界中完成任务的核心
我们都有过因记忆障碍而受阻的经历,例如因为找不到钥匙而迟到。即便如此,我认为人们很容易低估记忆对我们所做的几乎所有事情的重要程度。大多数时候,我们可以把我们的记忆视为理所当然,就像鱼把水视为理所当然一样。
例如,假设您的有线电视机顶盒坏了,导致您无法看电视或上网。 奇迹般的是,有线电视公司可以在第二天下午 2:00 至 4:00 之间派出技术人员。 在此之前,您需要做好在没有网络连接的情况下生活; 您还需要下午回家与技术人员会面。 您如何为此做好计划? 你的心理过程可能看起来像这样(数字是对下面注释的引用):
- 嗯,需要有人在这里与技术人员会面。 我有一个我不想错过的生产会议[1]。 爱丽丝(你的妻子)可以在这里吗? 让我查一下她的日历 [2]……不,她有一个客户会议。 我想鲍勃可以在生产会议上代替我 [3],我会做个笔记让他知道 [4]。
- 等等,上次我们有维修技术人员在下午中午来到这所房子时,他们停车很困难[5]。我会请爱丽丝开车去上班,这样我们的位置就空闲了 [6]。
- 呃,<当前热门节目>的新一集今晚播出[7],我们想看。明天工作中人们肯定会讨论剧透。我想我可以通过从笔记本电脑进行流式传输、将笔记本电脑连接到手机以访问互联网,然后通过 HDMI 连接到电视来解决这个问题 [8]。
以下是在这个简短场景中使用内存的方式的部分列表:
- 明天下午有一个生产会议:这些信息来自你的前瞻性记忆——记住你将来需要执行的操作。
- 检查你妻子的日历:在这里,你依赖外部记忆——位于你头脑之外的信息源。
- 鲍勃可以在技术会议上代替我:这里至少有两个步骤。首先,您需要知道谁将参加会议;其次,您需要知道在与会者中,鲍勃是为您代言的不错选择。这些都是语义记忆的实例——语义记忆是存储有关世界的事实的长期记忆的组成部分。
- 记下与鲍勃交谈的内容:假设您将其写在待办事项列表中,那么您正在更新一种外部记忆形式。
- 上次服务技术人员来到家里时:这是情景记忆的一个例子,它记录了您生活中的特定经历(“情景”)。另请注意,该记忆是通过相当微妙的思维链检索的:修理人员即将到来,他们可能会开车,因此他们需要停车,在过去,在这种情况下停车一直是一个问题。这与您“修复有线电视盒”的直接目标只有微弱的联系。
- 让爱丽丝开车去上班:要达到这个解决方案,需要对语义和/或情景记忆进行多次隐式引用——知道你有一个预留的停车位,如果你回家见技术人员,那么它会被占用你的车,爱丽丝通常乘坐公共交通工具去上班,但也可以乘坐汽车,等等。
- 今晚新剧集:前瞻记忆。
- 使用笔记本电脑在没有电缆的情况下看电视:程序性记忆的一个例子,这是记录所学技能和程序的长期记忆的形式。
记忆——长期记忆和外部记忆的多种形式——是这一思维过程每一步的核心。 想象一下打开 ChatGPT 并输入“我的机顶盒坏了,技术人员明天下午会来,我该怎么办?”; 指望它能提供任何帮助是荒谬的,因为它无法访问任何相关信息。
记忆在执行复杂任务中的作用
我并不凌乱,我只是有一个广阔的外部记忆(来源:Imgur)
工作场所中出现的任务通常严重依赖记忆。 想想你将任务交给新雇用的同事和与你共事十年的人之间的区别。 即使新员工拥有同等的职业经验,您也需要为他们提供更多的背景信息,并允许他们有大量额外的时间进行研究和提出问题。 这种差异完全是十年老兵记忆中的信息造成的。
在我的上一篇文章中,我谈到了复杂的任务是如何通过一系列错综复杂的步骤来执行的,随着总体计划的发展,从一个子任务跳到另一个子任务。 在每一步中,都必须考虑相关事实。 其中可能包括:
- 项目的目标和详细要求。
- 如何完成项目的(不断发展的)计划。 例如,大纲或设计草图,以及任意数量的待办事项、悬而未决的问题、未解决的困难和其他手写笔记。
- 当前子任务的相关信息。
- 有关到目前为止已完成的总体工作的信息。
- 更广泛的背景信息。 编写代码时,这将包括整个代码库中其他子系统的大量信息。 更一般地说,是关于公司目标、程序、项目、资源、同事的信息,以及“我们如何在这里做事”的无数细节——所有这些都是区分经验丰富的员工和新员工的信息。
通常,你的记忆会自发地提供你不知道要寻找的事实。 “上次我们有维修技术人员在下午的时候到家,他们停车很困难”和“今晚有一部新电视剧我们真的很想看”都有这种味道。你的长期记忆会通过联想方式检索这些事实,而无需你“询问”它们。 这很重要,因为您不太可能知道要挖掘这些特定的信息。
当我编写代码时,我不断地在短期和长期记忆之间整合信息,管理外部记忆(例如待办事项列表和详细的项目计划),并在现有代码库和相关文档中查找内容。为了考虑 LLM 能够完成类似工作的能力如何,让我们回顾一下它们可用的存储设施。简而言之,当前基于LLM的系统可以将信息存储在模型权重中;token缓冲区;矢量数据库;或“插件”工具。我将依次讨论每一个。
模型权重
LLMs 在训练过程中“学习”大量信息。这些信息以某种方式嵌入到模型的权重中,即模拟神经元之间的连接强度。如果我们训练人工智能进行软件工程,那么算法、数据结构和编程语言的一般知识将驻留在其权重中。
一旦模型训练完毕,权重就不会改变。 因此,它们不是我们一直在讨论的任何项目特定知识的潜在家园。 它们只能用于一般知识,这些知识可以在使用模型之前预先加工。
token缓冲区
这是模型正在处理的聊天记录的技术术语。它保存我们向模型提供的初始指令以及模型的所有输出。
LLMs 似乎非常擅长根据需要从token缓冲区检索信息。然而,目前尚不清楚这种规模能扩大到什么程度。直到最近,token缓冲区通常仅限于几千个字。较新的系统据称支持更大的缓冲区,但它们可能无法非常有效地处理该信息。我不知道有任何令人印象深刻的模型在token缓冲区中管理大量信息的例子。最近有篇论文明确提出了质疑:
- 我们分析了语言模型在两项需要在输入上下文中识别相关信息的任务上的性能:多文档问答和键值检索。我们发现,当相关信息出现在输入上下文的开头或结尾时,性能通常最高,而当模型必须在长上下文中间访问相关信息时,性能会显着下降。此外,随着输入上下文变长,即使对于明确的长上下文模型,性能也会大幅下降。
token缓冲区的另一个限制是无法管理它包含的信息。模型生成的每个新单词,无论重要性如何,都会添加到缓冲区中。没有编辑或删除信息的机制。token缓冲区可以容纳比人类短期记忆更多的内容,但它的灵活性要差得多。
矢量数据库
矢量数据库是允许根据概念相似性检索信息的数据库。
例如,假设电子商务供应商希望允许客户与 LLM 聊天以查找产品。他们可能会为每个产品描述创建一个数据库条目。然后,如果您向聊天机器人询问“高射速 Nerf 枪”,系统将执行以下事件序列:
- 在数据库中搜索概念上类似于“高射速 Nerf 枪”的产品描述。
- 选择最好的几场比赛——比如 5 场比赛。
- 调用 LLM 并显示如下所示的提示:
- 一位电商客户要求购买“高射速 Nerf 枪”。以下是可能与该请求相关的五种产品描述。如果这些产品中的任何一个看起来相关,则生成推荐;否则,请询问更多信息。
- 产品描述1:……
- 产品描述2:……
换句话说,为了使看似相关的数据库条目对 LLM 可见,我们在 LLM 开始处理之前将它们以文本方式插入到token缓冲区中。
人们正在尝试矢量数据库的许多不同用途。要创建一个“了解”某些复杂技术产品的聊天机器人,您可以将产品文档一次一个段落放入矢量数据库中。要创建具有长期记忆的聊天机器人,您可以将聊天历史记录放入向量数据库中。
我不知道这在实践中效果如何,但我非常怀疑它能否在解决执行复杂任务时需要内存的方式方面发挥很大作用。
需要考虑的一些事项:
- 数据库结构极其简单。无法将条目分组在一起、将它们相互链接等。每个条目的检索都是独立于所有其他条目的。
- 检索是全有或全无。如果某个条目看起来相关,则其完整文本将转储到(昂贵地)token缓冲区中。
- 神经网络无法管理数据库中的信息——它无法编辑、重组或删除条目。
- 我怀疑向量相似性比较(向量数据库用来评估概念相似性的机制)是否足够灵巧和灵活,足以模仿我们的大脑在日常管理中实现的联想检索的奇迹。在机顶盒示例中,我不明白该模型如何能够选择“上次我们有服务技术人员在下午中午来到房子时,他们停车很困难”而不是“上次我们有服务技术人员来家里时,他们的名字是“Chip”或任何类似的不相关的事实。
我认为人类长期记忆的基本机制不会受到这些限制。
我对这一切持保留态度; 在此重申,我没有任何矢量数据库的实际经验。 但作为示例,请考虑上面的“具有长期记忆的聊天机器人”场景,其中每个聊天响应都被添加到数据库中。 假设我们希望聊天机器人能够跟踪待办事项列表。 仅附加聊天历史记录的动作会让这件事变得不可行。 一旦“自我提示:做某件事”被添加到历史记录中,它就永远无法删除。 该模型可以添加另一个条目,说“自我注释:X 现已完成”——但这两个注释将永远保留,使数据库变得混乱,并且无法在任何有限的token窗口内检索未完成的待办事项列表。
您可以想象编写一些特殊的代码来帮助模型管理待办事项列表。然而,这将是针对一个非常具体的问题的狭隘解决方案,而这正是现代深度学习架构应该让我们摆脱的问题。这种方法似乎可能会导致系统像老一代软件一样脆弱且容易出现故障。
Plugins 插件
一些LLMs经过训练能够调用其他软件,称为“插件”。这可以包括计算器等工具,但也可以包括传统数据库、互联网搜索或您想让模型访问的任何内容。
例如,假设您要询问 LLM 苹果股票昨天的收盘价。它的训练数据不会包含任何最新信息,但如果模型经过适当的训练和装备,它可以发出网络搜索来查找该信息。
如果我们为模型提供一组插件,用于从传统数据库中添加、更新和检索信息,那么原则上它可以将其用于类似内存的任务。例如,它可以使用数据库表来管理上述待办事项列表。然而,模型必须明确地执行此操作 - 它需要知道在任何给定时刻要发出哪些数据库命令,这意味着它必须以某种方式进行训练才能执行此操作,以概括到我们拥有的每个用例的方式考虑到模型。这似乎需要在训练技术上取得某种重大进步;这又回到了我在上一篇文章中讨论的挑战,其中模型需要以某种方式学习生成一系列有用的动作,逐渐产生结果,而不是试图在一次传递中快速得出最终结果。
总结 LLM 记忆的限制
我认为当前为LLMs配备记忆的机制无法胜任支持复杂思维的任务。简单来说:
- 模型权重是静态的;他们无法流畅地整合新信息。
- token缓冲区的大小似乎受到限制 ,并且没有用于修改或删除缓冲区中的数据的机制。
- 矢量数据库仅限于简单的结构,并且模型没有修改或删除数据的原生能力。
- 插件只有在模型经过训练才能使用它们的情况下才有用;我认为将插件集成到 LLM 中需要取得重大突破,就像长期记忆融入人类思维一样深入。
还应该注意的是,当从矢量数据库或插件检索信息时,必须将其插入到 LLM 的token缓冲区中,并产生与模型处理的任何其他文本相同的生成成本。 如果你的记忆是这样运作的,事实和想法就不会以格式塔的形式直接进入你的思维流;而是会直接进入你的思维流。 相反,它就像一个助手,每次你需要记住任何事情时,一次一词地向你朗读它们。 试图以这种方式完成任何严肃的工作都是低效的。
长期记忆是一个巨大的挑战
从高阶来看,思考可以大致建模如下:
- 选择当前要采取行动的适当信息。
- 处理该信息,产生一些新信息(“想法”)和/或要执行的操作。
- 重复该过程。
当然,这并不是模拟思考的唯一方法,它忽略了许多方面,但它强调了一些重要的事情:你的思维过程的好坏取决于你检索到的信息。 一个想法可以“事后显而易见”的事实说明了这一点:通常,解决问题的困难部分是将正确的事实放在一起,一旦你这样做了,解决方案确实是显而易见的。
导致当前这一代法学硕士的关键设计见解是“注意力机制”,该机制检索与预测下一个单词最相关的token缓冲区条目。 这是信息选择方面的突破,类似于短期记忆,并且被深深地融入到模型的信息处理系统中。 为了实现人类水平的智力,我们需要在长期记忆方面取得同等的突破,甚至需要取得多个突破。 与“注意力机制”一样,但当前的向量数据库不同,长期记忆需要直接与模型的信息处理架构和训练过程相关联。 由于多种原因,这可能比短期记忆更加困难。
- 长期记忆更大。 检索过程将需要考虑更多数量的条目,而不会相应地增加费用。 而且它需要更具选择性,同时又不能过滤掉重要信息。 我们可能需要从几百万个事实中选择几个事实,而不是从几千个事实中选择少数正确的事实,这意味着我们需要在选择正确条目方面提高 1000 倍。
- 长期记忆要大得多。检索过程将需要考虑更多数量的条目,需要增加更大的费用。而且它需要更具选择性,而不是过滤掉重要信息。我们可能需要从几百万个事实中选择几个,而不是从几千个事实中选择少数正确的事实,这意味着我们在选择正确条目方面需要提高 1000 倍。
- 对于短期记忆,当前的LLMs没有更新或删除信息的机制;他们只是让所有东西都堆积在token缓冲区中。这对于长期记忆肯定不起作用。
- 如果我花了两年时间写一部复杂的小说,我一开始管理长期记忆的方式可能会影响我最终将事物联系在一起的能力。当选择有时需要很长时间才能发挥作用时,我们需要找到训练网络的有效方法。
- 人脑利用多种形式的长期记忆,包括外部记忆; 有效的 AGI 可能也需要这样做。 有效利用外部记忆需要一整套我没有提到的额外技能,例如记住在哪里寻找特定信息,或者利用视觉系统快速扫描页面或跳转到图表信息的重要部分。
人脑包含大约 100 万亿个突触(神经元之间的连接),这些连接具有复杂的结构 - 两个相邻的神经元可以在非常不同的方向上建立连接。 这可能是我们编码复杂信息检索模式的能力的核心。 我并不认为我们将能够使用当前基于非神经网络的方法有效地复制这一点,例如使用余弦相似度等简单指标从向量数据库中检索条目。
据报道,GPT-4 拥有约 1.8 万亿个突触——比大脑少 55 倍。 这些突触具有更加规则的(即刚性的)结构,并且无法动态编码新的记忆。 这是一种针对静态的、固有的知识进行优化的设计,当我们寻找适应流动的、不断变化的记忆的方法时,可能没有多大帮助。
对于人工智能来说,要进行深度工作,它们需要流畅的长期记忆。 我们距离实现这一目标还差一个或多个突破。