ChatGPT深度解析:GPT家族进化史
目录
1 背景介绍 2 原理解析——从发展历程了解 ChatGPT 2.1 Transformer 2.2 初代 GPT vs. BERT 2.3 GPT-2 2.4 GPT-3 2.5 InstructGPT 2.6 ChatGPT 3 热门关注点 3.1 模型到底是否需要标签监督? 3.2 ChatGPT 对多模态有何启发? 3.3 ChatGPT 为何能对同个问题生成不同的答案? 3.4 ChatGPT 如何拒绝回答知识范围外的问题? 3.5 如何获得更强的泛化? 3.6 小结
01
背景介绍
2022年11月30日,OpenA I发布其最新的聊天机器人模型—— ChatGPT,由此引发热烈讨论。作为一个目前最接近“六边形”战士的聊天机器人,它不仅能够用来聊天、搜索、翻译,还能写故事、写代码甚至是 debug。由于其能力过于惊艳, ChatGPT 成为历史上最快达到1亿用户的应用。各位开发者对其背后的技术充满了好奇。
本文将围绕ChatGPT探讨其原理解析、优缺点、未来发展方向。其中将介绍从Transformer逐步进化到 ChatGPT 的方式,并从分析 ChatGPT 的优缺点开始,思考ChatGPT、AI 的未来发展方向和改进点。
02
原理解析——从发展历程了解 ChatGPT
本章会逐步介绍Transformer(2.1节)、初代GPT vs. BERT(2.2节)、GPT-2(2.3节)、 GPT-3(2.4节)、 InstructGPT(2.5节)、ChatGPT(2.6节)。如果你对某个演进节点特别感兴趣,可以优先跳转到对应章节阅读了解。
2.1 Transformer
2.1.1 Transfermer 背景
2017 年,Google 的一篇题为 Attention is all you need 的 Paper 横空出世,自此完全使用 Attention 机制的 Transformer 模型开始主导 NLP 领域。不久后,利用 Transformer 模型结构的预训练语言模型 GPT 和 BERT 大放异彩。时至今日,基于 GPT 和 BERT 的预训练语言模型进行 Fine-tuning 仍然是 NLP 中广泛任务的首选范式。除了 NLP 领域,Transformer 结构也被应用到了计算机视觉领域,由此诞生了一系列比CNN更强大的模型,如 ViT、BEiT 和 MAE。可以说,Transformer 结构继 RNN、CNN (以及其一系列变体 LSTM、GRU、ResNet、DenseNet 等) 之后,在 Inductive Bias 方向上打开了一个新世界的大门。2.1.2 Transfermer 主要特点
-
第一,通过 Self-Attention
(如图1左所示)
,每个词都和所有词计算 Attention,因此不论序列中词与词之间的距离有多长,他们之间的最大路径长度都为1,因此可以捕获更长的依赖关系。
- 第二,提出Multi-head Attention (MHA)(如图1右所示) , 通过多个 Head 学习不同的子空间语义,最后通过 Concat 和 Linear 操作降维至单 Head 的 Size,这相当于多个子空间语义表示的 Ensemble。
- 第三,整体结构遵从 Encoder-Decoder 的形式,其中 Decoder 的每个 Block 比Encoder 多了一个 Masked Multi-Head Attention (MMHA) 。MMHA 结构同MHA,只不过 Mask 矩阵中要屏蔽当前位置之前的词与当前位置之后的词的联系,使得文本下文信息不提前泄露,例如生成式任务 (如机器翻译) 是从前到后逐步生成的。
2.2 初代GPT vs. BERT
这里我们会先讲 初代GPT,然后介绍BERT实验,最后在2.2.3将二者的试验训练进行对比。
2.2.1 初代GPT
接下来我们会分别讲到初代GPT的模型结构、训练方法、Task-specific input transformations、数据集、实验结果概览,然后进行小结。
- 初代GPT模型结构
GPT (Generative Pre-Training) 是 OpenAI GPT 系列的开山之作。在模型结构方面, GPT 仅使用了 Transformer 的 Decoder 结构,并对 Transformer Decoder 进行了一些改动。如图三所示,原本的 Decoder 包含了 MHA 和 MMHA,而 GPT 只保留了 MMHA,这确保了 GPT 只能关注上文的信息,从而达到单向模型的目的。
- 初代GPT 训练方法——无监督Pre-training + 有监督 Fine-tuning
- 【无监督 Pre-training】
- 【有监督Fine-tuning】
因此,Fine-tuning阶段最大化以下目标:
此外,初代 GPT 将语言建模作为微调的辅助目标以帮助 Fine-tuning 阶段(a)提升泛化性,(b)加速模型收敛。具体地,整个 Fine-tuning 阶段的优化目标为:
相比Pre-training阶段,Fine-tuning 引入了额外的参数包含 和 delimiter tokens (分隔符) 的 embeddings。而 delimiter tokens 是针对 Fine-tuning 阶段不同的下游 tasks进行设计的,目的是为了使得 Pre-training 得到的模型能在 Fine-tuning 的时候适配不同的 tasks。
- Task-specific input transformations(特定于任务的输入转换)
Textual Entailment 如图三所示,对于文本蕴含任务,GPT在 Fine-tuning 阶段将前提p (premise ) 和假设 h (hypothesis) 的 toke n 序列拼接,并在二者中间添加分隔 (delimiter) token ,用$表示。
- 初代GPT 数据集
有监督Fine-tuning
- 初代GPT 实验结果概览
Question Answering & Commonsense Reasoning
Semantic Similarity & Classification
GPT Fine-tuning 阶段迁移层数的影响和 Pre-training 阶段迭代次数对 zero-shot 性能的影响 (GPT vs. LSTM)
从图五(左)可以看出,Fine-tuning 阶段使用更多层数的 Pre-training 模型可以显著提升下游任务的性能;而图五(右)说明(a)GPT在 zero-shot 方面比 LSTM 效果好,并且方差低 (方差低没有数据展示,但作者在原文中提到了) ,(b)随着 Pre-training 的训练步数的增加,GPT 的 zero-shot 能力稳步提高。
- 初代GPT 小结
2.2.2 BERT
本小节会讲BERT的模型结构、输入构造、训练方法、数据集和实验结果。- BERT模型结构
BERT (Bidirectional Encoder Representations from Transformers ) 的模型结构采用了原始 Transformer 的 Encoder (如图六所示) 。由于没有 MMHA,因此在建模时允许每个 token 访问其前后两个方向的 context,因此 BERT 是双向的语言模型。
至于为什么需要选择支持双向的Encoder,在这里引用作者原文的话 :"The major limitation is that standard language models are unidirectional, and this limits the choice of architectures that can be used during pre-training. For example, in OpenAI GPT, the authors use a left-to-right architecture, where every token can only attend to previous tokens in the self-attention layers of the Transformer. Such restrictions are sub-optimal for sentence-level tasks and could be very harmful when applying finetuning-based approaches to token-level tasks such as question answering, where it is crucial to incorporate context from both directions."
大概的意思是: 标准语言模型是单向的,这限制了在预训练期间可以使用的结构选择。 例如,在 OpenAI GPT 中,作者使用从左到右的架构,其中在 Self-attention 中每个 token 只能访问先前的 token。这种限制对于句子级任务来说是次优的,并且在将基于微调的方法应用于 token-level 任务 (如问题回答) 时可能非常有害,因为在这些任务中,从两个方向结合上下文是至关重要的。
- BERT 输入构造
- BERT 训练方法——无监督Pre-training+有监督Fine-tuning
如图八所示。与初代 GPT 相同,BERT 也分为无监督 Pre-training 和有监督 Fine-tuning 两个阶段。
- 【无监督 Pre-training 】
| Task-1 MASK LM |
|
| Task-2 Next Sentence Prediction (NSP) |
QA 和 Natural Language Inference
(NLI)
等许多重要的下游任务都是基于理解两个句子之间的关系,而语言建模并不能直接捕捉到这种关系。为了训练BERT能够理解句子的关系,作者提出一个预测下一句的二分类任务,这种任务很容易在任何语料中生成。对于 NSP 中的句子对儿(A,B),有 50% 的句子 B 在语料中是紧跟句子 A 的下一句,有50%的句子 B 是在语料中随机选择的。如图八所示,
|
- 【有监督Fine-tuning】:
- BERT 数据集
- BERT 实验结果
Ablation Study——Pre-training Task:
如上表所示。作者首先针对 Pre-training task 进行消融实验,以验证 MASK LM 和 NSP 任务的有效性。其中 LTR (Left to Right) 表示类似 GPT 的从左到右的语言建模任务。+BiLSTM 表示在输出层前增加 BiLSTM 网络。从中可以看出 MASK LM 和 NSP 任务的有效性是显著的。
Ablation Study——Model Size:
另外,作者针对模型参数量进行了消融实验。从上表可以看出,模型越大,在下游任务中的表现越 好(这其实初步展示了大模型的潜力) 。
2.2.3 初代GPT和BERT的对比
2.3 GPT-2
本节会先介绍其原理(2.3.1),接着分享实现(2.3.2)、实验结果(2.3.3),最后得出小结(2.3.4)。
GPT-2的核心思想是: 可以直接用无监督的 Pre-training 模型直接去做有监督任务。 GPT-2在模型结构方面和GPT-1完全一致,Pre-training的任务也没有改变, 那究竟是什么给 GPT-2 带来如此大的自信,可以让它在无监督 Pre-training 后直接用来做有监督任务呢? 接下来,我将按照作者原文的思路,进行剖析。
2.3.1 GPT-2 原理
- Language Modeling 的实际行为
这种建模方式的缺点是: (a)参数空间过大,但 Transformer 结构给大模型带来了光明; (b)数据稀疏,但算力的提升以及资本的力量允许我们在超大规模语料上训练。
- NLP中对所有任务建模方式的通用表达
例如, 一个翻译任务的样本 可以被表达成 (translation to french, english text, french text) 的形式; 一个阅读理解的样本可以被表 达为 (answer the question , english text, french text)。由此可见,以这种数据格式可以有监督地训练 single model,其不需要特定任务的编码器或者解码器,就能执行多任务,
- LM在达到一定条件时实际上可以看作有监督多任务学习
- GPT-2 讨论
其次子标题(2)中的分析说明,LM 可以以其灵活的方式建模单模型多任务学习。
最后子标题(3)说明,有监督多任务学习是 LM 的子集。实际上有监督任务的监督信号是会出现在无监督任务的语料中的,只要语料足够大,那么就能 cover 到多个任务。综上可以得出结论,只要模型参数量足够大,预训练语料足够丰富,那么无监督 Pre-training 得到的 LM 就能直接拿来执行多任务。
2.3.2 GPT-2 实现
- GPT-2 模型结构
上表中第一个模型的参数规模与初代GPT相同,第二个模型的参数规模与BERT (Large) 相同。而最后一行的模型是发布的GPT-2。
- GPT-2 训练语料
2.3.3 GPT-2 实验结果
- LM结果
在8个语言模型任务中,仅仅通过zero-shot学习,GPT-2就有7个超过了state-of-the-art的方法;
- NER
在Children's Book Test数据集上的命名实体识别任务中,GPT-2超过了SOTA的方法约7%。参数规模越大效果越好。 LAMBADA数据集是测试模型捕捉长期依赖的能力的数据集,GPT-2将困惑度从99.8降到了8.6。在阅读理解数据中,GPT-2超过了4个baseline模型中的三个。在法译英任务中,GPT-2在zero-shot学习的基础上,超过了大多数的无监督方法,但是比有监督的state-of-the-art模型要差。GPT-2在文本摘要上的表现不理想,但是它的效果也和有监督的模型非常接近。
2.3.4 GPT-2 小结
GPT-2 验证了通过扩大参数规模和Pre-training语料的规模就可以迁移到多个任务且不需要额外的Fine-tuning。尽管其在有些任务上表现得不够好,但其已经初步展现了大模型大语料Zero-shot的潜力,未后续大模型的发展提供了有依据的方向。
2.4 GPT-3
本节会先介绍其原理(2.4.1),接着分享实现(2.4.2)、实验结果(2.4.3),最后得出小结(2.4.4)。
GPT-3的核心卖点是:仅仅需要zero-shot或者few-shot就能在下游不同任务上表现得很好,并且在很多非常困难的任务上也有惊艳的表现。
2.4.1 GPT-3 原理
到GPT-3之前,LM 已经取得了巨大的成功,例如初代 GPT、BERT 的 Pre-training + Fine-tuning, 以及 GPT-2 所展现的 Zero-shot 能力。但是,当模型结构是 task-agnostic 的时候,前述 LMs 仍然需要特定任务的数据集和特定任务的 Fine-tuning (即便强大如GPT-2在某些任务上也需要Fine-tuning ) 。这是在 GPT-3 之前 LMs 最大的缺点 (尽管已经很强了,但是目标要大一点) 。解决这一缺陷的必要性如下:
从实用角度来看,对于每一项新任务都需要一个有标注的大数据集,这限制了语言模型的适用性 (尽管在我们看来,标注数据是不可避免的,但GPT-3团队的目标很大) 。更糟糕的是,对于很多应用前景很广泛的任务,例如语法纠错、生成抽象概念的示例、评论story,很难收集一个大型的监督训练数据集,特别是当每个任务都要重复这样的步骤。
在有标注数据上 Fine-tuning 得到的大模型其在 Out-of-distribution (OOD) 数据上泛化性不一定更好, 因为模型过度偏向fine-tuning数据分布 (回想下初代 GPT 为什么要在 Fine-tuning 阶段加入 Pre-training LM的损失) 。因此,Fine-tuning 模型在特定 Benchmark上的性能,即使名义上是人类水平,也可能是被夸大了实际性能。
对于人类这个智能体而言,其不需要大量的有监督的数据集去学习绝大多数 NLP 任务。简短的几个示例足以使人类以合理的能力执行新任务。如果 LM 能到达类似的能力,那么将会极大地增加其通用性。
作者认为,解决该缺陷的主要思路是: 借用 meta-learning (元学习) 的思想。这在 LM 背景下的含义是:在 Pre-training 期间让模型学习广泛的技能和模式识别能力,而在推理期间利用这些技能和能力迅速适配到期望的任务上。 如下图所示:
另一个方向是扩大模型参数量的规模,从初代 GPT 到 BERT,再到 GPT-2 ,这一趋势证明随着模型参数量的扩大,模型的能力也随之提高。由于 In-context learning 涉及从大规模语料中将许多技能和任务吸收到模型参数中,因此 In-context learning 的能力可能会随着规模的扩大而表现出类似的强劲增长。笔者认为:
(a)小规模语料是有偏的,且其中包含的任务和每个任务的样本量少,不足以学到足够的“技能”和“任务”,即在预训练中无法得到足够多的知识泛化到实际场景中的任务; ( b)因此需要扩大语料的规模,而扩大语料中的规模需要有足够多的参数来记住语言建模中学到的“技能”和“任务”,如果参数量不够,那么随着 Pre-training 的进行,模型又要尝试记住所有“技能”和“任务”,但又无法完全记住,因此可能会对找到 meta-initialization 带来困难; (c)另外,可以回到第 2.3.1 GPT-2 原理那节从解决 LM 缺陷的角度思考。
上述第一点从 Meta-learning 的角度揭示了 LM 的背后的机理,以及背后 In-context learning 的概念,并以GPT-2所展现的能力来证明 In-context learning 的有效性;第二点说明近些年来提升参数规模所带来的提升是大势所趋。因此,GPT-3所带来的改进有两点:继续扩大参数规模;继续扩大语料的规模;想到那句话:重剑无锋,大巧不工。
2.4.2 GPT-3 实现
-
GPT-3 Pre-training 语料
- GPT-3 模型结构和参数量
- GPT-3 训练方式
- GPT-3 模型推理(Zero-shot,One-shot,Few-shot)
2.4.3 GPT-3 实验结果
- 参数规模和有无prompt的消融实验
作者在一个简单的任务上 (去掉单词中被随机添加的符号,例 s.u!c/c!e.s s i/o/n = succession) 对比了不同参数规模的模型和在推理时是否有Prompt的结果。可以得出的结论有三个: (a)扩大参数规模有助于提升模型利用 In-context Information 的能力; (b)Prompt有助于提升模型学习任务的能力; ( c)Few-shot > One-shot > Zero-shot。
- Cloze and completion tasks
- Open domain QA
- Translation
在 GPT-3 的年代,其表现也可以用惊艳来形容。它在大多数 LM 数据集中,超过了绝大多数的 Zero-shot 或者 Few-shot 的 SOTA 方法。此外,在许多复杂的 NLP 任务中也超过了 Fine-tuning 后的 SOTA 方法,例如闭卷问答、模式解析、机器翻译等。最后,它在一些其他的任务上也取得非常震惊的效果,如进行数学加法、文章生成、编写代码等。
然而 GPT-3 也存在一系列的问题,比如对于一些命题没有意义的问题,GPT-3 不会判断命题有效与否,而是推理一个没有意义的答案出来。由于 45TB 海量数据中没有针对种族歧视、性别歧视、宗教偏见等内容进行排除,因此 GPT-3 生成的文章会包含这类敏感内容。
2.4.4 从初代GPT到GPT-3对比一览
|
初代GPT
|
GPT-2 | GPT-3 | |
| 时间 | 2018年6月 | 2019年2月 | 2020年5月 |
| 参数量 | 1.17亿 | 15.4亿 | 1750亿 |
| 预训练数据量 | 5GB | 40GB | 45TB |
| 训练方式 | Pre-training + Fine-tuning | Pre-training | Pre-training |
| 序列长度 | 512 | 1024 | 2048 |
| # of Decoder Layers | 12 | 48 | 96 |
| Size of Hidden Layers | 768 | 1600 | 12288 |
2.5 InstructGPT
在本节2.5.1我们会把 Instruct Learning 、Prompt Learning 进行对比,接着讲 RLHF (2.5.2)、PPO 算法(2.5.3),在2.5.4分享 InstructGPT 的实现,最后进行小结,讲其优缺点。
2.5.1 Instruct Learning vs. Prompt Learning、RLHF
InstructGPT 是为解决 LM 有时不能遵循用户意图而诞生的。“不能遵循用户意图”表示LM 可能会生成不真实、有毒或对用户毫无帮助的输出。主要原因是 LM 的训练目标是预测下一个 token 而不是有帮助地和安全地遵循用户的指令。换句话说,这些模型与其用户没有对齐。这是由于模型的偏见性和数据中存在的一些有毒内容导致模型会输出无用的、有毒的输出 (LM并没有对输出是否无用、是否有毒的监督) 。因此,InstructGPT 要做的就是是模型的输出符合人类的意图。这种改进是十分有必要的,尤其是当 LM 被部署在多个应用场景中时。具体而言,InstructGPT 的优化目标有三个 (3H) :
- Helpful,模型应该帮助用户解决他们的任务;
- Honest,模型不应该编造信息来误导用户;
- Harmless,模型不应对人或环境造成身体、心理或社会伤害。
为了解决上述问题,Fine-tuning 步骤又回到了 InstructGPT,但与传统的 Fine-tuning 不同。在具体介绍 InstructGPT 之前,本章将先介绍几个 Preliminary knowledge,分别是 Instruct Learning 和 Prompt Learning,Deep Reinforcement Learning from Human Preferences (RLHF) 和 PPO 算法。
Instruct Learning 是由 Google 提出。 (接下来引自外部解读) Instruct Learning 和 Prompt Learning 的目的都是去深入挖掘已经具备的知识 (回顾GPT-2和GPT-3在大规模语料中学到的“技能”和“任务”) ,并激发出更强的能力。不同的是,Prompt 是激发LM 的补全能力,例如根据上半句生成下半句,或者是 Cloze;而 Instruct Learning 是激发语言模型的理解力,通过给出明显的指令,让模型去做出正确的行动。通过如下例子来理解两种学习方式:
- 第一, Prompt Learning :给女朋友买了这个项链,她很喜欢,这个项链太__了。
- 第二, Instruct Learning :判断这句话的情感:给女朋友买了这个项链,她很喜欢。选项:A=好;B=一般;C=差。
Instruct Learning 原文对传统Fine-tuning、Prompt Learning和Instruction tuning的对比:
- 传统Fine-tuning :需要大量任务特定的样本;每个任务都需要 Fine-tuning 一个特别的模型;
- Prompt :通过少数示例或 prompt 工程提升性能;
- Instruction tuning :通过自然语言指令学习执行多个任务。
Instruct-tuning 的一些模版,如下图:
Instruct-tuning 的 Zero-shot 效果如下图所示:
从实验效果来看,1370亿参数的 FLAN (Pre-training + instruction tuning) 比 1750亿参数的 GPT-3 在各个任务上效果要好,甚至在某些任务上 (Translation) 比全监督的算法要好,体现了 Instruction tuning 在激发/激活 LM 潜力方面和泛化能力的优越表现。
个人认为,Instruction learning 能够进一步将任务编码到模型参数中,在 inference 的时候,模型能够根据Instruction 中的任务描述,输出与任务相关的结果。其实 LM 本身是生成式模型, Prompt Learning 其实是通过使模型在生成答案的时候 condition on Prompt 来区分任务,本质上还是强化了模型的补全能力,而 Instruction learning使模型condition on 对任务更丰富的描述,从而加强对任务的理解。
2.5.2 RLHF
如介绍 GPT-3 时提到的,45TB 的语料中不能保证没出现敏感的句子,如种族歧视、辱骂等。而 LM 实际上是对训练数据集分布的拟合。这实际上直接影响了 LM 在内容生成上的质量。此外,我们不希望模型只受到数据的影响,我们希望输出结果是可控的,要保证生成的内容是有用的,真实的,和无害的。所以,我们应该有一个机制,来鼓励模型输出和人类偏好一致的结果,比如避免输出带有种族歧视、辱骂的语句;再比如生成的内容要有具有流畅性和语法正确性;生产的内容还需要是有用的、真实的。
因此, RLHF 就是通过用人类的偏好 (人工标注输出的质量分数) 训练一个奖励模型 (Reward model) , 来指导 LM 的训练。RLHF 的流程如下图所示。
上图中的一些概念: Initial Language Model :Pre-trianing 或者 Instruct tuning 后的模型; Tuned Language Model :Initial Lanugage Model 的副本,将在 RLHF 中更新参数,也是RL中的Policy; Policy :是给Tuned LM (例如GPT-3) 输入文本后输出结果的过程; Action Space: 全词表,大约 50K; Observation Space :输入的文本序列空间;
2.5.3 PPO算法
RL实际上就是 Agent 在一个状态 s 下选择下一个动作a, 获得奖惩r,而我们的优化目标是希望选择动作的 Policy 使得总体收益期望最大。对于一组模型参数
θ
可以得到一组轨迹序列的概率分布
(想象一下GPT答案的生产过程)
。对于一条轨迹 r,
可以得到 Reward 的期望为
,其中
是权重因子,例如远期奖励不重要,
是相应时间步的 Reward 。PPO 的目标是最大化 Reward
的期望,因此可得目标函数为:
求解上述梯度
:
在 InstructGPT 中,上式中的
对应输入序列 x 后
输出序列 y 的
概率。
2.5.4 InstructGPT的实现
在了解了 Instruct learning、RLHF 和 PPO 后,我们就不难理解 InstructGPT 的实现过程 (下图) 。
如上图所示,InstructGPT 的训练分成3步,每一步的数据也有差异,下面我们分别介绍它们。
SFT数据集是用来训练第1步有监督的模型。 在这一步中将使用采集的新数据,按照GPT-3 的训练方式对 GPT-3 进行微调。因为 GPT-3 是一个基于提示学习的生成模型,因此 SFT 数据集也是由提示-答复对组成的样本。SFT数据一部分来自使用 OpenAI 的的用户,另一部分来自 OpenAI 雇佣的40名标注人员。所有的标注人员都经过了仔细的培训。标注人员在构造这个数据集中的工作是根据内容自己编写指令。
RM数据集用来训练第2步的奖励模型, 我们也需要为 InstructGPT 训练设置一个奖励目标。这个奖励目标不必可导,但是一定要尽可能全面且真实的对齐我们需要模型生成的内容。很自然的,我们可以通过人工标注的方式来提供这个奖励,通过人工给那些涉及偏见的生成内容更低的分从而鼓励模型不去生成这些人类不喜欢的内容。InstructGPT先让模型生成一批候选文本,让后通过标注人员根据生成数据的质量对这些生成内容进行排序。
训练步骤如下:
- 步骤一,首先利用标注人员标注的SFT数据集对 Initial LM 进行有监督的 Fine-tuning,并且作者提到让模型适当过拟合有助于后面两步的训练;
-
步骤二,训练奖励模型。对于每一个 Prompt,用SFT后的模型生成多个输出 (一个Prompt为什么会得到多个输出,可能是用了Beam Search) ,如图中的A,B,C,D四个答案,然后标注人员将四个答案进行排序。再利用两两之间的排序关系训练 Reward Model 进行分数回归。训练 Reward Model 的目标函数: , 其中
是标注人员更偏好的输出;
- 步骤三,利用Reward Model用PPO算法来优化Policy(SFT后的模型);
- 步骤四,持续重复步骤二和步骤三;RLFH 的优化过程中由于训练步子不能放得太大,即在 update rule 里加入了 KL 惩罚,因此仅仅一轮步骤二+步骤三可能无法达到我们的预期,因为 SFT 后的模型输出可能符合预期的输出也不多,而通过多轮 RLHF 优化可以逐步提升输出质量。
2.5.5 小结
- 优点
InstructGPT 模型在真实性方面比 GPT-3 有所改进。在 TruthfulQA 基准测试中,InstructGPT 生成真实且信息丰富的答案的频率大约是 GPT-3 的两倍。
InstructGPT 与 GPT-3 相比毒性略有改善。 InstructGPT 模型显示了 RLHF 微调对分布之外的指令的有前景的泛化。作者定性地探究了 InstructGPT 的功能,发现它能够遵循指令来总结代码,回答有关代码的问题,有时还会遵循不同语言的指令,尽管这些指令在微调分布中非常罕见。相比之下,GPT-3 可以执行这些任务,但需要更仔细的prompt,并且通常不会遵循这些领域的说明。这个结果表明,InstructGPT 能够泛化到“遵循指令”的概念。即使在获得很少直接监督信号的任务上,也会保持一定的对齐。
- 缺点
有时候InstructGPT 还会给出一些荒谬的输出:虽然 InstructGPT 使用了人类反馈,但限于人力资源有限。影响模型效果最大的还是有监督的语言模型任务,人类只是起到了纠正作用。所以很有可能受限于纠正数据的有限,或是有监督任务的误导 (只考虑模型的输出,没考虑人类想要什么) ,导致它生成内容的不真实。就像一个学生,虽然有老师对他指导,但也不能确定学生可以学会所有知识点。
尽管取得了重大进展,但 InstructGPT 模型远未完全对齐或完全安全;它仍然会在没有明确提示的情况下生成有毒或有偏见的输出、编造事实以及生成色情和暴力内容。但机器学习系统的安全性不仅取决于底层模型的行为,还取决于这些模型的部署方式。为了支持 API 的安全,OpenAI 提供内容过滤器以检测不安全的回答,并监控滥用情况。
2.6 ChatGPT
在2.6.1,我们会先介绍ChatGPT的实现,然后在2.6.2节补充分享GPT系列的其它成员。之后在章节2.6.3 ,我们对前面的所有分享进行初步回顾——从初代 GPT 到 ChatGPT 的进化。最后,在章节2.6.4聊聊开发者们感兴趣的ChatGPT 缺陷。2.6.1 ChatGPT的实现
终于可以聊ChatGPT 了。 ChatGPT 基本遵循了与 InstructGPT 相同的训练方式,有差异的地方只有两点:
- (a)ChatGPT 以 GPT3.5 作为 Initial LM;
- (b)数据收集方式略有不同。目前 ChatGPT 论文还没有公开,OpenAI 只发布了一个简短的 Blog。
“我们使用来自人类反馈的强化学习 (RLHF) 来训练这个模型,使用与InstructionGPT 相同的方法,但数据收集设置略有不同。我们使用有监督的微调训练了一个初始模型:人工智能训练师提供对话,他们扮演用户和人工智能助手的双方角色。我们让训练师获得模型书面建议,以帮助他们撰写回复。我们将这个新的对话数据集与 InstructGPT 数据集混合,并将其转换为对话格式。
为了创建强化学习的奖励模型,我们需要收集比较数据,其中包括两个或多个按质量排序的模型响应。为了收集这些数据,我们进行了 AI 训练师与聊天机器人的对话。我们随机选择了一个模型撰写的消息,抽样了几个备选的答案,并让 AI 培训师对其进行排名。使用这些奖励模型,我们可以使用近端策略优化对模型进行微调。我们对这个过程进行了多次迭代。ChatGPT从 GPT-3.5 系列中的一个模型进行了微调,该系列于 2022 年初完成了训练。ChatGPT 和 GPT 3.5 在 Azure AI 超级计算基础设施上进行了训练。”
2.6.2 补充GPT系列的其它成员
网上某 Blog 中总结了从 GPT-3 衍生的 GPT 家族的其它成员,文中还全面客观地总结和剖析了 ChatGPT 的各项能力来源。如下图所示,作为 ChatGPT Initial LM 的 GPT-3.5是在原始 GPT-3 的基础上,增加 code 语料和经过 instruct tuning 后得到的。
该 Blog 中还整理了 GPT-3 到 ChatGPT 以及这之间的迭代版本的能力和训练方法,如下图:
2.6.3 从初代 GPT 到 ChatGPT 的进化概览
2.6.4 ChatGPT 的缺陷
来自 ChatGPT 官方给出的缺陷 :
- 第一,ChatGPT 有时会写出看似合理但不正确或荒谬的答案。解决这一问题具有挑战性,因为:在 RL 培训期间,目前没有任何真相来源;训练模型更加谨慎会导致它拒绝正确回答的问题;监督训练误导了模型,因为理想的答案取决于模型知道什么,而不是人类演示者知道什么。
-
第二,ChatGPT 对输入短语的调整或多次尝试同一提示很敏感。例如,给定一个问题的一个短语,模型可以声称不知道答案,但稍微重新措辞,可以正确回答。
-
第三,该模型通常过于冗长,过度使用某些短语,例如重申它是 OpenAI 训练的语言模型。这些问题源于培训数据中的偏差
(培训师更喜欢看起来更全面的较长答案)
和众所周知的优化问题。
-
第四,理想情况下,当用户提供不明确的查询时,模型会提出明确的问题。相反,我们当前的模型通常猜测用户的意图。
- 第五,虽然我们努力让模型拒绝不适当的请求,但它有时会响应有害的指令或表现出有偏见的行为。我们正在使用 ModerationAPI 来警告或阻止某些类型的不安全内容,但我们预计目前它会有一些误报和误报。我们渴望收集用户反馈,以帮助我们正在进行的改进系统的工作。
网友给出的缺陷例子基本被包含在官方给出的5个方面的缺陷中。上面 1所说的缺点就是网友们吐槽的“一本正经说瞎话”。比如用户给 ChatGPT 一个 Prompt:“宫廷玉液酒”,ChatGPT 会给出如下回答:“宫廷玉液酒是一种传统的中国白酒。它通常是由大米、小麦...”。然而我国根本没有宫廷玉液酒这种酒。再比如问 ChatGPT:“秦始皇摸电线会怎么样”,ChatGPT 给出的回答里竟然包含这样一句话:“电线是由英国科学家艾伦图灵在1870年代发明的”。这明显说明 ChatGPT 不是一个完全可靠的知识库。
第二点提到训练模型更加谨慎会导致它拒绝正确回答的问题,身边同事确实遇到过这类案例。比如让 ChatGPT 推荐书籍,有时会拒绝回答但有时会回答。这可能也和第2条缺陷相关。
第三点的含义可能是 RLHF 和 Instruct Learning 限制了模型可能的输出范围,而使模型小心地输出与人类尽可能对齐的答案。而与人类对齐的能力来自于人类制作的数据集和人类标注训练的 Reward Model,其实这种方式本身就是有偏的。并且模型可能会因此不敢回答从海量语料中学到的知识。 缺陷3现象很普遍,作者的解释也很明确;缺陷4的原因应该是 ChatGPT 没有认知能力,这一点将在3.1.4中讨论。
缺陷五,个人认为虽然 GPT 系列通过大模型、大语料上的 LM 在不断提高下游任务的泛化性,但目前仍然无法保证 RLHF 中 Reward 模型的泛化性。
03
热门关注点
这一节中,我们依次提出 5 个开发者感兴趣的问题,并尝试进行解答。模型到底是否需要标签监督?ChatGPT 对多模有何启发?ChatGPT 对于同一个问题为什么能够生成不同的答案?ChatGPT 是如何拒绝回答知识范围外的问题?如何获得更强的泛化?如果你对哪个问题感兴趣,可直接跳转到对应小节进行阅读。
3.1 模型到底是否需要标签监督?
此外,在 InstructGPT 和 ChatGPT 中为了使模型与人类对齐,OpenAI 仍然通过人工标注偏好来训练 Reward model,再结合 RL 对模型进行训练。原因是大规模语料中没有与人类对齐的监督信号。总而言之,或许在某些任务上,我们不需要“人工标注”,但并不是说模型不需要任务相关的“监督信号”,而如果我们对模型有更加 High-level 的要求,比如与人类对齐,如果数据中没有此类信号,那么“人工标注”是必须的。再回想下 GPT-3.5 为什么要在语料中加入 Code 语料,这是因为训练 GPT-3 的 45TB 中没有足够的与代码相关的数据。回顾 GPT 的发展史我们可以看到,在 LM 建模能力和算力对模型规模扩大的支持下,人们逐渐从对数据集的标注转向了对数据集分布的设计上。
3.2 对多模态的启发?
GPT 的逐渐进化不断解放了对不同任务的数据标注、模型结构的设计,这两点实际上是让模型逐渐变得通用。但通用的模型不仅仅应该是 task-agnostic,还应该是 modal-agnostic。那如何构建一个可以允许多模态数据输入的通用模型呢?个人认为,这里需要重点关注的问题有两个:
(a)通用的模型结构设计,在这里 Transformer 仍然是可以满足的,比如处理图像数据的 ViT 仍然是基于 Transformer 结构的。 (b)多模态数据集的构建,即如何构建一个数据集,能够在 LM 范式下学到图像与文本或者是其它模态之间的依赖关系。比如图片文本对,Web 上的图文,还可以加入一些其它更有意义的数据比如视觉问答。
3.3 ChatGPT对于同一个问题为什么能够生成不同的答案?
咨询了下资深 NLPer,应该是 Beam Search。3.4 ChatGPT是如何拒绝回答知识范围外的问题?
目前看来,这个问题在 ChatGPT 中解决得并不是很完美。这涉及了官方发布的缺陷中的第 1.(1),1.(2)和 4。大多数人被 ChatGPT 已有的能力所吸引,但对于一个可靠的 AI 来说,拒绝回答知识范围外的问题在实际应用中是十分必要的。举个例子, 2016年5月,第一例由辅助驾驶系统造成的死亡,原因是感知系统混淆了前方白色的车和明亮的天空,如下图:
拒绝回答知识范围外的问题,可以认为是模型如何表达自己的认知 (Express uncertainty) ,或者是模型如何识别分布外的样本 (Out-of-distribution detection,OOD detection) 。例如,在上述例子中,如果自动驾驶系统能够表达该场景下其对前方物体的判断是不确定的,或者提醒驾驶者前方出现的场景是 Out-of-distribution 的,那么在这种境况下就可以选择暂时停下然后提醒驾驶者人为判断手动驾驶。如果 ChatGPT 具备这种能力,那么就不会出现一本正经说瞎话的情况,根据笔者目前对 ChatGPT 的体验,ChatGPT 在这方面的能力可能有3种情况:
- (a) 不具备表达自己认知的能力;
- (b) 或者有可能只对语言生成有认知上的表达,但对生成内容的真实性没有认知上的表达;
- (c) 有可能 有一 定的 OOD detection 能力。接下来呈上笔者的探究历程。
在体验同事调用 ChatGPT 制作的群 Bot 的时候,我们开始关注这个问题。起初,一位同事对 ChatGPT 发问:
然后ChatGPT的回答是:
此时,笔者问ChatGPT:
ChatGPT回答说:
看到上述回答,笔者顿感被ChatGPT搪塞了,当时的猜测是,或许它用了Uncertainty learning,于是接着发问:
而ChatGPT给出了肯定的回答:
然后笔者打算再问一些技术细节,并且这次改为用英语提问:
ChatGPT给出的答案是:
上述回答以笔者对Uncertainty learning的了解觉得非常合乎逻辑,于是接着提问:
ChatGPT回答如下:
这个回答跟笔者预想的一样,回答内容上的逻辑也合理。但过了几天,笔者突然在Blog中看到ChatGPT有一本正经说瞎话的毛病,于是让另一个同事用他的账号去问ChatGPT几乎相同的问题:
这几次的回答与之前的回答完全相悖,并且再次问它,它又给出了之前的答案:
结合这几次的提问,作者对其是否有表达不确定性的能力变得不确定了,但确定的是,它确实偶尔会一本正经说瞎话。这其实与从 InstructGPT 开始的与人类对齐的目标相悖了,因为 ChatGPT 不符合 Honest 的目标。但笔者没有灰心,马上去浏览了一遍所有大佬的 Blog,看他们是否对 ChatGPT 这一方面的能力有所解读,最后只有一篇 Blog 提到了这一点,博主说:“模型知道它不知道什么不是通过编写规则来实现的, 而是通过 RLHF 解锁的。这是一个非常令人惊讶的发现,因为 RLHF 的最初目标是让模型生成符合人类期望的回答,这更多是让模型生成安全的句子,而不是让模型知道它不知道的内容”。但总觉得这样的推测没有什么依据,于是笔者找了几篇用RLHF训练的大模型的 Paper,希望从中找到答案。最后,在 Anthropic 的一篇题为 Training a Helpful and Harmless Assistant with RL from HF 的 Paper 里找到了可能的答案。先看下 Anthropic 公司的介绍:
“Anthropic 是一家人工智能安全和研究公司,致力于构建可靠、可解释和可控制的人工智能系统。今天的大型通用系统可以带来巨大的好处,但也可能是不可预测、不可靠和不透明的:我们的目标是在这些问题上取得进展。目前,我们主要专注于这些目标的研究;在未来的道路上,我们预见到我们的工作有很多机会为商业和公共利益创造价值。”
那Anthropic是怎么解决这个问题的呢?答案是 OOD detection :
目前猜测:
- (1)ChatGPT用了Uncertainty Learning的技术可能性低,因为 Uncertainty Learning 的技术基本上可以看作是 Bayesian Neural Network,其在推理时涉及模型参数上的采样,这对大模型来说是不现实的,即便是 Mc Dropout ,也需要推理多次得到预测分布。
- (2)但如果 ChatGPT 用了 Uncertainty Learning 技术也可能出现一本正经说瞎话的情况,原因是模型预训练期间的目标是语言建模,它即便能表达对语言建模的认知 (即当前序列的下一个序列或token是什么) 也无法解决对该问题是否能做出真实的回答的认知。
- (3)或许是在 Reward Model里用了 Uncertainty Learning,而 ChatGPT 在Inference的时候可以利用 Reward Model 的认知来判断是否是 RLHF 期间 In-distribution 的样本。
- (4)用了类似于 Anthropic 的 Paper 中的 OOD detection技术的可能性较大,因为ChatGPT收集了比之前更多的指令。
- (5)不论是用 Uncertainty Learning 还是 OOD detection 实际上是 ChatGPT 本身的作用,其实还可以用 Reward Model 给 ChatGPT 的答案做过滤,即分数低于某个阈值则给出一些搪塞的回答。
- (6)最后一种可能的情况如其他自媒体所说,RLHF 直接给予了模型这种能力。比如标注者标注偏好时,给模型对敏感问题回答时做出“拒绝回答的回复”更高的偏好,而 RLHF 期间模型学到了这一点。
但也带来两个问题:
- (a)模型更谨慎而没法回答一些不敏感的问题,即 RLHF 可能有一些副作用不仅限制了模型对一些敏感问题的回答,还限制了对非敏感问题的回答 (但回复的时候加入一些“我不了解”,“我无法回答”来给用户一种它对自身能力有认知的错觉) ;
- (b)某些情况还是会回答敏感的问题,这其实取决于 RLHF 训练时数据的丰富度。
3.5 如何获得更强的泛化——知识组合,系统性泛化
从 GPT-3 开始,模型似乎已经有了组合泛化的能力,通过指令来使模型理解任务然后自动组合预训练期间学到的知识得到我们期望的回答。GPT-3 的这种能力来自于大规模参数支持下在大语料中进行 LM 训练,并在 Instruct Learning 下激活。这基本上是从数据规模和模型参数规模以及学习范式角度来获得能力。那么是否有其它角度可以进一步提高模型的知识组合和系统性泛化的能力呢?这个答案可能是能直接支持计算单元重用的 Inductive Bias,比如CNN在处理图像时在横向重用计算单元 (卷积核) ,RNN 则在垂直方向重用计算单元 (垂直方向) 。
近两年,Modular Inductive Bias 逐步得到大家关注,个人认为,Modular Inductive Bias 是传统有符号 AI 和现在 Learning based AI 的一个结合,并且有希望将多模态、多任务整合在一个更通用的模型中。
3.6 写在最后
本文部分内容参考自 OpenAI 发布的官方论文或是 Blog,还有一小部分整理自知乎和公众号上相关领域的解读。笔者结合过往在 ML 方面的经验,加入了一些个人解读,不代表腾讯官方态度。以上是本次分享全部内容,欢迎各位在评论区交流。-End- 原创作者|张先礼 技术责编|张先礼
你可能感兴趣的腾讯工程师作品 | 腾讯工程师聊ChatGPT技术「文集」 | 10w单元格滚动卡顿如何解决?腾讯文档的7个秘笈 | 微信全文搜索耗时降94%?我们用了这种方案 | 国民应用QQ如何实现高可用的订阅推送系统 技术盲盒: 前端 | 后端 | AI与算法 | 运维 | 工程师文化 🔹关注我并点亮星标🔹 工作日晚8点 看腾讯技术、学专家经验 点 赞|分享|在看 传递好技术