一家机器人初创公司的首席技术官告诉我,“我们认为我们必须做很多工作来构建'机器人ChatGPT'。相反,事实证明,在很多情况下,ChatGPT是机器人的ChatGPT。
直到最近,人工智能模型还是专门的工具。在特定领域(如机器人技术)中使用人工智能意味着花费时间和金钱专门针对该领域创建人工智能模型。例如,谷歌的AlphaFold是一种用于预测蛋白质折叠的AI模型,它是使用蛋白质结构数据训练的,只对处理蛋白质结构有用。
这位创始人认为,要从生成式AI中受益,机器人公司需要为机器人技术创建自己的专用生成AI模型。相反,该团队发现,在许多情况下,他们可以使用现成的ChatGPT来控制他们的机器人,而无需AI专门训练过。
我从从事从健康保险到半导体设计等各个领域的技术人员那里听到了类似的事情。为了创建ChatGPT,一个让人类通过简单地进行对话来使用生成AI的聊天机器人,OpenAI需要改变像GPT3这样的大型语言模型(LLM),以更好地响应人类互动。
但也许无意中,这些相同的变化让 GPT3 的继任者(如 GPT3.5 和 GPT4)被用作强大的通用信息处理工具——这些工具不依赖于 AI 模型最初训练的知识或模型训练的应用程序。这需要以完全不同的方式使用AI模型 - 编程而不是聊天,新数据而不是训练。但它为人工智能开辟了道路,使其成为通用而非专用,更像是一种“任何工具”。
现在,在人工智能炒作的时代,一个重要的警告是:当我说“通用”和“任何工具”时,我的意思是CPU是通用的,而不是专用的信号处理芯片。它们是可用于各种任务的工具,而不是全能和无所不知的。就像优秀的程序员不会在没有代码审查和单元测试的情况下将代码部署到生产环境中一样,人工智能输出也需要自己的流程和程序。我在下面讨论的应用程序是用于提高人类生产力的工具,而不是横行运行的自主代理。但重要的是认识到人工智能可以做什么。
那么,我们是如何走到这一步的呢?
基础知识:概率、梯度下降和微调
让我们花点时间谈谈为生成式人工智能提供动力的LLM是如何工作的,以及它们是如何训练的。
像 GPT4 这样的 LLM 是概率性的;他们接受输入并预测与该输入相关的单词和短语的概率。然后,它们生成一个最适合给定输入的输出。这就像一个非常复杂的自动完成:拿一些文本,然后告诉我接下来会发生什么。从根本上说,这意味着生成式人工智能不是生活在“对与错”的环境中,而是“越来越不可能”。
概率有优点和缺点。弱点是众所周知的:生成式人工智能可能是不可预测和不准确的,不仅容易产生糟糕的输出,而且会以你意想不到的方式产生它。但这也意味着人工智能可以以传统的、基于规则的系统无法做到的方式变得不可预测的强大和灵活。我们只需要以一种有用的方式塑造这种随机性。
打个比方。在量子力学出现之前,物理学家认为宇宙以可预测的、确定性的方式运作。量子世界的随机性起初令人震惊,但我们学会了接受量子怪异,然后实际使用它。量子隧穿基本上是随机的,但它可以被引导,使粒子以可预测的模式跳跃。这就是导致半导体和芯片为您正在阅读本文的设备供电的原因。不要只接受上帝与宇宙玩骰子——学习如何装骰子。
同样的事情也适用于人工智能。我们使用一种称为“梯度下降”的技术训练LLM的神经网络。梯度下降查看模型正在生成的输出,将其与训练数据进行比较,然后计算一个“方向”来调整神经网络的参数,使输出变得“更”正确,也就是说,看起来更像AI给出的训练数据。在我们的魔术自动完成的情况下,更正确的答案意味着输出文本更有可能跟随输入。
概率数学是计算机处理单词的好方法;计算一些单词跟随其他单词的可能性只是在计算,对于计算机来说,“多少”比“更正确或更错误”更容易使用。生成输出,与训练数据进行比较,然后进行调整。冲洗并重复,进行许多小的渐进式改进,最终你会把一个吐出胡言乱语的神经网络变成产生连贯句子的东西。这种技术也可以适用于图片、DNA序列等。
梯度下降是一件大事。这意味着创建 AI 模型是迭代的。你从一个产生大部分错误(不太可能)输出的模型开始,然后训练它,直到它产生大部分正确(更有可能)的输出。但是梯度下降也可以让你采用已经训练过的现有模型,并根据自己的喜好进行调整。
这就是现代人工智能中最强大的技术之一:微调。微调是一种使用梯度下降来获取已经过训练的 AI 模型的方法,并通过在一组精选的数据集上对其进行训练,以特定方式对其进行专业化。训练使用来自已经工作的模型的梯度下降,使AI更好地管理或生成特定类型的数据。
例如,人们采用了Stable Diffusion模型,该模型从文本中创建图像,并将其微调为特别擅长制作动漫图像或风景。当然,有些人会微调为文本设计的语言模型,以便更好地与广告文案、法律文件等配合使用。
但微调远远超出了让人工智能模型专注于特定主题领域。它还可用于训练AI模型如何响应和产生输出。这是一个强大的工具,在推动生成式人工智能向前发展方面发挥了重要作用,包括导致创建 ChatGPT 的两项关键创新。
创新1:以下命令
当 OpenAI 在 2 年发布 GPT2019 时,这是一种令人兴奋的好奇心,可以根据简短的提示编写现实的故事。例如,它写了一些关于安第斯山脉独角兽的很酷的文章。
但是使用 GPT2 就像玩单词联想游戏,因为输出随机跟随输入,但没有用。例如,假设你想要那篇关于安第斯山脉独角兽的文章。但是,如果您想要一篇长篇文章怎么办?或者,如果您想要一个轻巧、轻松的项目符号列表怎么办?
使用 GPT2 就像尝试使用喷雾罐但没有模板和不允许您控制喷涂线宽度的油漆喷嘴进行喷漆。创作艺术是可能的,但要制作出你心目中的特定绘画是非常困难的。
让AI做人类用户想要的事情的问题被称为“AI对齐”。你可能听说过人们谈论将人工智能建设到社会中的“大A”对齐问题,使其符合我们的道德规范,不会杀死我们所有人。但还有一个“小A”对齐问题:如何使生成AI系统的输出更容易被人类用户控制?这有时也称为“可操纵性”。
GPT3 在可以生成的文本的长度和复杂性方面比 GPT2 向前迈出了一步。但同样重要的是,它在对齐方面取得了突破:GPT3 可以明确地遵循命令。OpenAI的研究人员意识到,通过使用与对这些命令的响应配对的命令示例微调GPT3,他们可以使GPT3了解如何明确遵循命令并回答问题。
这是“自动完成”功能的自然延伸 - 训练AI问题之后的下一个单词应该是答案而不是问题的扩展。命令后面的下一个单词,如“给我写一首诗”应该是被要求的诗,而不是命令的更长版本。
假设你想要一篇关于科学家在安第斯山脉发现独角兽的文章。与其简单地写一个摘要提示并让AI填写几段,不如明确地告诉GPT3,“写一篇关于科学家在安第斯山脉发现独角兽的短文,以Buzzfeed列表的风格。它会这样做。
或者你可以说,“写一篇关于科学家在安第斯山脉发现独角兽的文章,以一篇长篇《纽约客》文章的风格和声音。它会写一些更适合该提示的内容。
这是向前迈出的一大步,因为这意味着控制人工智能可以简单直接地用人类语言完成,而不是编写计算机程序。OpenAI 不必在 GPT3 的结构中明确构建遵循命令的能力;相反,它只是构建了一个灵活、强大的语言模型,并使用命令和响应的示例对其进行了微调。
创新2:接受反馈
以下命令使 GPT3 比 GPT2 更容易使用。但它仍然有限。与这样的AI一起工作有点像玩老虎机。拉动杠杆(给出输入),获得输出。也许是好的,也许不是。如果没有,请重试。但正如每个艺术家、程序员或作家都知道的那样,这不是创造的运作方式。创建,如 AI 训练的梯度下降,在迭代时是最好的。
使用生成式 AI 也是如此。如果人工智能产生的东西几乎是正确的,你不想重新开始。你希望它从AI已经给你的输出开始,这样你就可以引导它从坏到好再到好。你需要训练人工智能如何理解反馈。
有一种方法可以做到这一点。AI 模型的输入称为上下文窗口。您可以将上下文窗口视为我们的魔术自动完成功能接收然后继续的文本。使用 AI 的一种方法是将其自己的输出反馈回上下文窗口,以便每个输入不仅仅是一个命令,而是一个命令加上一个“历史记录”来应用该命令。这样,你可以让AI将其过去的输出修改为更好的输出。但是你需要人工智能了解如何获取命令进行编辑,而不仅仅是新的输出。
这就是OpenAI通过一个名为InstructGPT的GPT3版本完成的。为了解决迭代问题,OpenAI 使 GPT3 更好地遵循命令来更改给定的现有文本正文。这意味着训练人工智能在收到反馈时更像人类一样做出反应。为此,OpenAI应用了一种称为人类反馈强化学习(RLHF)的技术。RLHF是一种训练AI的方法,以根据人类的训练示例模仿人类的偏好。
InstructGPT 引入了另一种使用 GPT 的新模式。它不是“这是一个命令,给我一个输出”,而是告诉人工智能,“这是你给我的先前输出,这是我根据你之前给我的内容给我下一步给我什么的反馈,现在给我一个新的输出。
这把与人工智能一起工作变成了一种对话体验;这不是命令和响应,而是与历史的对话。每次人工智能产生输出时,它都会使用整个对话的历史作为基础,而不仅仅是它收到的最新命令。它可以记住你之前告诉它的内容,并将其用作其输出的基础。
就像服从命令一样,RLHF是微调的一个例子。OpenAI 通过对 GPT3 进行微调,从而从 GPT3 创建了 InstructGPT,这些测试人员对响应反馈的 AI 输出进行评级。这是人工智能对齐的又一大进步。通过让AI善于响应反馈,它使使用GenAI的工作流程具有迭代性。
再打个比方:使用早期的人工智能模型就像玩飞镖一样。你可以调整你的形式和位置,试图击中靶心,但每次投掷都是单独的射击。你可能会在第一次投掷时击中靶心,或者你可能永远不会击中靶心。但是使用InstructGPT,它更像是打高尔夫球。从上次中断的位置开始每个笔划。这可能需要几次尝试,但你最终会进入洞中,或者至少到达果岭。
OpenAI 将 InstructGPT 与 GPT3 相结合,创建了 GPT3.5。然后,它将 GPT3.5 放在一个 Web 界面后面,允许任何人从浏览器与其通信,从而创建 ChatGPT。(一个迂腐但有用的区别:GPT3、GPT3.5 和 GPT4 是模型,从上下文窗口获取输入并产生输出的神经网络。ChatGPT 是一个应用程序,在本例中是一个网页,它允许人类通过聊天界面与引擎盖下的 AI 模型(GPT3.5 或 GPT4)进行交互。
那一天,一个现象诞生了:ChatGPT 应该是测试聊天界面的研究预览;相反,它比历史上任何应用程序都更快地达到 100 亿用户。聊天界面显然有所帮助,但其他事情也有帮助。在为 ChatGPT 创建交互式聊天界面时,OpenAI 还将 GPT3.5 及其后续产品(如 GPT4)变成了强大的通用处理工具。
新框架:“处理”而不是“聊天”
我们已经看到了梯度下降如何导致微调,这导致了遵循命令,然后导致反馈和交互。这最终导致了一个令人难以置信的响应式人工智能聊天机器人,以ChatGPT的形式出现。但是现在发生的突破是创建了一个全新的和不同的框架来处理LLM:使用它们不是作为人类正在与之交谈的聊天机器人,使用自己的知识来产生单词和答案,而是作为处理工具,可以被其他软件访问,以处理模型从未见过的数据。
这是它的工作原理。
考虑一下最简单的柏拉图式计算机理想:CPU,一些工作内存和程序。CPU在工作存储器中获取数据,按照程序提供给它的指令进行操作,并处理该数据以产生有用的东西(或不产生有用的东西,取决于程序员的技能)。关键是CPU是通用和通用的,它不必“知道”任何关于它正在使用的数据,所以同一个CPU可以用于各种数据。
现在看看 ChatGPT 是如何工作的。我们有一个 AI 模型 (GPT4),它能够通过上下文窗口获取输入。我们还能够将部分输入视为命令,将部分输入视为命令适用的历史记录或内存。如果我们使用 GPT4 为 ChatGPT 提供支持,我们就创建了一个聊天机器人,该聊天机器人使用该内存来记录它一直在进行的对话。
但是,您没有理由不能用其他信息填充上下文窗口(短期工作记忆)。如果您没有提供对话历史记录,而是向 AI 提供一些其他数据来采取行动,该怎么办?现在,您已经将使用 AI 模型转变为数据处理操作,而不是进行对话。
这是非常强大的,因为与CPU不同,AI模型可以用自然的人类语言而不是二进制代码来获取命令。它有足够的理解和灵活性来处理各种信息,而无需您详细指定和解释事情。
让我们把它翻译成一些具体的、现实世界的例子。您将如何使用具有工作记忆和遵循命令的诀窍的LLM来做一些富有成效的事情?
示例 1:文本和文档
我们将从语言模型最直接的应用程序开始:处理文本。
想象一下,您是一家健康保险公司,正在努力处理大量的保单文件和客户信息。您想构建一个人工智能工具,让用户询问有关该数据的问题并获得有用的答案:我的保险是否涵盖选择性程序?我的免赔额是多少?去除纹身是否包括在内?
你会如何构建它?
旧的方法是采用AI模型,并在所有文档和用户数据上微调该模型,以便它学习该信息。然后用户可以直接向AI提问。但这会产生各种各样的困难,其中最明显的是,每次发生任何更改时,您都必须重新训练和重新部署一个全新的语言模型!此外,您的模型将知道所有用户的策略信息。如果用户 A 询问,如何防止它告诉用户 A 用户 B 的私人信息?
幸运的是,还有另一种方法。我们不必依靠模型来“记忆”信息。相反,我们可以向LLM提供文档和特定用户的策略信息,然后命令它使用该特定数据回答用户的问题。但是上下文窗口是有限的;我们无法向LLM提供我们拥有的所有文件。我们如何只为它提供产生答案所需的相关信息?
答案是使用一种叫做“嵌入”的东西。
请记住,LLM通过将单词转换为数学和概率来处理文本。作为训练的副产品,这些模型还学习单词与概念和其他单词的关系的数字表示。
这些单词和概念的内部数字表示称为嵌入。这就像一个单词和概念的图书馆归档系统:如果你知道一个概念的嵌入,你可以查找它,反之亦然。您可以修改LLM,以便它可以向您报告其单词和短语的嵌入,而不是生成单词。OpenAI和其他AI公司通常有其模型的特殊版本来做到这一点。
所以回到我们的保险例子。首先,我们预处理我们的文档和用户数据,将它们分解成几个句子或段落的小块,然后为每个块分配一个嵌入。嵌入充当一个数字标签,说明每个块的内容。而且由于嵌入是由LLM创建的,因此这些“标签”可以灵活而全面,在不同的概念之间交叉并考虑语言的微妙之处,例如知道谈论用户付款的一大块文本可能与报销和免赔额以及网络外覆盖范围有关。
通过嵌入,我们可以使用LLM来构建搜索引擎!现在,我们可以回答用户的问题,计算该问题的嵌入,并使用问题嵌入来查找哪些文档的哪些部分与该问题相关,并且可能包含答案。这种使用 LLM 的方式被称为“检索器模型”,原因很明显——我们检索数据供 AI 使用。
这就是我们的问答系统的工作原理。用户问一个问题,例如“我对网络外程序的覆盖范围是多少?问答系统首先为问题分配一个嵌入。然后,我们使用我们的嵌入数据库来查找哪些策略文档的哪些块与此问题相关,以及用户自己的策略中的任何相关数据。我们将所有这些块以及用户的原始问题组合成LLM的提示:根据此信息回答此问题。
然后LLM可以给我们一个答案。
这是一种非常灵活和强大的LLM工作方式,可以解决许多实际问题。您可以使用相同的通用LLM来处理保险文书工作,法律文件或历史记录的问题。新信息易于处理,因为您不必更新基础模型,只需更新输入即可。你可以处理很多输入。模型被推到具有越来越大的上下文窗口;像Anthropic这样的人工智能公司已经推动他们的模型具有可以处理整本书的上下文窗口!
处理隐私和安全也简单得多;您可以通过仅在上下文窗口中为授权用户提供 AI 信息来管理隐私,而不是信任 AI 来决定它可以回答哪些问题。
让LLM根据提供给它的信息来回答它被称为“接地”。这使LLM偏向于更信任上下文窗口中的信息,并且是减少让模型组成答案的问题的有效方法。
这个框架能够做的不仅仅是回答问题。
示例 2:机器人
以一个与文本完全不同的应用程序为例:机器人技术。我们在机器人的低级控制方面取得了长足的进步,即感知、移动和操纵物体的机械任务。例如,看看波士顿动力公司制作的机器人杂技视频。但这些都是基本行动。为了做一些有用的事情,机器人需要上下文和方向。
想象一下,办公室里有一个机器人,负责拿起和运送工具、包裹,甚至煮咖啡。假设你想让机器人从爱丽丝那里拿起一个包裹,把它送到鲍勃在三楼的办公室,然后把它放在他的办公桌上。传统上,人类需要用特定的指令对机器人进行编程:检索哪个包裹,哪个办公室是鲍勃的,鲍勃的办公室在哪一层,等等。但是你希望机器人能完成许多不同的任务,并且能够简单地用人类语言接受命令。“把包裹交给鲍勃”变成了一套不同的航点和动作,而不是“为我拿咖啡”。让机器人处理所有这些人类命令,而不必每次都专门编程,这一直是一个挑战。
LLM不太擅长传感和运动规划的低级机器人任务,因为这些是完全不同的范式。但是LLM擅长根据语法规则将单词组合成有意义的句子。什么是编程,而不是将单词放入句子中以便计算机,或者在这种情况下,机器人来理解?我们只需要给LLM一个语法来工作。
因此,我们可以指定机器人可以执行的一组动作,例如移动到目的地、拾取物体或放置物体。把它想象成对Zork等经典文本冒险游戏的回归,在那里你可以命令你的角色向北、向南、向东移动,等等。
然后,我们可以使用此基本的机器人语法来创建一组示例程序来完成不同的任务,例如投递包裹,煮咖啡等。现在我们可以做和以前一样的事情。当人类用户希望机器人做某事时,我们可以使用我们的检索器模型来查找类似的示例程序,然后要求LLM编写一个新程序来做用户想要的事情。它可以采用将包裹放在 Bob 办公桌上的示例程序,并对其进行修改以编写将包裹交给 Alice 的新指令,等等。LLM 并不擅长从头开始创建,但给定示例,它们擅长修改、适应和插值。
这里的关键不是程序很复杂。而是我们现在有一种简单、自动化的方式来生成新程序,而无需繁琐的人工工作。当然,上面的例子是一个玩具问题;在让机器人在办公室放松之前,有许多细节需要管理。但这种类型的技术已经在更结构化的机器人应用中得到应用,其不可预测性较小 - 例如,在工业机器人中,固定机器人可能负责在制造过程中拾取和放置零件。或者通过设置和修改航点序列来控制无人机。
示例 3:半导体
最后一个例子:半导体设计。你会认为硅远非这些语言模型可以现成的任何东西,对吧?但它们在这里也很强大,因为LLM可以擅长编程。
大多数现代芯片,如您可能熟悉的 CPU 和 GPU,都可以使用 1 和 0 的数字逻辑。这与处理模拟波形的芯片不同,例如管理无线电信号或电力电子设备的芯片。这些数字芯片是使用称为逻辑合成的过程设计的。这是一种技术,其中人类设计人员编写代码来指定逻辑运算,如加法、乘法、在内存中移动数据等。然后,复杂的软件会自动将所需的逻辑运算转换为晶体管和电容器等组件的模式,然后其他复杂的软件将这些组件转换为蚀刻到芯片中的硅和铜图案。
逻辑合成是芯片设计的一场革命。这意味着芯片设计人员可以考虑“这个芯片应该做什么”,而不是“我如何构建这个电路”。这与计算机程序员可以用高级编程语言而不是低级二进制代码编写时发生的相同突破。它将芯片设计变成了编写代码。
生成式人工智能可以进行数字合成并对其进行涡轮增压。我们可以应用在这种代码上创建嵌入的相同原理,使我们能够将大量现有芯片设计库转换为AI重新混合和修改的示例。这可以大大加快芯片设计工作。在芯片设计中,与许多编程一样,大部分新设计工作通常是采用旧工作并对其进行修改。现在,一些使用生成式AI的设计人员可以快速创建相同核心芯片设计的许多变体,以涵盖所有这些情况。
在幕后,已经有许多芯片公司在其设计工作流程中试验或采用LLM。我们离能够设计整个芯片的人工智能还很远,但我们很快就达到了一个小团队可以与大团队的产出相提并论的地步——不是通过取消有趣的、创新的芯片设计工作,而是通过加快重复但关键的“繁重工作”,将创新带入实施。