ChatGPT的前世今生:OpenAI的技术「执拗」与「豪赌」(上)

简介: ChatGPT的前世今生:OpenAI的技术「执拗」与「豪赌」

前言


机器之心专栏 作者:追一科技

本文全方位地介绍了 ChatGPT 的能力特征、发展历程以及 OpenAI 一路走来所坚守的技术路线,并对 ChatGPT 出现之后 NLP 领域的范式转换进行了展望,即 ChatGPT 开启「文本生成 + 指令」的范式。


正文


1、ChatGPT,不再「愚蠢」的人工智能


ChatGPT 的相关话题应该算是继 AlphaGo 以来,最出圈的人工智能热点了。简单来说,它是一个可以用自然语言对话的机器人,你可以问它任何问题(当然它有可能会答错,但你可以引导并纠正它),它都会以非常流畅、标准的自然语言回答你。不仅如此,它还能回答代码问题、数学问题等等,你可以和它在关于任何问题上聊得不亦乐乎。


我们可以用一个经典的鸡兔同笼问题来感性地认识一下 ChatGPT 的能力:


1.png

从这个回答可以观察到几个特点。首先是对自然语言的理解和转换为数学问题的能力,其次它通过将一个较为复杂的推理问题分步拆解,一步步获得最后的答案。这个能力被业内称作「思维链」(Chain of thought)。接下来换一下问法,看看它会怎么回答。


2.png

从这个图中可以发现,ChatGPT 对自己所说的内容是有感知的,并且可以给出这么说的原因。另外也可以发现,它确实也会出错(第一次计算耳朵数量错了。此处有个冷知识,鸡是有类似于「耳朵」一样的功能器官),但可以通过引导的方式让它给出正确的答案,并且会告诉你自己为什么错了。


如果不事先告诉你这是一个人工智能模型,ChatGPT 给人的感觉确实像一个真正有逻辑思维和语言交流能力的真人。它的出现第一次让大家觉得,人工智能似乎终于能够和人正常交流了,虽然有时候会出错,但在交流的过程中至少没有语言和逻辑上的障碍,它能「懂」你在说什么,并且按照人类的思维模式和语言规范给你反馈。这种非常智能的体验感,是它突破业界小圈子,给大众带来冲击感的原因。


这里还希望再次强调这种体验感的问题,因为也许过去业界由于技术的限制,为了完成场景中的特定任务而忽略了这一点。如今 ChatGPT 的出现代表了人工智能不再是过去那种「有用,但是也挺蠢」的形态了。


为了更好地理解 ChatGPT 这种非常智能的感觉是怎么产生的,难免要从过去那种「很蠢」的人工智能说起。准确地说,ChatGPT 背后使用的依然是自然语言处理(NLP)技术,但却打破了原有的范式。


要理解这一点,可以先看看目前的主流做法是怎样的。人类交流依托的是语言,甚至也有很多人认为人类的思维也是建立在语言上的。因此,理解运用自然语言一直是人工智能的重要课题。但语言实在太复杂,因此为了让计算机理解运用语言,通常会将这个过程拆分为很多的细分项,这就是在技术领域中常说的「任务」。举几个例子:


  • 情感分析任务,针对的是理解语言所蕴含的情感倾向;
  • 句法分析任务,针对的是分析文本的语言学结构;
  • 实体识别任务,针对的是从文本中定位出实体片段,例如地址、名字等等;
  • 实体连接任务,针对的是从文本中抽取出实体间的关系;


这样的任务还有很多,都是从某个细分的侧面去对自然语言进行分析、处理。这样做有很多好处,比如有了这些拆分,就可以从不同的维度来考察一个自然语言处理系统的细分能力;也可以针对某一个细分的项专门做系统或者模型的设计等。从技术的角度来说,将一个复杂的任务(理解并运用自然语言)拆分为很多的简单任务(各种各样的 NLP 任务)确实是一种比较典型的解决复杂问题的路径,这也是目前的主流做法。然而在 ChatGPT 出现之后,以马后炮视角去看,也许在让计算机理解并运用自然语言这条路上,这种拆分并不是最有效的途径。


因为在单个任务上的优秀表现,并不能代表系统就掌握了自然语言。人对于人工智能体的「智能感」,是基于对它应用自然语言的整体能力而产生的,这一点在 ChatGPT 上有明显的体现。虽然 OpenAI 没有开放 ChatGPT 的 API 服务,外界还无法测评它在各个细分 NLP 任务上的具体效果,但以过往外界对它的前身 GPT-3、InstructGPT 等模型的测试情况表明,对于某些特定的任务,一个用专门数据精调过的小模型,确实可以获得更好的效果(详细分析请参考《深入理解语言模型的突现能力》)。但这些在单个任务上有更好表现的小模型,并没有引起很大的出圈效应。归根结底,是因为它们只有单一的能力。单个的能力出众并不能代表它们具有了理解和运用自然语言的能力,从而也无法独自在实际应用场景中发挥作用。正因如此,通常在一个真实的应用场景中,都是多个具有单点能力的模块经过人为的设计拼凑而成,这种人为的拼凑方式是过去的人工智能系统让人感觉并不智能的原因之一。


从人类理解和运用自然语言的视角去看,这个现象其实很好理解。普通人在理解、运用自然语言的时候,并不会在脑内将它拆分为很多步不同的任务,逐个任务进行分析,然后再汇总,这不是人类使用自然语言的方式。就好比一个人,在听到一句话的时候,并不会对它的句法结构、实体内容与关系、情感倾向等这些内容逐一分析,然后拼凑出这句话的含义,人对语言的理解过程是一个整体过程。再进一步,人对这句话的整体理解,会以自然语言的形式,通过回复的方式整体地表现出来。这个过程并不是像人工智能系统那样,拆分单个任务,然后逐一输出情感分析的标签、实体信息的片段、或是别的某个单个任务的结果,然后用这些东西拼凑出回复。


以 ChatGPT 为代表,GPT 系列模型所做的事情才真正接近了人类理解和运用语言的能力 —— 直接接收自然语言,然后直接回复自然语言,并保证了语言的流畅性与逻辑性。这是人与人的交流方式,所以大家对它抱以「很智能」的体验感。也许很多人会认为,如果能做到 ChatGPT 这样当然很好,过去那种对任务的拆分是因为技术的限制不得已而为之。从技术应用的视角来看,这样迂回的方式当然是需要的,这种方法也在很长的一段时间内被采用,并且确实也能够解决很多实际场景中的问题。但如果回顾 GPT 系列模型的发展过程,就会发现 OpenAI「赌」了另一条路,并且他们「赌」赢了。


2、OpenAI 的「赌局」


GPT 初代,一切开始的地方


早在 2018 年,OpenAI 就发布了最初版本的 GPT 模型,从 OpenAI 公开的论文(Improving Language Understanding by Generative Pre-Training)可以了解到,这个模型采用了 12 层的 Transformer Decoder 结构,用了大约 5GB 的无监督文本数据进行语言模型任务的训练。虽然初代 GPT 模型采用的就已经是生成式的预训练(这也是 GPT 名字的由来,Generative Pre-Training,即生成式预训练),但使用的是无监督预训练 + 下游任务微调的范式。这一范式其实并不是什么新的发明,它在 CV(计算机视觉)领域已经有比较广泛的应用,只是由于当年 ELMo 模型的出色表现,把它重新「介绍」到了 NLP 领域。


GPT 模型的出现在那一年确实引来了一些业内的关注,但它并不是那一年的 C 位主角。因为就在同年,Google 的 BERT 模型横空出世,以优异的效果吸引了几乎全部的目光(这个景象有点像现在的 ChatGPT,不禁感叹 Google 和 OpenAI 之间的「恩恩怨怨」真是天道好轮回)。

 

3.png

图片来自 BERT 论文,从图示中可以一窥当年 BERT 对标的就是 GPT,并引以为傲地指出双向编码能力。


BERT 模型虽然也是采用和 GPT 一样的 Transformer 模型结构,但它几乎就是为「无监督预训练 + 下游任务微调」的范式量身定制的模型。和 GPT 相比,BERT 所使用的掩码语言模型任务(Masked Language Model)虽然让它失去了直接生成文本的能力,但换来的是双向编码的能力,这让模型拥有了更强的文本编码性能,直接的体现则是下游任务效果的大幅提升。而 GPT 为了保留生成文本的能力,只能采用单向编码。


以当年的眼光来看,BERT 绝对是一个更加优秀的模型。因为既然 BERT 和 GPT 两者都是采用「预训练 + 微调」的范式,并且下游任务依然是分类、匹配、序列标注等等「经典」的 NLP 任务形式,那么像 BERT 模型这种更注重特征编码的质量,下游任务选一个合适的损失函数去配合任务做微调,显然比 GPT 这种以文本生成方式去「迂回地」完成这些任务更加直接。


从 BERT 模型出来以后,「无监督训练 + 下游任务微调」的范式便奠定了它的霸主地位,各类沿着 BERT 的思路,琢磨「如何获得更好的文本特征编码」的方法大量涌现,以至于 GPT 这个以生成式任务为目标的模型显得像一个「异类」。马后炮地说,如果当时 OpenAI「顺应大势」,放弃生成式预训练这条路,也许我们要等更长的时间才能见到 ChatGPT 这样的模型。


GPT-2 带来的希望


当然,我们现在见到了 ChatGPT,所以 OpenAI 没有放弃生成式预训练的路线。实际上坚持的「回报」隐约出现在了第二年,也就是 2019 年。OpenAI 发布了有 48 层 Transformer 结构的 GPT-2 模型。在发布的论文(Language Models are Unsupervised Multitask Learners)中,他们发现通过无监督数据配合生成式训练后,GPT 展示出了零样本(zero-shot)的多任务能力。而奇妙的是,这些多任务的能力并不是显式地、人为地加入到训练数据中的。用通俗的话来举个例子,GPT-2 其中一个展示出来的能力是做翻译,但令人吃惊的是,通常专门用来做翻译的模型是需要大量的平行语料(即两种不同语种之间配对的数据)进行监督训练,但 GPT-2 并没有使用这种数据,而仅仅是在大量的语料上进行生成式的训练,然后它就「突然」会做翻译了。这个发现或多或少地带有点颠覆性的意味,它向人们展示了三个重要的现象:


  • 想让模型去完成一种 NLP 任务,也许并不需要和任务匹配的标注数据。例如 GPT-2 训练时没有用标注的翻译数据,但它会做翻译;
  • 想让模型去完成一种 NLP 任务,也许并不需要和任务匹配的训练目标。例如 GPT-2 训练的时候并没有设计翻译任务和相关的损失函数,它只是在做语言模型任务。
  • 仅仅用语言模型任务(即生成式任务)训练的模型,也可以具有多任务的能力。例如 GPT-2 展现出了翻译、问答、阅读理解等等的能力。


虽然以现在的眼光来看,当时的 GPT-2 所展示出来的各种能力还比较初级,效果距离使用监督数据微调后的一些其它模型还有明显的差距,但这并没有妨碍 OpenAI 对它所蕴含的潜在能力充满期待,以至于在论文摘要中的最后一句话中,他们提出了对 GPT 系列模型未来的期望:


“These findings suggest a promising path towards building language processing systems which learn to perform tasks from their naturally occurring demonstrations.”


后来一系列事情的发展也证明了他们确实是一直朝着这个 promising path 的方向在前进。如果说在 2018 年,GPT 初代模型出来的时候,GPT 的生成式预训练还面临着被 BERT 这类以「提取特征」为目地的预训练模型在各方面碾压,那么在 GPT-2 中的发现,给了生成式预训练一个 BERT 类模型无法替代的潜在优势,即语言模型任务所带来的多任务能力,且这种多任务能力是无需标注数据的。


当然,在那个时间点上,生成式的技术路径依然面临风险和挑战。毕竟当时的 GPT-2 在各任务上的表现还是差于经过微调的模型,这导致了 GPT-2 虽然有着翻译、摘要等等能力,但效果太差以至于无法实际使用。因此,如果在当时想要一个可用的翻译模型,最好的选择依然是老老实实用标注数据训练一个专门用来翻译的模型。


GPT-3,数据飞轮的开始


从 ChatGPT 时代往回看,也许 OpenAI 在 GPT-2 中的发现确实坚定了他们对 GPT 系列模型的信心,并决定加大研发投入力度。因为在随后的 2020 年他们发布了 1750 亿参数量的 GPT-3,一个即便以现在的眼光去看也大得让人惊叹的模型。虽然 OpenAI 没有明确公开训练这个模型的费用,但大家的估算是当时花了 1200 万美元。同时公开的还有一篇长达 60 多页的论文(Language Models are Few-Shot Learners),其中详细阐述了这个新的庞然巨物所展示出来的新能力。最重要的发现莫过于论文标题中所说的,语言模型具有小样本(few-shot)学习的能力。


小样本学习是一个机器学习领域的专业术语,但它有着很朴素的理念,即「人类是可以通过少量的几个例子就学会一个新的语言任务」。想象一下在语文课上学习怎么掌握「把」字句换成「被」字句样(雨把衣服淋湿了 —— 衣服被雨淋湿了)的情形,老师会给出几个例子,同学们就能够掌握这项能力。


但对于深度学习模型来说,它通常需要学习(训练)成千上万的例子才能掌握一项新的能力,但大家发现 GPT-3 却像人类一样具有类似的能力。而且重点在于,只需要给它展示几个例子,它就会「有样学样」地完成例子给出的任务,而不需要进行额外的训练(即不需要进行常规训练中的梯度反传和参数更新)。后来的研究表明,这种能力是巨型模型所特有的,被业内叫做「在上下文中学习」(in context learning)的能力。


5.png

GPT-3 论文中所展示的英语翻译法语的 In context learning 能力。


实际上,小样本学习能力本身并不是很惊人的发现。毕竟业内一直都在对小样本学习进行研究,很多专攻小样本学习的模型都有出色的小样本学习能力。但 GPT-3 展示出来的这种「在上下文中学习」的小样本能力却非常出人意料,其原因也和 GPT-2 所展示的多任务能力一样:


  • GPT-3 并没有为了获得小样本的能力而在训练数据、训练方式上做特别的设计,它依然只是一个用语言模型任务训练的生成式模型;
  • GPT-3 的小样本能力是以「在上下文中学习」的方式展现出来的。换句话说,想让它获得新的能力,不需要对它再训练,而只需要给它看几个示范的例子。


除了这个能力以外,GPT-3 还展示出了优秀的文本生成能力,相比 GPT-2,它生成的内容更加流畅,而且可以生成很长的内容。这些能力综合体现在一个模型上,让 GPT-3 在当时成为了大家的关注焦点,它也成为 OpenAI 正式对外提供服务的模型。


但随着这个模型服务的开放,越来越多的人尝试使用这个模型。从这时起,OpenAI 通过开放给公众的方式,同时也在收集着更具有多样性的数据(用户使用时输入的内容可能会被用于模型的训练,这一点是写在用户条款中的),这些数据在后来的模型迭代中也发挥着重要的作用。自此 GPT 系列模型的数据飞轮便转动了起来,越多优质的用户数据,迭代出效果越好的模型


与 ChatGPT 不同的是,GTP-3 并不是采用对话的形式交互的模型,而是一个文本的续写模型(也就是在你输入的文字后面接着往下写),因此它并不具备如今的 ChatGPT 所拥有的多轮对话能力。但它已经能够干很多的事情,例如编写故事、给邮件做自动补全等等。但同时,大家也慢慢发现了一些问题,例如它会一本正经地输出不符合事实的内容,并且会输出一些有害的言论等等。这是这种文本生成模型最突出的弊端,虽然经过多次迭代,但 ChatGPT 如今也依然面临类似的问题。


CodeX,让计算机自己写代码


OpenAI 在对 GPT-3 的研究中还有一个意外的发现,它能够根据一些注释生成很简单的代码。因此在随后的 2021 年,他们对生成代码这件事情进行了专门的研究投入,并发布了 CodeX 模型。它可以看作是一个有着代码专精能力的 GPT 模型,能够根据自然语言输入生成比较复杂的代码


从外部视角来看,我们无法判断代码生成的研究与 GPT 系列模型的研发是否在同时进行。但放在当时,让模型具有生成代码的能力,从实用化的角度来说确实更加具有意义,毕竟 GPT-3 还未拥有如今 ChatGPT 这般强悍的能力。另一方面,让模型去生成代码也能规避它生成有危害文本内容带来的风险。


在 CodeX 论文中提及了几个要点,首先是让经过文本数据预训练的 GPT 模型在专门的代码数据(数据来自 github 的开源代码,一共 159G)上训练确实能够明显提升模型对代码的理解和输出能力。其次是论文中用的是一个 120 亿参数的「小」模型,这个信息从侧面反映出 OpenAI 内部除了对外开放接口的 1750 亿参数的 GPT-3 模型外,还有别的不同大小的模型版本。


而加入代码训练,让模型获得理解和生成代码的决定,原本的初衷也许只是希望 GPT 能够多一种应用场景。它看似与 GPT 系列模型在理解和运用自然语言的能力没有太大的联系,但根据后续的研究(详细的分析请参考文章《拆解追溯 GPT-3.5 各项能力的起源》),增加对代码数据的训练很有可能触发了后来的 GPT 模型在自然语言上的复杂推理和思维链的能力。


也许在 OpenAI 做 CodeX 之初并没有预料到会有这样的结果,但就像他们一直使用文本生成任务来做 GPT 模型,然后在 GPT-2 和 GPT-3 中「解锁」了「多任务的能力」和「在上下文中学习的能力」那样,代码数据的引入又一次让他们获得了意料之外的收获。虽然看上去似乎有一些偶然,但对技术路线的前瞻性认知,加上坚持与持续的投入显然是一个至关重要的因素。


相关文章
|
4天前
|
JSON 自然语言处理 API
|
3天前
|
机器学习/深度学习 自然语言处理 Unix
ChatGPT 4O 来了,使用之后发现似乎没有 OpenAI 官网声称的那么强大
ChatGPT 4O 来了,使用之后发现似乎没有 OpenAI 官网声称的那么强大
61 0
|
4天前
|
人工智能 iOS开发 MacOS
[译][AI OpenAI] 引入 GPT-4o 及更多工具至免费版 ChatGPT 用户
我们推出了最新的旗舰模型 GPT-4o,并为免费版 ChatGPT 用户提供更多功能,包括更快的速度、改进的文本、语音和视觉能力,以及新的桌面应用程序和简化的界面。
[译][AI OpenAI] 引入 GPT-4o 及更多工具至免费版 ChatGPT 用户
|
4天前
|
存储 安全 机器人
【LLM】智能学生顾问构建技术学习(Lyrz SDK + OpenAI API )
【5月更文挑战第13天】智能学生顾问构建技术学习(Lyrz SDK + OpenAI API )
|
4天前
|
机器学习/深度学习 敏捷开发 人工智能
吴恩达 x Open AI ChatGPT ——如何写出好的提示词视频核心笔记
吴恩达 x Open AI ChatGPT ——如何写出好的提示词视频核心笔记
28 0
|
4天前
|
人工智能 自然语言处理 小程序
OpenAI颠覆AI绘画!DALL·E 3与ChatGPT合作,细节展现令人震撼!
OpenAI颠覆AI绘画!DALL·E 3与ChatGPT合作,细节展现令人震撼!
|
4天前
|
JSON Java API
在 Spring Boot 中使用 OpenAI ChatGPT API
在 Spring Boot 中使用 OpenAI ChatGPT API
60 1
|
4天前
|
机器学习/深度学习 自然语言处理 IDE
GitHub Copilot 与 OpenAI ChatGPT 的区别及应用领域比较
GitHub Copilot 和 OpenAI ChatGPT 都是近年来颇受关注的人工智能项目,它们在不同领域中的应用继续引发热议。本文旨在分析和比较这两个项目的区别,从技术原理、应用场景、能力和限制、输出结果、能力与限制和发展前景等方面进行综合评估,帮助读者更好地了解这两个项目的特点和适用性。
69 0
|
4天前
|
机器学习/深度学习 人工智能
看看OpenAI(ChatGPT)怎么回答马斯克呼吁停止ai研究的?
看看OpenAI(ChatGPT)怎么回答马斯克呼吁停止ai研究的?
26 1
|
4天前
|
人工智能 IDE Linux
chatgpt的ai编程工具
该内容是关于两个chatgpt的ai编程工具的安装和使用说明。Copilot的下载步骤包括在IDE的设置中搜索并安装插件,然后重启IDE并登录GitHub账户。使用时,通过写注释触发建议,用快捷键选择建议。启用或禁用Copilot可通过底部状态图标。另一个工具是Alibaba Cloud AI Coding Assistant (Cosy),同样在IDE的插件市场下载安装后重启。其详细使用方法建议参考官网。
35 0