• 周四. 5 月 30th, 2024

学习爱

乐于分享

ChatGPT 人工智能太强大了?原理分析、性能提升【ChatGPT 详解系列之一】

xuexiai

3 月 27, 2023

12 月 1 日,总部位于旧金山的人工智能研究机构 Openai 发布了自然语言生成模型 chat g p t,一个可以基于用户输入文本自动生成回答的人工智能,也就是聊天机器人。凭借着赶超人类的自然对话程度以及逆天的学识,问世,不到一周被吸引了超过 100 万用户,迅速成为了各大社交网络的当红榨子机。网友们不仅用它来夸奖自己,讲笑话、讲相声、续写故事,甚至成为你的嘴替,不论是回答的自然程度还是口吻,都已经非常的接近真人的水平。当然,你还可以用它来完成一些实际的日常工作,比如查询概念、查询菜谱、查询代码、问编程问题。这种快问快答的直观交互方式远超大部分搜索引擎。
除此之外,你还可以用它来代写各种文稿,比如代写产品文档、检讨书、年终总结、代写招聘宣讲会策划、自我介绍、求职性、拒绝性、录制荒野性和辞职性,可以说是从应聘到入池到解雇,一条龙服务全包。而且你如果仔细看每一条机器人的回复,几乎都是有板有眼。不仅语言能力超群,编程开发能力也非常的无敌。你可以让它解释复杂的代码逻辑,或者找到某一段代码的bug,甚至有网友直接用它开发一款 unit 的游戏。这种超群的编程能力让著名的编程社区 stack overflow 上出现越来越多chat、g、p、 t 的回答,导致社区不得不在第一时间屏蔽的回答方式,被 chat g p t 各方面出色的效果反复震惊了。之后,很多人开始感叹自己的职业岌岌可危。
所以拆 g p t 为什么会有出色的表现?它的聊天能力、文学能力、编程能力到底有多强?它到底会取代搜索引擎吗?真的像很多人说的那样,许多职业即将消失, a i 即将战胜人类吗?抱着这些疑问,同时作为一个对自己的饭碗怀着一些担忧的工程师,在一周时间的高密度使用和调研之后,我们就一起来看一看 chat g p t 到底是什么?他到底为什么这么厉害?他对我们的生活都有哪些方面的影响,以及它的局限性和风险。
想要提一下的是,由于篇幅限制,这里对于许多技术细节的描述会相对抽象。而且我做一个机器学习的门外汉,理解深度也有限。如果对更深入的内容感兴趣,可以在对应画面的下方或者视频末尾找到引用资料。在开始讨论之前,鉴于有些人可能还没有实际使用过 chat g p t,这里非常快速的介绍一下如何体验到它的功能。首先,得益于我们强大的程序员同行, chat g p t 已经被接入到不少的微信群、 QQ 群或者公众号上,因此通过简单的搜索,你应该就可以找到相应的使用机会。当然,如果你想尝试一下原味的 chat g p t,淘宝上就可以搜到对应的服务。再进一步的方法我就不多做介绍。
下面我们回到正题。所以 chat g p t 到底是什么?以及它有哪些突破? chat g p t 是一款通用的自然语言生成模型,其中 g p t 是 generative pre train transformer 的简称。生成型预训练变换模型。这个模型被互联网巨大的语料库训练之后,它就可以根据你输入的文字内容来生成对应的文字回答,也就是常见的聊天问答模式。语言模型的工作方式是对语言文本进行概率建模,用来预测下一段输出内容的概率。形式上非常类似于我们小时候玩的文字接龙游戏。比如输入的内容是你好,模型就会在可能的结果中选出概率最高的那一个,用来生成下一部分的内容。而这一次之所以能够有如此强烈的反响,很大程度上是因为它在语言能力上的显著提升。
从网友们的直观反馈上来看, chat g p t 相比其他的聊天机器人,主要在这样几个方面上进步明显。首先,它对于用户实际意图的理解有了明显的提升。以前用过类似聊天机器人或者自动客服的朋友,应该经常遇到机器人兜圈子甚至答非所问的情况。而 chat g p t 在这方面有了显著的提升,大家实际体验之后,感受会非常的明显。
其次是非常强的上下文衔接能力。你不仅能够问他一个问题,而且可以通过不断追加提问的方式,让他不断地改进回答内容,最终达到用户想要的理想效果。这里有一个直观的例子,有人通过多次问答的过程,得到了一个完整的辩论算。策划是对知识和逻辑的理解能力。当你遇到某个问题,他不仅只是给一个完整的回答,同时你对这个问题的各种细节追问,他都能回答出来。比如我问他如何做炸鸡,他回复了一个详尽的菜谱,我继续追问关于蒜的种类,甚至品牌,它都能有逻辑的回答出来。另一方面,这种兼容大量知识,同时富含逻辑的能力非常的适合编程。因此可以在网上看到非常多的关于 chat g、p、 t 如何解释、修改,甚至生成完整代码示例的例子。
所以我们如果要量化这种提升,它到底达到了什么程度?目前还没有 chat g p t 的公开论文,但是非常明确的是, chat g p t 跟 Openai 今年 1 月份发布的另一个模型 instruct g p t 是非常接近的姊妹关系。这里可以看到两个模型连训练过程也非常的接近,因此可以作为非常可靠的参考。
在 Openai 关于 instruct g p t 的论文中,也可以找到这些直观优势的量化分析。首先,在 71% 的情况下, instruct g p t 生成的回答要比 g p t three 模型的回答要更加符合训练人员的喜好。这里提到的 g p t three 是 Openai 的上一代自然语言生成模型,后面我们会更详细的介绍。其次, instruct g p t 在回答的真实程度上也会更加的可靠。当两个模型同时被问到他们完全不知道的内容时, instruct g p t 只有 21% 的情况下会编造结果,而 g p t three 就高了多,达到了41%。这里可能你也发现了,即便是最厉害的模型,也有 1/ 5 的概率会胡说八道,这个我们在后面也会讨论。
除此之外, instruct g p t 在产生有毒回答的概率上也减小了25%。所以汇总下来, instruct g p t 比上一代模型能够提供更加真实可靠的回答,并且回答的内容也会远比上一代更加符合用户的意愿。所以它是如何做到这些方面的提升?我们要看清楚 chat g p t 为什么可以做到如此出色的效果,就需要把视角稍微拉远一些,看一看这款模型近几年的发展历史。从演进关系上来看, chat g p t 是 open AI 的另一款模型 instruct g p t 的姊妹版本,也就是基于 instruct g p t 做了一些调整。而 instruct g p t 的上一代是 g p t three,再往上一个版本是 g p t two,再往上是 g p t,再往前就是 Google 的那篇关于 transformer 的著名论文。需要提一下的,同样是基于 transformer 结构的,还有 Google 自家的 Bert 架构以及对应的分支。所以我们可以得到这样一个分支图。这里我没法对每一篇论文做分析,但是想提到一些比较有趣的决定和突破。
首先,同样是 transformer 架构上分支出来, Bert 和 g p t 的一大不同来自于它们 transformer 具体结构的区别。 Bert 使用的是 transformer 的 encoder 组件,而 encoder 组件在计算某个位置时,会关注它左右两侧的信息,也就是文章的上下文。而 g p t 使用的是 transformer 的 decoder 组件,在计算某个位置时,只关注它左侧的信息,也就是文章的上文。我们如果用一个通俗的比喻,就是在结构上对上下文的理解会更强,更适合嵌入式的表达,也就是完全填空式的任务。而 g p t 在结构上更适合只有上文完全不知道下文的任务。而聊天恰好就是这样的场景。
另一个有趣的突破来自于模型量级上的提升。从 g p t 到 g p t two 再到three, Openai 大力出奇迹,将模型参数从 1. 17 亿提升到 15 亿,进一步暴力提升到了 1750 亿个。以至于 g p t three 比以前同类型的语言模型参数量增加了 10 倍以上,训练数据量也从 g p t 的 5 g b 增加到 g p t two 的 40 g b,再到 three 的 45 t b。
与此相关的是,在方向上, Openai 没有追求模型在特定类型任务上的表现,而是不断的增强模型的泛化能力。所谓语言模型的泛化能力,也就是回答各种没有见过问题的能力。当然,这也就对训练数据量和参数个数上提出了更高的要求。伴随着巨大参数量的是巨大的训练成本, g p t three 的训练费用也达到了惊人的 1200 万美元。
下一个有趣的节点就来到了今天的主角的姐姐 instruct g p t。从 g p t three 到 instruct g p t 的一个有趣改进来自于引入了人类的反馈。用 open and 论文的说法是,在 instruct g p t 之前,大部分大规模语言模型的目标都是基于上一个输入片段 token 来推测下一个输出片段。然而,这个目标和用户的意图是不一致的,用户的意图是让语言模型能够有用,并且安全的遵循用户的指令。这里的指令instruction,也就是 instruct g p t 名词的来源,当然也就呼应了今天的chat。
g p t 的最大优势对用户意图的理解。为了达到这个目的,他们引入的人类老师,也就是标记人员。通过标记人员的人工标记来训练出一个反馈模型。这个反馈模型实际上就是一个模仿人类喜好,用来给 g p t three 的结果来打分的模型。反馈模型再去训练 g p t three,之所以没有让标记人员直接训练 g p t three,可能是因为数据量太大的原因。所以反馈模型就像是被抽象出来的人类抑制,可以用来激励 g p t three 的训练。整个训练方法就被叫做基于人类反馈的强化学习 reinforcement learning from human feedback。
至此,简易版的 instruct g p t 的前世今生就讲完了。我们来回顾一下 Openai 一直在追求的几个特点。首先是只有上文的 decoder 结构,这种结构下训练出来的模型天然适合问答。这种交互方式是通用模型。 open AI 一直避免在早期架构和训练阶段针对某个特定的行业做调优,这也让 g p t three 有着很强的通用能力。
最后是巨量数据和巨量的参数。从信息论的角度来看,这就让生成的语言模型涵盖的人在生活中会涉及的几乎所有的自然语言和编程语言。当然这也就极大地提高了个人或者小公司参与的门槛。既然讲到了原理,还有一个方面,前面没有提及到连续对话的能力。所以 chat g p t 是如何做到能够记住对话的上下文的?这一能力其实在 g p three 时代就已经具备。具体做法是这样的语言模型生成回答的方式其实是基于一个个的token,这里的 token 可以粗略地理解为一个单词。所以 chat g p t 给你生成一句话的回答,其实是从第一个词开始重复,把你的问题以及当前生成的所有内容再作为下一次的输入,再生成下一个token,直到生成完整的回答。既然一句话是基于前面所有的上文一个词生成的,同样的原理,也可以把之前的对话作为下一次问题的输入,这样下一次的回答就可以包含你们之前对话的上下文。因为 g p t three API 里面。

xuexiai

以人力来摘叶子,一整天下来也摘不完一棵树,而秋风一起霜雪一降,一夕之间全部殒落,天地造化的速捷便是如此。人若能得天地造化之精意,则当然能在事物激变的当下灵活应变,而不会在仓促之间束手无策,这便只有真正敏悟智慧的人可能做得到吧!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注