• home > theory > CST > AI >

    ChatGPT的前世今生——原理解析和拓展思考

    Author:zhoulujun Date:

    2022年11月30日,OpenAI发布了其最新的聊天机器人模型——ChatGPT,引发了热议。大家在惊艳其出色的表现时,不免对其背后的技术充满好奇。本文旨在对ChatGPT进化历程进行深入浅出地介绍和剖析,同时对其现有能力的不足和未来

    转载自腾讯学院:https://zhuanlan.zhihu.com/p/612419961

    01背景介绍

    2022年11月30日,OpenAI发布了其最新的聊天机器人模型——ChatGPT。由此引发了广泛的讨论。作为一个目前最接近“六边形”战士的聊天机器人,它不仅能够用来聊天、搜索、翻译,还能写故事、写代码甚至是debug(此处省略一系列能力介绍)。由于其能力过于惊艳,仅上线5天后就吸引了100万用户。与此同时,大家对其背后的技术充满了好奇。本文将围绕ChatGPT从两个角度进行探讨,即原理解析和拓展思考。其中,原理解析将以介绍从Transformer到ChatGPT的逐步进化的方式进行;而拓展思考中,笔者将从分析ChatGPT的优缺点出发,来探索ChatGPT和AI未来的发展和改进方向。

    02原理解析——从发展历程了解ChatGPT

    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主要特点

    (1)通过Self-Attention(如图1左所示),每个词都和所有词计算Attention,因此不论序列中词与词之间的距离有多长,他们之间的最大路径长度都为1,因此可以捕获更长的依赖关系。

    (2)提出Multi-head Attention(MHA)(如图1右所示),  通过多个Head学习不同的子空间语义,最后通过Concat和Linear操作降维至单Head的Size,这相当于多个子空间语义表示的Ensemble。

    (3)整体结构遵从Encoder-Decoder的形式,其中Decoder的每个Block比Encoder多了一个Masked Multi-Head  Attention(MMHA)。MMHA结构同MHA,只不过Mask矩阵中要屏蔽当前位置之前的词与当前位置之后的词的联系,使得文本下文信息不提前泄露,例如生成式任务(如机器翻译)是从前到后逐步生成的。

    2.2 初代GPT vs. BERT

    【见Transformer起意 】

    2.2.1 初代GPT

    (1)模型结构

    GPT (GenerativePre-Training)( cs.ubc.ca/~amuham01/LIN)是OpenAI  GPT系列的开山之作。在模型结构方面,GPT仅使用了Transformer的Decoder结构,并对Transformer  Decoder进行了一些改动。如图三所示,原本的Decoder包含了MHA和MMHA,而GPT只保留了MMHA,这确保了GPT只能关注上文的信息,从而达到单向模型的目的。

    (2)训练方法——无监督Pre-training + 有监督 Fine-tuning

    【无监督Pre-training】

    【有监督Fine-tuning】

    (3)Task-specific input transformations(特定于任务的输入转换)

    (4)数据集

    ꔷ 无监督Pre-training BooksCorpus  7000本未发布的书,这些书里包含长段的连续文本,这使得生成模型能够学习以长距离信息为条件的依赖关系。

    ꔷ 有监督Fine-tuning

    (5)实验结果概览

    ꔷ Neural Language Inference

    ꔷ 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能力稳步提高。

    (6)小结

    在有监督学习的12个任务中,初代GPT在9个任务上的表现超过了SOTA的模型。在的zero-shot任务中,初代GPT的模型要比基于LSTM的模型稳定,且随着训练次数的增加,其zero-shot的性能也逐渐提升。这些都表明初代GPT已经具备(相对)非常强的泛化能力,能够用到和有监督任务无关的其它NLP任务中。初代GPT证明了transformer对学习词向量的强大能力,在初代GPT得到的词向量基础上进行下游任务的学习,能够让下游任务取得更好的泛化能力。对于下游任务的训练,初代GPT往往只需要简单的微调便能取得非常好的效果。

    2.2.2 BERT

    (1)模型结构

    BERT(BidirectionalEncoderRepresentations fromTransformers  )的模型结构采用了原始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任务(如问题回答)时可能非常有害,因为在这些任务中,从两个方向结合上下文是至关重要的。

    (2)输入构造

    为了使BERT能够处理不同的下游任务,对于每一个输入的Sequence(在BERT的原文中,作者用"Sentence"表示任意跨度的连续文本,而不是语言意义上的句子;用"Sequence"表示输入BERT的tokens序列,可以是一个句子也可以是被打包在一起的两个句子),在其最前面拼接一个特殊的分类token,对应位置的最后一层的Hidden  state将被用作分类任务的序列聚合表征。对于被打包成一个Sequence的Sentence pair,  通过两种机制来区分不同句子(a)用特殊token将两个句子分隔,(b)为每个token添加一个可学习的Embedding(Segment  Embedding),来指示其属于前句还是后句。如图七所示,对于每一个token,其Input representation通过将其对应的Token  embedding、Position embedding和Segment  embedding求和得到。值得注意的是,特殊token和是在预训练的时候就引入了,并且参与预训练中的参数更新,而初代GPT的特殊token只有在Fine-tuning阶段才引入。

    (3)训练方法——无监督Pre-training+有监督Fine-tuning

    如图八所示,与初代GPT相同,BERT也分为无监督Pre-training和有监督Fine-tuning两个阶段。

    【无监督Pre-training】  与GPT和其它预训练语言模型从左到右或是从右到左的标准预训练方式不同,BERT提出了两个新的预训练任务:

    Task-1 MASK LM

    Task-2 Next Sentence Prediction (NSP)

    【有监督Fine-tuning】

    (4)数据集

    ꔷ 无监督Pre-training 来自BooksCorpus 800M的words 和 English Wikipedia 2500M的words。

    ꔷ 有监督Fine-tuning GLUE Benchmark, SQuAD v1.1和SQuAD v2.0共11个NLP 任务。

    (5)实验结果

    ꔷ GLUE

    ꔷ 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

    GPT-2的核心思想是:可以直接用无监督的Pre-training模型直接去做有监督任务。GPT-2在模型结构方面和GPT-1完全一致,Pre-training的任务也没有改变,那究竟是什么给GPT-2带来如此大的自信,可以让它在无监督Pre-training后直接用来做有监督任务呢?接下来,我将按照作者原文的思路,进行剖析。

    2.3.1 原理

    (1)Language Modeling的实际行为

    基础知识)(zhuanlan.zhihu.com/p/10

    这种建模方式的缺点是(a)参数空间过大,但Transformer结构给大模型带来了光明(b)数据稀疏,但算力的提升以及资本的力量允许我们在超大规模语料上训练。

    (2)NLP中对所有任务建模方式的通用表达

    (3)LM在达到一定条件时实际上可以看作有监督多任务学习

    (4)讨论

    所以GPT-2是如何实现只进行无监督Pre-training就直接达到有监督多任务的效果呢?首先,子标题(1)中传统LM的两个缺陷(a)参数空间过大和(b)数据稀疏随着模型结构、算力提升以及资本的力量可以得到解决。换言之,LM的能力提升来自于大模型和在超大规模语料上预训练。其次子标题(2)中的分析说明,LM可以以其灵活的方式建模单模型多任务学习。最后子标题(3)说明,有监督多任务学习是LM的子集。实际上有监督任务的监督信号是会出现在无监督任务的语料中的,只要语料足够大,那么就能cover到多个任务。综上可以得出结论,只要模型参数量足够大,预训练语料足够丰富,那么无监督Pre-training得到的LM就能直接拿来执行多任务(重剑无锋,大巧不工  )。

    2.3.2 GPT-2实现

    (1)模型结构

    GPT-2的模型结构相比GPT-1没有差别,仅仅是增加了参数规模。作者在实验中采用了四种规模参数的模型:

    上表中第一个模型的参数规模与初代GPT相同,第二个模型的参数规模与BERT(Large)相同。而最后一行的模型是发布的GPT-2。

    (2)训练语料

    作者从网站上爬取了高质量的文本数据,形成的数据集被称为WebText。其中去掉了所有包含在Wikipedia中的文档。最终的数据集包含超过800万个文档,总共40  GB的文本。

    2.3.3 实验结果

    ꔷ 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  验证了通过扩大参数规模和Pre-training语料的规模就可以迁移到多个任务且不需要额外的Fine-tuning。尽管其在有些任务上表现得不够好,但其已经初步展现了大模型大语料Zero-shot的潜力,未后续大模型的发展提供了有依据的方向。

    2.4 GPT-3

    GPT-3的核心卖点是:仅仅需要zero-shot或者few-shot就能在下游不同任务上表现得很好,并且在很多非常困难的任务上也有惊艳的表现。

    2.4.1 原理

    到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 实现

    ꔷ Pre-training 语料

    GPT-3共训练了5个不同的语料,分别是低质量的Common  Crawl,高质量的WebText2,Books1,Books2和Wikipedia,GPT-3根据数据集的不同的质量赋予了不同的权值,权值越高的在训练的时候越容易抽样到。整个语料的规模为45TB  ,数据集统计如下表所示:

    ꔷ 模型结构和参数量

    GPT-3的模型结构和初代GPT和GPT-2相同,但参数量直接提升至175  Billion(初代目:1.17亿;二代目15.42亿;三代目:1750亿)。

    ꔷ 训练方式

    LM Pre-training。

    ꔷ 模型推理(Zero-shot,One-shot,Few-shot)

    如上图所示,与传统的Pre-training+Fine-tuning不同(图右),GPT-3(图左)Pre-training之后直接进行推理,且支持三种推理方式,即Zero-shot,One-shot和Few-shot。三种推理方式具体如下:

    2.4.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对比一览

    2.5 InstructGPT

    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算法。

    2.5.1 Instruct Learning vs. Prompt Learning

    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工程提升性能。传送门zhuanlan.zhihu.com/p/51

    ꔷ 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的流程如下图所示。

    上图中的一些概念:

    2.5.3 PPO算法

    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先让模型生成一批候选文本,让后通过标注人员根据生成数据的质量对这些生成内容进行排序。

    训练步骤如下:

    2.5.5 小结

    优点

    ꔷ 与 GPT-3 的输出相比,标注人员明显更喜欢 InstructGPT 输出。13亿参数的InstructGPT的输出明显优于1750亿参数的GPT-3。
    1750亿参数的InstructGPT 的输出在 85±3% 的时间内优于 1750亿参数的GPT-3 输出,在 71±4% 的时间内优于 few-shot  
    1750亿参数的GPT-3。 InstructGPT 模型能更可靠地遵循指令中的明确约束。

    ꔷ InstructGPT 模型在真实性方面比 GPT-3 有所改进。在** TruthfulQA 基准测试中,InstructGPT  
    生成真实且信息丰富的答案的频率大约是 GPT-3 的两倍。

    ꔷ InstructGPT 与 GPT-3 相比毒性略有改善;

    ꔷ 1.InstructGPT 模型显示了 RLHF 微调对分布之外的指令的有前景泛化。 作者定性地探究了 InstructGPT  的功能,发现它能够遵循指令来总结代码,回答有关代码的问题,有时还会遵循不同语言的指令,尽管这些指令在微调分布中非常罕见。  相比之下,GPT-3 可以执行这些任务,但需要更仔细的prompt,并且通常不会遵循这些领域的说明。  这个结果表明,instructGPT能够泛化到“遵循指令”的概念。 即使在获得很少直接监督信号的任务上,也会保持一定的对齐。

    缺点

    ꔷ  InstructGPT会降低模型在通用NLP任务上的效果,作者在PPO的训练的时候讨论了这点,虽然修改损失函数可以缓和,但这个问题并没有得到彻底解决。

    ꔷ  有时候InstructGPT还会给出一些荒谬的输出:虽然InstructGPT使用了人类反馈,但限于人力资源有限。影响模型效果最大的还是有监督的语言模型任务,人类只是起到了纠正作用。所以很有可能受限于纠正数据的有限,或是有监督任务的误导(只考虑模型的输出,没考虑人类想要什么),导致它生成内容的不真实。就像一个学生,虽然有老师对他指导,但也不能确定学生可以学会所有知识点

    ꔷ 尽管取得了重大进展,但InstructGPT 模型远未完全对齐或完全安全;  它仍然会在没有明确提示的情况下生成有毒或有偏见的输出、编造事实以及生成色情和暴力内容。  但机器学习系统的安全性不仅取决于底层模型的行为,还取决于这些模型的部署方式。 为了支持API 的安全,Open  AI提供内容过滤器以检测不安全的回答,并监控滥用情况。

    2.6 ChatGPT

    2.6.1 ChatGPT的实现

    终于可以将ChatGPT了,不过在讲完初代GPT、GPT-2、GPT-3以及InstructGPT后,好像没有什么可以讲了,因为ChatGPT基本遵循了与InstructGPT相同的训练方式,有差异的地方只有两点(a)ChatGPT以GPT3.5作为Initial  LM,(b)数据收集方式略有不同。目前ChatGPT的论文还没有公开,OpenAI只发布了一个简短的Blog。在此,我将Blog中的原文翻译后引用在此:

    “我们使用来自人类反馈的强化学习(RLHF)来训练这个模型,使用与InstructionGPT相同的方法,但数据收集设置略有不同。我们使用有监督的微调训练了一个初始模型:人工智能训练师提供对话,他们扮演用户和人工智能助手的双方角色。我们让训练师获得模型书面建议,以帮助他们撰写回复。我们将这个新的对话数据集与InstructGPT数据集混合,并将其转换为对话格式。为了创建强化学习的奖励模型,我们需要收集比较数据,其中包括两个或多个按质量排序的模型响应。为了收集这些数据,我们进行了AI训练师与聊天机器人的对话。我们随机选择了一个模型撰写的消息,抽样了几个备选的答案,并让AI培训师对其进行排名。使用这些奖励模型,我们可以使用近端策略优化对模型进行微调。我们对这个过程进行了多次迭代。ChatGPT从GPT-3.5系列中的一个模型进行了微调,该系列于2022年初完成了训练。ChatGPT和GPT  3.5在Azure AI超级计算基础设施上进行了训练。”

    2.6.2 补充GPT系列的其它成员

    一篇题为《万字拆解!追溯ChatGPT各项能力的起源》的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官方给出的缺陷 **:

    1.ChatGPT有时会写出看似合理但不正确或荒谬的答案。解决这一问题具有挑战性,因为:(1)在RL培训期间,目前没有任何真相来源;(2)  训练模型更加谨慎会导致它拒绝正确回答的问题;(3)监督训练误导了模型,因为理想的答案取决于模型知道什么,而不是人类演示者知道什么。

    2.ChatGPT对输入短语的调整或多次尝试同一提示很敏感。例如,给定一个问题的一个短语,模型可以声称不知道答案,但稍微重新措辞,可以正确回答。

    3.该模型通常过于冗长,过度使用某些短语,例如重申它是OpenAI训练的语言模型。这些问题源于培训数据中的偏差(培训师更喜欢看起来更全面的较长答案)和众所周知的优化问题。

    4.理想情况下,当用户提供不明确的查询时,模型会提出明确的问题。相反,我们当前的模型通常猜测用户的意图。

    5.虽然我们努力让模型拒绝不适当的请求,但它有时会响应有害的指令或表现出有偏见的行为。我们正在使用ModerationAPI来警告或阻止某些类型的不安全内容,但我们预计目前它会有一些误报和误报。我们渴望收集用户反馈,以帮助我们正在进行的改进系统的工作。

    本来这里是有另一个小标题:“来自网友发现的缺陷”,但发现网友给出的例子全被包含在官方给出的5个方面的缺陷中,所以这里将变为对上述5点的解读。1.(1)所说的缺点就是网友们吐槽的“一本正经说瞎话”,比如用户给ChatGPT一个Prompt:“宫廷玉液酒”,ChatGPT会给出如下回答:“宫廷玉液酒是一种传统的中国白酒。它通常是由大米、小麦...”。然而我国根本没有宫廷玉液酒这种酒;再比如问ChatGPT:“秦始皇摸电线会怎么样”,ChatGPT给出的回答里竟然包含这样一句话:“电线是由英国科学家艾伦图灵在1870年代发明的”。这明显说明ChatGPT不是一个可靠的知识库(我也被ChatGPT欺骗过  ,见3.1.4);1.(2)训练模型更加谨慎会导致它拒绝正确回答的问题,身边同事确实遇到过这类案例,比如让ChatGPT推荐书籍,有时会拒绝回答,但有时会回答,这可能也和第2条缺陷相关。1.(3)的含义可能是RLHF和Instruct  Learning限制了模型可能的输出范围,而使模型小心地输出与人类尽可能对齐的答案。而与人类对齐的能力来自于人类制作的数据集和人类标注训练的Reward  Model,其实这种方式本身就是有偏的。并且模型可能会因此不敢回答从海量语料中学到的知识。缺陷3.现象很普遍,作者的解释也很明确;缺陷4.的原因应该是ChatGPT没有认知能力,这一点将在3.1.4中讨论;缺陷5.大家可以看下这篇博文给的例子# 聊天机器人 ChatGPT 在诱导下写出「毁灭人类计划书」,并给出代码,AI 发展有哪些问题需关注?zhihu.com/aria/question),个人认为,虽然GPT系列通过大模型、大语料上的LM在不断提高下游任务的泛化性,但目前仍然无法保证RLHF中Reward模型的泛化性。

    03 拓展

    3.1 思考

    3.1.1 模型到底是否需要标签监督?

    3.1.2 对多模态的启发?

    GPT的逐渐进化不断解放了对不同任务的数据标注、模型结构的设计,这两点实际上是让模型逐渐变得通用。但通用的模型不仅仅应该是task-agnostic,还应该是modal-agnostic。那如何构建一个可以允许多模态数据输入的通用模型呢?个人认为,这里需要重点关注的问题有两个(a)通用的模型结构设计,在这里Transformer仍然是可以满足的,比如处理图像数据的ViT仍然是基于Transformer结构的。(b)多模态数据集的构建,即如何构建一个数据集,能够在LM范式下学到图像与文本或者是其它模态之间的依赖关系。比如图片文本对,Web上的图文,还可以加入一些其它更有意义的数据比如视觉问答。

    3.1.3 ChatGPT对于同一个问题为什么能够生成不同的答案?

    咨询了下资深NLPer,应该是Beam Search,附传送门machinelearningmastery.com)。

    3.1.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的回答是:

    (按理说45TB的语料中应该存在这样简单的问题吧)此时,笔者问ChatGPT:

    ChatGPT回答说:

    看到上述回答,笔者顿感被ChatGPT搪塞了,当时的猜测是,或许它用了Uncertainty  learning,于是接着发问:

    而ChatGPT给出了肯定的回答:

    (当时觉得可能猜中了,但过几天再问它它竟然给出了不一样的回答,被骗了  ),然后笔者打算再问一些技术细节,并且这次改为用英语提问:

    ChatGPT给出的答案是:

    上述回答以笔者对Uncertainty learning的了解觉得非常合乎逻辑,于是接着提问:

    ChatGPT回答如下:

    这个回答跟笔者预想的一样,回答内容上的逻辑也合理。  但过了几天,笔者突然在Blog中看到ChatGPT有一本正经说瞎话的毛病,于是让另一个同事用他的账号去问ChatGPT几乎相同的问题:

    这几次的回答与之前的回答完全相悖,并且再次问它,它又给出了之前的答案:

    结合这几次的提问,作者对其是否有表达不确定性的能力变得不确定了,但确定的是,它确实偶尔会一本正经说瞎话。这其实与从InstructGPT开始的与人类对齐的目标相悖了,因为ChatGPT不符合Honest的目标。但笔者没有灰心,马上去浏览了一遍所有大佬的Blog,看他们是否对ChatGPT这一方面的能力有所解读,最后只有一篇Blog提到了这一点(万字拆解!追溯ChatGPT各项能力的起源),博主说:“模型知道它不知道什么不是通过编写规则来实现的,  而是通过RLHF解锁的。这是一个非常令人惊讶的发现,因为 RLHF  的最初目标是让模型生成符合人类期望的回答,这更多是让模型生成安全的句子,而不是让模型知道它不知道的内容”。但总觉得这样的推测没有什么依据,于是笔者找了几篇用RLHF训练的大模型的Paper,希望从中找到答案。最后,在Anthropic的一篇题为Training a Helpful and Harmless Assistant with RL from HFarxiv.org/pdf/2204.0586)的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)最后一种可能的情况则如万字拆解!追溯ChatGPT各项能力的起源所说的那样,RLHF直接给予了模型这种能力,比如标注者标注偏好时,给模型对敏感问题回答时做出“拒绝回答的回复”更高的偏好,而RLHF期间模型学到了这一点。但也带来两个问题,(a)模型更谨慎而没法回答一些不敏感的问题,即RLHF可能有一些副作用不仅限制了模型对一些敏感问题的回答,还限制了对非敏感问题的回答(但回复的时候加入一些“我不了解”,“我无法回答”来给用户一种它对自身能力有认知的错觉);(b)某些情况还是会回答敏感的问题,这其实取决于RLHF训练时数据的丰富度。

    3.1.5 如何获得更强的泛化——知识组合,系统性泛化

    从GPT-3开始,模型似乎已经有了组合泛化的能力,通过指令来使模型理解任务然后自动组合预训练期间学到的知识得到我们期望的回答。GPT-3的这种能力来自于大规模参数支持下在大语料中进行LM训练,并在Instruct  Learning下激活。这基本上是从数据规模和模型参数规模以及学习范式角度来获得能力。那么是否有其它角度可以进一步提高模型的知识组合和系统性泛化的能力呢?这个答案可能是能直接支持计算单元重用的Inductive  Bias,比如CNN在处理图像时在横向重用计算单元(卷积核),RNN则在垂直方向重用计算单元(垂直方向)。近两年,Modular Inductive  Bias 逐步得到大家关注,个人认为,Modular Inductive Bias是传统有符号AI和现在Learning based  AI的一个结合,并且有希望将多模态、多任务整合在一个更通用的模型中。这里推荐两个资料:

    论文:Dynamic Inference with Neural Interpretersarxiv.org/pdf/2110.0639

    博文:最前沿: 从Modularity到Generalizationarxiv.org/pdf/2110.0639

    3.1.6 In-context learning 为什么起作用?

    请参考这篇长文:被GPT带飞的In-Context Learning为什么起作用?模型在秘密执行梯度下降

    3.3 写在最后

    笔者刚刚进入NLP领域5个月,是一个萌新NLPer ,对NLP领域更全面的认识还不是很全。本文的绝大多数内容是参考自Open  AI发布的官方论文或是Blog,还有一小部分是来自知乎和公众号上资深大佬的解读,最后结合笔者过往在ML方面的经验,加入了一些个人解读。因此,如果读者发现其中有不合理的地方,欢迎在评论区指出。最后,感谢andrei和bella同学在本文校对方面做的努力。


    转载本站文章《ChatGPT的前世今生——原理解析和拓展思考》,
    请注明出处:https://www.zhoulujun.cn/html/theory/ComputerScienceTechnology/AI/8950.html