分享

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

 mynotebook 2023-02-11 发布于湖南

文丨Ryan

腾讯互动娱乐 研究员

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

图片

[ 图一 Self-Attention 和 Multi-Head Attention ]

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

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

图片

[图二 Transformer 整体结构]

(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)模型结构

图片

[ 图三 Transformer Decoder和GPT Decoder对比 ]

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

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

【无监督Pre-training】

初代GPT的无监督Pre-training是基于语言模型进行的,给定一个无监督语料, GPT利用标准的语言建模目标最大化以下似然:

其中是上下文窗口的大小。

【有监督Fine-tuning】

在利用目标函数(1)进行无监督Pre-training得到模型后,将其直接应用到有监督任务中。假设有一个有标注的数据集,其中每个样本的inputs包含一系列的token,即,和一个label。 将inputs输入Pre-training的模型得到最后一个transformer decoder block 的状态表征, 然后将状态表征输入到在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。

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

图片

[ 图四 特定于任务的输入转换 ]

对于某些任务,如文本分类,GPT可以直接如上所述对模型进行微调。某些其他任务,如问答(Question Answering)或文本蕴涵(Textual Entailment),具有结构化输入,如有序的句子对或文档、问题和答案的三元组。由于GPT的预训练模型是在连续的文本序列上训练的,因此需要一些修改才能将其应用于这些任务。初代GPT之前的工作提出了基于transferred representations的学习任务特定的结构。这种方法重新引入了大量特定于任务的定制,并且不对这些额外的结构组件使用迁移学习。相反,GPT使用遍历式方法(traversal-style approach)将结构化输入转换为Pre-training模型可以处理的有序序列。这种输入转换避免了针对不同任务对模型结构进行大量更改。图四展示了特定于任务的输入转换方式,所有的输入转换都包含了随机初始化的起始(Start)和结尾(End)token,分别用和表示。具体于不同任务:

ꔷ Textual Entailment   如图三所示,对于文本蕴含任务,GPT在Fine-tuning阶段将前提(premise)和假设(hypothesis)的token序列拼接,并在二者中间添加分隔(delimiter) token ,用$表示。

ꔷ Similarity 对于相似度任务,两个句子之间没有固有的顺序。为了反映这一点,GPT将输入的两个句子以两个可能的排列顺序拼接两次,同样需要将delimiter token添加在两个句子中间。这样两个句子就能获得两个不同顺序的输入转换。然后将两个转换后的输入独立地输入Pre-trianing得到的模型,再将得到两个序列表征进行element-wise加法得到最终的表征。最后将其输入到线性输出层。

ꔷ Question Answering and Commonsense Reasoning 对于这两个任务,给定context document, question和可能的answer集合, GPT先将document context和question拼接(二者中间没有delimiter),然后再将其与每个answer进行拼接(中间有delimiter),得到个序列。每个序列都被Pre-training模型+Linear层独立地处理得到相应的分数,最终通过softmax层进行归一化,以产生可能答案的输出分布。

(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采用了Transformer的Encoder部分 ]

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的输入层 ]

为了使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

图片

[ 图八 Pre-traning和Fine-tuning过程]

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

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

Task-1 MASK LM

作者在直觉上相信,双向模型比单项模型或是只在浅层拼接从左到右和从右到左的表征更强大。为此,作者提出随机遮蔽一定比例的token,被遮蔽的token用代替,然后用未遮蔽的部分作为context预测遮蔽的部分。作者将其称为MASK LM,也被称为Cloze task(完形填空)。在实际实现中,将被遮蔽的token在最后一层对应位置上的表征输入分类器;对于每一个句子,随机屏蔽15%的token。

尽管MASK LM能够得到双向的预训练LM,然而Pre-training练阶段引入的特殊token不会在Fine-tuning阶段出现,这就产生了一个新的问题:Pre-training和Fine-tuning输入token的不匹配。为了缓解这一问题, 对与15%被遮蔽的token,不总是用替换,而是采用了如下策略:假设第个token被选中遮蔽,其(a)有80%的概率用替换,(b)有10%的概率用随机token进行替换,(c)有10%的概率保持不变。

Task-2 Next Sentence Prediction (NSP)

QA和Natural Language Inference (NLI) 等许多重要的下游任务都是基于理解两个句子之间的关系,而语言建模并不能直接捕捉到这种关系。为了训练BERT能够理解句子的关系,作者提出一个预测下一句的二分类任务,这种任务很容易在任何语料中生成。对于NSP中的句子对儿(A,B),有50%的句子B在语料中是紧跟句子A的下一句,有50%的句子B是在语料中随机选择的。如图八所示,在最后一层输出的Hidden state将被输入分类器预测B是否是A的下一句。

【有监督Fine-tuning】

在Fine-tuning阶段,将所有任务的输入构造成句子对(A,B)的形式,例如(a)Paraphrasing中的句子对,(b)Entailment中的hypothesis-premise对,(c)QA中的question-passage对和(d)文本分类和序列标注任务中的text-对。 对于输出,在token- level的任务里,将所有token的对应位置最后一层的hidden states输入相应的输出层(例如序列标注和QA);在sentence-level的任务里,将对应位置最后一层的hidden state输入到分类层进行分类(例如Entailment和Sentiment Analysis)。

(4)数据集

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

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

(5)实验结果

ꔷ GLUE

图片

可以看到与OPENAI GPT相比(二者模型结构上仅仅在Self-attention模块上是否有MASK机制存在差异),在每个任务上都有提升,平均提升4.5%。

ꔷ 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的对比

初代 GPTBERT

模型

Transformer Decoder, 单向(去掉MHA)

Transformer Encoder,双向

参数量

1.17亿

BASE 1.10亿;LARGE 3.40亿

语料

BooksCropus 800M单词

BooksCropus 800M单词+维基English 2500M单词

[CLS][SEP]..

Fine-tuning引入

Pre-training引入

Pre-training 任务

LTR预测下一个单词

MASK LM和NSP

2.3 GPT-2

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

2.3.1 原理

(1)Language Modeling的实际行为

传统Language Modeling(LM)也是GPT-2的中心思想(大道至简)。LM通常被构造为对来自一组样本进行无监督分布估计,其中每个样本由长度可变的token序列组成。由于language有自然的顺序性,因此通常将联合概率建模为:

(基础知识)(https://zhuanlan.zhihu.com/p/109954774)

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

LM其实也是在给序列的条件概率建模(有了LM的能力自然就有了对序列和序列间条件概率的建模能力)。

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

NLP中对所有单个任务的建模都可以表达为,那么一个通用的模型(指能够进行多种不同任务的模型),及时对于不同任务的输入相同,它也应该不仅condition on input还应该condition on task才能执行。而传统的多任务模型,需要对模型结构进行特殊的设计,比如针对不同任务添加任务特定编码器和解码器。但幸运的是,语言提供了一种灵活的方式来指定任务、输入和输出。例如,一个翻译任务的样本可以被表达成的形式;一个阅读理解的样本可以被表达为。由此可见,以这种数据格式可以有监督地训练一个single model,其不需要特定任务的编码器或者解码器,就能执行多任务。

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

相比于有监督的多任务学习,LM只是不需要显示地对哪些符号是输出进行监督。例如对于任意序列, 通过LM都能推理新的序列,而中所指定的任务的输出可能就出现在中,但是LM的输出没有显示地对其进行监督。从这个意义上理解,多任务的有监督学习都是LM对序列建模的子集。例如,在LM Pre-training时,文本中有一句话,“The translation of word Machine Learning in chinese is 机器学习”,在训练完这句话后,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期间让模型学习广泛的技能和模式识别能力,而在推理期间利用这些技能和能力迅速适配到期望的任务上。如下图所示:

图片

以MAML算法为例,meta-learning的目的是找到模型的参数的最优初始化值meta-initialization, 使模型能从meta-initialization开始迅速应用到其它任务中。其优化过程分为内循环(inner loop)和外循环(outer loop),其中内循环(inner loop)是针对子任务进行学习,而外循环(outer loop)是对meta-initialization进行更新。换言之,如果找到一组参数meta-initialization, 从它开始来学习多个任务,如果每个任务都能学好,那么它就是一组不错的初始化参数,否则就对其进行更新。而LM与meta-learning相似,其内循环就是对大语料中包含的多个子任务(回顾GPT-2)中的每一个进行学习(即语言建模),作者将其称为In-context learning,  而外循环则是对整个语料的建模,即语料中包含多个子任务,模型在整个大语料上一直以语言建模的目标进行优化其实就是在找meta-initialization。 而GPT-2其实也在尝试In-context learning,其使用Pre-training LM的输入作为任务规范的一种形式,模型以自然语言指令或任务演示示例为条件,然后通过预测一下步将发生什么来完成任务的更多示例。并且GPT-2已经展示了In-context learning的一些能力,证明了这是一个有希望的方向。GPT-2在一些任务上的能力还远不及Fine-tuning。

ꔷ 另一个方向是扩大模型参数量的规模,从初代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。三种推理方式具体如下:

ꔷ Zero-shot只输入任务描述和提示词(Prompt);

ꔷ One-shot输入任务描述,1个示例和Prompt;

ꔷ Few-shot输入任务描述,K()个示例和Prompt。

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

初代GPTGPT-2GPT-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

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

ꔷ 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:输入的文本序列空间。

ꔷ Reward Function: 一个打分模型Reward Model,和一个KL的梯度惩罚项,目的是为了使Policy的输出文本不要和Initial LM差太多,防止模型为了迎合Reward模型输出不连贯的文本或着胡言乱语。

RLHF 首先人工收集LM的输出答案,并对输入输出对进行打分标注来训练Reward Model; 然后,在RLHF期间,将Prompts Dataset中的每一个样本分别输入到Initial LM和Policy中,得到两个输出,将输入到Reward Model中得到评分, 然后加上梯度惩罚项避免Policy的输出与Initial LM的差距太大。因此,得到Reward Function的输出结果。 然后根据利用Update rule,即PPO算法更新Policy的参数,在InstructGPT中,update rule 还包括原始LM的目标。

2.5.3 PPO算法

RL实际上就是Agent在一个状态下选择下一个动作, 获得奖惩,而我们的优化目标是希望选择动作的Policy使得总体收益期望最大。对于一组模型参数,可以得到一组轨迹序列的概率分布$p(\tau;\theta), \tau = [,, \cdots](想象一下答案的生产过程)。对于一条轨迹\tau$,可以得到Reward的期望为

其中是权重因子,例如远期奖励不重要,是相应时间步的Reward。

PPO的目标是最大化Reward的期望,因此可得目标函数为:

最大化上述目标则采用梯度上升:

.

求解上述梯度:

在InstructGPT中,上式中的对应输入序列后输出序列的概率。

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 小结

优点

ꔷ 与 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 发展有哪些问题需关注?(https://www.zhihu.com/aria/question/570520300/answer/2790514496),个人认为,虽然GPT系列通过大模型、大语料上的LM在不断提高下游任务的泛化性,但目前仍然无法保证RLHF中Reward模型的泛化性。

03

拓展

3.1 思考

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

从初代GPT的Pre-training + Fine-tuning,到GPT-2初步展现的Zero-shot能力,再到GPT-3的In-context learning(实际上GPT-2也有In-context learning, 而GPT-3采用了更大的模型和更大的语料,并强调了这一概念)所带来的更强大的Zero-shot和Few-shot能力,这些趋势似乎在告诉我们标签训练不是必须的。但需要注意的是,GPT-3在训练的时候并不是完全没有任务相关的监督信号,只不过监督信号自然地存在于大规模语料中,并且以传统LM的建模方式学到了隐藏在大规模语料中的多种不同任务的和之间的依赖。此外,在InstructGPT和ChatGPT中为了使模型与人类对齐,OpenAI仍然通过人工标注偏好来训练Reward model,再结合RL对模型进行训练。原因是大规模语料中没有与人类对齐的监督信号。总而言之,或许在某些任务上,我们不需要“人工标注”,但并不是说模型不需要任务相关的“监督信号”,而如果我们对模型有更加High-level的要求,比如与人类对齐,如果数据中没有此类信号,那么“人工标注”是必须的。再回想下GPT-3.5为什么要在语料中加入Code语料,这是因为训练GPT-3的45TB中没有足够的与代码相关的数据。回顾GPT的发展史我们可以看到,在LM建模能力和算力对模型规模扩大的支持下,人们逐渐从对数据集的标注转向了对数据集分布的设计上。

3.1.2 对多模态的启发?

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

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

咨询了下资深NLPer,应该是Beam Search,附传送门(https:///beam-search-decoder-natural-language-processing/)。

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 HF(https:///pdf/2204.05862.pdf)的Paper里找到了可能的答案。先看下Anthropic公司的介绍:

Anthropic是一家人工智能安全和研究公司,致力于构建可靠、可解释和可控制的人工智能系统。今天的大型通用系统可以带来巨大的好处,但也可能是不可预测、不可靠和不透明的:我们的目标是在这些问题上取得进展。目前,我们主要专注于这些目标的研究;在未来的道路上,我们预见到我们的工作有很多机会为商业和公共利益创造价值。

那Anthropic是怎么解决这个问题的呢?答案是OOD detection:

图片

具体来说,作者将收集的helpfulness dataset中的每一个样本,也就是in-distribution中的样本输入到训练好的模型中,取其中第层的输出向量,用表示。所有训练集的样本可以得到In-distribution的向量集合

。然后计算整个分布的均值

和协方差矩阵

。然后,对于一个新的样本所得到的第层的向量,得到其与in-distribution集合的距离为。然后就可以设定阈值排除OOD的样本了。

目前猜测,(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 Interpreters(https:///pdf/2110.06399.pdf)

博文:最前沿: 从Modularity到Generalization(https:///pdf/2110.06399.pdf)

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

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

3.3 写在最后

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多