共计 3619 个字符,预计需要花费 10 分钟才能阅读完成。
最近,各种媒体上关于 ChatGPT 的宣传可谓是火爆,我这篇已经是非常落后的一篇,不是我不想早点写出来,而是我也在学习的过程中。下文是我对于 ChatGPT 原理的追溯,也是我认为将来 NLPer 必须掌握的全新技能树。我会把对于 ChatGPT 的理解拆分成下面几个模块,这些模块既是 ChatGPT 中重要的知识模块,同样也是对应的各个技能点,估计用不了多久可能也是其他人工智能相关人员必要的技能点。
文章结构如下:
推测 ChatGPT 的整体结构 (本文)
预训练模型以及 Transformer 捕获信息的能力
Prompt Learning (提示学习)学习指令
使用思维链 (chain-of-thought) 进行复杂推理
基于人类反馈的强化学习的指令微调(Instruction tuning with Reinforcement Learning from Human Feedback, RLHF)
ChatGPT 的局限性和全新的挑战,新的百万年薪岗位指令工程师
ChatGPT 打开脑洞的应用案例
如果你对上面这些内容感兴趣,不妨关注我,第一时间观看文章。
ChatGPT 的整体结构
目前,从 OpenAPI 公开的信息来看,我们能知道的信息并不是很多,所以大体上来说 ChatGPT 对于我们来讲是一个黑盒,如何从 ChatGPT 这个黑盒中寻找到它的结构呢,我们通过五个实验来观察和寻找:
第一个实验,ChatGPT 的训练方式,是传统的语言模型的训练模式吗?
第二个实验,ChatGPT 如何获得基础语言知识、多语言能力、海量的世界知识?
第三个实验,接受指令的能力如何获得?
第四个实验,执行复杂推理的能力从哪里获得?
第五个实验,对话能力、中立、客观、翔实、安全的语言描述能力是怎样获得的?
第一个实验:ChatGPT 的训练方式,是传统的语言模型的训练模式吗?
我们在做语言模型训练的时候,是使用一些文本的上下文信息,来预测目标词的信息的,通过这种方式学习到的语言模型,能够根据输入进来的文字,预测接下来可能产生的文字,预测的结果是一个在词典上的概率分布值,我们在具体决定使用哪一个字作为输出时,会采用一些采样的方法,决定最终被生成的文字,就像下面这张图描述的一样。
那么,ChatGPT 是采用这样的方式来进行训练的吗?
答案是肯定的。ChatGPT 依然是采用这种训练方式来进行训练的,这里有一个很好的例子,当我们使用这种语言模型的方式来进行训练的时候,语言模型会在预测时具有补充全文的“想法”。我们来看下面的例子中,我们给 ChatGPT 一个句子,它也会有把句子补充完整的“冲动”。这就能够在一定程度上说明,ChatGPT 依然是在采用文字接龙的方式来进行预测的。
第二个实验:ChatGPT 如何获得基础语言知识、多语言能力、海量的世界知识?
在我们和 ChatGPT 进行对话的过程中,大家肯定会发现 ChatGPT 能够生成非常通顺的语言,并且能够使用多国语言与你进行对话,甚至对于很多知识的理解也都非常的到位。我们不仅要问,这些能力都是如何获得的呢?
获得这些能力的答案就是预训练。
预训练让模型从海量的数据中学会了基础的语言规则,这一点非常的好理解,这也是一直以来语言模型所秉承的任务,然而 ChatGPT 能够把这种能力放大,还要归功于两个与其他模型不同的地方:更多的数据和更大的模型参数。ChatGPT 训练数据的来源并没有公开,但是我们能知道的是它的训练语料至少包含 — 60% 来自于 2016 – 2019 的 C4 + 22% 来自于 WebText2 + 16% 来自于 Books + 3% 来自于 Wikipedia,这些数据中共包含了 3000 亿个单词,共计 50 TB。并且,学习这些规则的是一个具有 ****1750 亿个参数的模型。如此巨大的语料和模型,让其学会语言中的规则变得非常的轻松。并且由于这种大规模的语言模型,还会出现一些神奇的力量 — 能力涌现,这我们放到后面细说。
如此巨大的语料和模型不但让模型能够轻易学会语言规则,同样学会其中所包含的知识也变得不再困难。这样的能力我们可以从 Bert 时代就观测到,模型是能够从语言中获取相应的知识的,具体的细节我们后面展开。
还有另一个能力,就是多语言的沟通能力。有人可能会说,这种能力的获得,一定是在多语言的语料上进行了训练,模型从不同的语言中学会多语言沟通的能力。我不否定这种观点,但是我认为更有可能的是,模型通过预训练的语言泛化能力,获得了多语言沟通理解的能力。这里我们可以看 2021 年的论文 Multi-Bert 模型中的实验,下面是模型实验的对比图:
上图中,黑色矩形框中是使用中文理解任务 DRCD 对模型进行测试,我们看第一行,使用 QANet 完全不进行预训练的情况下,使用中文 QA 语料进行训练得到的 F1 是 78.1; 而第四行,在 Multi-Bert 上预训练(使用 104 种语言),然后在英文 QA 上进行训练,再进行 DRCD 的测试,发现能够得到的 F1 值也有 78.8. 这是在训练过程中没有使用中文的情况下取得的结果。这能够说明,预训练模型能够让模型具备多种语言的沟通和理解能力。关于 Multi-bert 为什么能够获得多语言的能力,我们在后面进行讲解。
第三个实验:接受指令的能力如何获得?
当我们和 ChatGPT 沟通的时候,ChatGPT 有一项非常与众不同的能力 —“接受调教的能力”。就是你可以根据自己的需求来调教 ChatGPT 按照你期望的方式来与你对话。比如下面这样:
我可以让 ChatGPT 变成一个只会有一句话来总结的机器人。更夸张的是,我们还可以这样,给它一个更加准确的指令。
就这样,ChatGPT 被调教成了猫娘。关于 ChatGPT 调教,以后我们还要讲解很多,因为这可能是未来我们非常重要的能力之一,把机器人调教成你期望的样子,帮助你进行工作。最近国外已经有人拿出百万年薪招聘指令工程师(Prompt Engineer)。
那么,这种能力是从哪里来的呢?
答案就是,Prompt Learning,翻译成中文就是提示学习。我会在下面的文章中详细讨论提示学习的细节知识,帮助你掌握这个非常重要的技术。
第四个实验:执行复杂推理的能力从哪里获得?
与其他对话机器人不同的,还有一个非常重要的能力 — 推理能力。推理能力是我们人类显著区别于其他的动物的重要特征,而为了能够让人工智能具有推理能力也是我们过去一直在追求和努力的。我们做过知识图谱、概率图模型等等的努力,但是终归是差强人意,让我们来看下 ChatGPT 的表现。我给他出了一个逻辑题,看看他能会怎么回答。
大家觉得 ChatGPT 的这个答复你给几分,反正我是觉得挺震撼的。那么,我们不禁要问,这个能力是怎么获得的?
有很多研究支撑是来源于大规语言模型的涌现能力,其中也与模型中加入代码和思维链的训练有非常大的关系。这些我们也会详细的进行讲解。
第五个实验:对话能力、中立、客观、翔实、安全的语言描述能力是怎样获得的?
我们在使用 ChatGPT 的时候,发现 ChatGPT 能够非常中立的、客观的、翔实的、安全的构造出语言来与我们对话,这其实也非常震惊我的。因为在我们使用之前的很多模型进行生成的时候,我们会非常小心的对语料进行审核、对输出结果进行处理,生怕模型输出的内容超过我们的掌控。过去在做对话机器人的过程中,我们花费了大量的时间在处理这些场景。这也导致现有的对话机器人都不是端到端的模式,大部分都采用了各种解耦式的架构,试图通过解耦更好的控制机器人的输出结果。但是这带来的代价也非常的大,就像大家看到的那样,对话机器人都不怎么智能。
但是,ChatGPT 带给我们的是一个端到端的生成,虽然它也会有一些引擎来作为输出的保障,但是总体上它确实能够在一个可控的空间内进行输出。
下面我们来看一个例子:
在上面的回答中,ChatGPT 的回答非常的翔实且中肯,并且还用了总分总的结构来进行叙述。我对他的回答提出质疑,再来看看他是怎么回答的?
在我对它进行质疑的时候,它竟然会使用先跟后带的说服性技巧,他不会像个杠精一样直接怼我,也没有轻易的就妥协于我的观点,这样表述方法非常的聪明,让我不仅吐槽一句:这货情商爆表!
那么,这些能力又是如何获得的呢?
这一切的来源就是基于人类反馈的强化学习的指令微调 (Instruction tuning with Reinforcement Learning from Human Feedback, RLHF) 技术,这种技术能够让 ChatGPT 从人那里学习到正确的表述方式,并且模仿人类进行语言的生成。
以上的五个实验与观察中,让我们了解到 ChatGPT 令人震惊的技术是来源于众多技术的集合:
推测 ChatGPT 的整体结构
预训练模型(Transformer 捕获信息的能力)
Prompt Learning (提示学习)
使用思维链 (chain-of-thought) 进行复杂推理
基于人类反馈的强化学习的指令微调 (RLHF)
而这些技术中,又有着非常多的细节需要我们共同研讨,接下来让我们一起学习这些技术吧。