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