赞
踩
NLP:自然语言领域NLP模型发展(ELmo→GPT/BERT→MT-DNN→XLNet→RoBERTa→ALBERT)l历程简介、重要算法介绍之详细攻略daiding—已全部迁移新书中
目录
自然语言领域NLP模型发展(ELmo→GPT/BERT→MT-DNN→XLNet→RoBERTa→ALBERT)l历程简
2、GPT—单向语言模型(对语义信息的建模能力有限,堆叠12个Transformer子层(解码器结构)):无监督预训练+特定下游任务有监督的微调
2.5、GPT系列(大力出奇迹)——GPT-2和GPT-3的特点
3、BERT—双向 Transforme(创新不大但集大成者):MLM+NSP预训练
ELMO实现了对word进行动态编码,但是他用了LSTM,LSTM并不能记住很长的信息,且不利于并行计算。
继2017年谷歌大脑提出一个包含编码器和解码器的 Transformer 结构后,Transformer 在近三年间又有了许多不同的改进演化版本,对 Vanilla Transformer 的各种变体的技术线梳理,可以按照时间来划分:早期达到多个 SOTA 的结构优化模型是 GPT、BERT。
Transformer 的出现,催生出一批基于 Transformer的语言模型,这些模型被证实在一系列NLP任务上取得极大性能提升。
上面的介绍包含了两种常见的迁移学习方式:特征提取和微调,两者的区别是:
特征提取 | 以ELMo等为代表的模型使用的特征提取方法冻结了预训练参数; |
微调 | 而以 BERT等为代表的模型采用的微调则是动态地改变参数,根据下游任务进行参数上的微调。 |
总结,特征提取需要更复杂的任务架构,并且就综合性能来看,微调的方法更适合下游任务。
三个预训练模型的图如下所示:
编辑
GPT模型 | |
引入 | (1)、解决ELMO中LSTM无法记住很长信息的特点。 (2)、解决ELMO中LSTM无法并行计算的特点。 在此背景下,GPT预训练模型应运而生。GPT采用self attention进行了改进。 |
简介 | 2018年 OpenAI团队,Radford等人提出GPT(Generative Pre-Training) 模型。使用Transformer作为特征抽取器,同时使用单向语言模型。 |
GPT采用了Transformer中的解码器结构,并没有使用一个完整的Transformer来构建网络。GPT模型堆叠了12个Transformer子层,并用语言建模的目标函数来进行优化和训练。 | |
创新 | (1)、基于 Transformer 的预训练+微调技术为 NLP 领域注入了新的活力,是该组合技术的开创者。 (2)、采用Transformer进行特征提取:相比于ELMO模型来说GPT使用效果更好的Transformer来替代LSTM作为特征抽取器。GPT相比于ELMO模型效果更好的原因就是Transformer的特征抽取能力远远强于LSTM。但是没高兴多久,BERT就出来了。 |
缺点 | (1)、GPT模型虽然达到了很好的效果,但本质上仍是一种单向语言模型,对语义信息的建模能力有限。由于使用的是单向模型,只能通过前面词预测后面的词,可能会遗漏信息。 |
应用 |
预训练好的网络参数,尤其是底层的网络参数抽取出特征,跟具体任务越无关,比较具备任务的通用性,所以,这是为何一般用底层预训练好的参数初始化新任务网络参数的原因。而高层特征,跟任务关联较大,实际可以不用使用,或者采用Fine-tuning用新数据集合清洗掉高层无关的特征抽取器。
论文中提出,我们可将训练过程分为两个阶段:
第一阶段,以标准语言模型作为目标任务,在大规模语料库上做无监督的预训练;
第二阶段,在特定的下游任务上,对模型参数做有监督的微调,使其能够更好的适应特定目标任务。
基于上述过程,GPT使用多层 Transformer Decoder 作为语言模型,其基本结构如下:
编辑
GPT是怎么样的运作流程呢?其实就是用self attention训练一个语言模型,请看下图:
编辑
每个词之和前面的词做attention,预测下一个词,例如读入开始标记BOS,然后自己和自己做attention,预测【潮水】,读入BOS、潮水,然后和BOS、潮水做attention,预测【退了】,类推下去,直到结束。在很多语料上train下去,就得到了一个非常强大的语言模型,可以动态的进行编码。
使用的时候可以固定住这些attention层的参数,然后训练其他的下游任务,例如做情感分类问题,可以把这些attention层放在几个全连接层前面,固定参数,只训练后面的全连接层,通过softmax或者sigmoid进行分类。
编辑
Unsupervised pre-training。GPT-1的无监督预训练是基于语言模型进行训练的。
在第一阶段,给定一个无监督的(无标签)序列(tokens语料库),U={u1,u2,,un},选择标准的语言模型目标函数(即根据前 k 个词预测下一个词),即使用标准 LM 作为预训练任务,语言模型的优化目标是最大化下面的似然函数:
编辑
其中,k为token的上下文滑动窗口的大小,条件概率P使用参数为Θ的神经网络建模,即这些参数使用SGD进行优化。在GPT-1中,使用了12个transformer块的结构作为解码器,每个transformer块是一个多头的自注意力机制,然后通过全连接得到输出的概率分布。
编辑
该模型的训练过程,其实就是将输入文本中每个词的Embedding作为输入,输出预测的下一个词。
Supervised fine-tuning。当得到无监督的预训练模型之后,我们将它的值直接应用到有监督任务中。
第二阶段,即在特定任务上使用少量带标签的数据对模型参数进行有监督的微调,对比预训练阶段,可以看出,只是多增加了“Task Classifier”模块。
编辑
对于一个有标签的数据集C,每个实例样本都包含有m个输入(tokens序列):{x1,x2,,xm},和对应的标签y组成。
第1步 | 首先将这些token输入到训练好的预训练模型中,得到最终的特征向量hmj。 然后再通过一个全连接层得到预测结果y。 具体任务相应的目标函数为: 编辑 其中Wy为全连接层的参数,有监督的目标则是最大化上边公式的值。 |
第2步 | 作者并没有直接使用L2,而是向其中加入了L1 ,并使用λ进行两个任务权值的调整, λ的值一般为0.5, 编辑 当进行有监督微调的时候,我们只训练输出层的Wy和分隔符(delimiter)的嵌入值。 |
第3步 | 其中x1,,,,xm为特定下游任务的输入,y为标签,hmj为预训练阶段最后一个词的输出,即最后一个tokenxm对应的最后一层transformer-decoder的输出。所以,需要额外调整的参数只有Wy,最终,微调阶段的目标函数为: L3(C)=L2(C)+λ∗L1(C) 原文中还提到了用辅助训练目标的方法来帮助模型在微调时拥有更好的泛化能力并加速收敛。 具体做法是:在使用最后一个词的预测结果进行监督学习的同时,前面的词继续上一步的无监督训练。综上,要优化的目标函数如下: 编辑 |
编辑
例如文章生成,代码生成,机器翻译,Q&A等,而完成这些任务并不需要有监督学习进行模型微调。而对于一个新的任务,GPT仅仅需要非常少的数据便可以理解这个任务的需求并达到接近或者超过state-of-the-art的方法。
当然,如此强大的功能并不是一个简单的模型能搞定的,GPT模型的训练需要超大的训练语料,超多的模型参数以及超强的计算资源。
GPT系列的模型结构秉承了不断堆叠transformer的思想,通过不断的提升训练语料的规模和质量,提升网络的参数数量来完成GPT系列的迭代更新的。GPT也证明了,通过不断的提升模型容量和语料规模,模型的能力是可以不断提升的。
模型 | 发布时间 | 参数量 | 预训练 数据量 | 架构 |
GPT-1 中杯 | 2018 年 6 月 | 1.17 亿 12层 | 5GB | token embedding + prosition embedding |
GPT-2 大杯 | 2019 年 2 月 | 15 .42亿 48层 | 40GB | |
GPT-3 特大杯 | 2020 年 5 月 | 1750 亿 96层 | 45TB |
GPT-1 | 先通过在无标签的数据上学习一个通用的语言模型,然后再根据特定热任务进行微调 --------------------- GPT-1使用了BooksCorpus数据集[7],这个数据集包含7000本没有发布的书籍。作者选这个数据集的原因有二: 1. 数据集拥有更长的上下文依赖关系,使得模型能学得更长期的依赖关系; 2. 这些书籍因为没有发布,所以很难在下游数据集上见到,更能验证模型的泛化能力。 |
GPT-2 | GPT-2的目标旨在训练一个泛化能力更强的词向量模型,它并没有对GPT-1的网络进行过多的结构的创新与设计,只是使用了更多的网络参数和更大的数据集。 ------------------------------------------ 直接采用无监督的方式来完成下游任务。 GPT-2对于不同类型的任务输入会加入一些引导字符来告诉模型如何正确预测目标。举例来说,假如是文本摘要类任务,那么GPT-2在输入的时候加“TL:DR”作为引导字符告诉模型这是文本摘要类任务。 --------------------- GPT-2的文章取自于Reddit上高赞的文章,命名为WebText。数据集共有约800万篇文章,累计体积约40G。为了避免和测试集的冲突,WebText移除了涉及Wikipedia的文章。对数据的质量也进行了筛选。 |
(1)、GPT-2的学习目标是使用无监督的预训练模型做有监督的任务。 (2)、最主要的区别还是GPT2完全变成无监督训练,直接用于下游任务,属于零样本学习(Zero-shot learning)。 (3)、GPT-2的核心思想概括为:任何有监督任务都是语言模型的一个子集,当模型的容量非常大且数据量足够丰富时,仅仅靠训练语言模型的学习便可以完成其他有监督学习的任务。主要思想是因为我的预训练模型足够好,所以下游不需要有监督的数据去微调模型了。 例如当模型训练完“Micheal Jordan is the best basketball player in the history”语料的语言模型之后,便也学会了(question:“who is the best basketball player in the history ?”,answer:“Micheal Jordan”)的Q&A任务。 (4)、最大贡献是验证了通过海量数据和大量参数训练出来的词向量模型有迁移到其它类别任务中而不需要额外的训练。 (5)、GPT-2表明随着模型容量和数据量的增大,其潜能还有进一步开发的空间,基于这个思想,诞生了我们下面要介绍的GPT-3。 | |
GPT-3 | GPT-3共训练了5个不同的语料,分别是低质量的Common Crawl,高质量的WebText2,Books1,Books2和Wikipedia,GPT-3根据数据集的不同的质量赋予了不同的权值,权值越高的在训练的时候越容易抽样到。 --------------------- 微调是需要标注数据的,而获取标注数据的成本是很高的。 ----------------------------------------- GPT-3模型直接不需要微调了,不使用样本或者仅使用极少量的样本就可以完成下游NLP任务。 |
GPT-3沿用了GPT-2的结构,但是在网络容量上做了很大的提升,具体如下: (1)、GPT-3采用了96层的多头transformer; (2)、词向量的长度是12888; (3)、上下文划窗的窗口大小提升至2048个token; (4)、使用了alternating dense和locally banded sparse attention。 | |
(1)、GPT-3超过了绝大多数的zero-shot或者few-shot的state-of-the-art方法。GPT-3是目前最强大的语言模型,仅仅需要zero-shot或者few-shot,GPT-3就可以在下游任务表现的非常好。除了几个常见的NLP任务,GPT-3还在很多非常困难的任务上也有惊艳的表现,例如撰写人类难以判别的文章,甚至编写SQL查询语句,React或者JavaScript代码等。 GPT-3在很多复杂的NLP任务中也超过了fine-tune之后的state-of-the-art方法,例如闭卷问答,模式解析,机器翻译等。除了这些传统的NLP任务,GPT-3在一些其他的领域也取得了非常震惊的效果,例如进行数学加法,文章生成,编写代码等。 (2)、而这些强大能力的能力则依赖于GPT-3疯狂的1750亿的参数量,45TB的训练数据以及高达1200万美元的训练费用。 (3)、GPT-3没有去做fine-tuning:从理论上讲GPT-3也是支持fine-tuning的,但是fine-tuning需要利用海量的标注数据进行训练才能获得比较好的效果,但是这样也会造成对其它未训练过的任务上表现差,所以GPT-3并没有尝试fine-tuning。 | |
总结 |
(1)、均基于transformer架构并没有太大的创新性设计:GPT后续系列依然坚持使用单向语言模型,GPT系列从1到3,通通采用的是transformer架构,可以说模型结构并没有创新性的设计。
(2)、OpenAI开发的新超级计算机加持(一台排名全球前5的超级计算机):在微软的资金支持下,这更像是一场赤裸裸的炫富:1750亿的参数,31个分工明确的作者,超强算力的计算机(28.5万个CPU, 1万个GPU),1200万的训练费用,45TB的训练数据(维基百科的全部数据只相当于其中的0.6%)。这种规模的模型是一般中小企业无法承受的,而个人花费巨金配置的单卡机器也就只能做做微调或者打打游戏了。
(3)、无资金重新训练:甚至在训练GPT-3时出现了一个bug,OpenAI自己也没有资金重新训练了。
(4)、牛逼但不知其逻辑:尽管通过增加模型容量可以明显提高性能,但是不清楚引擎里面发生了什么,即该模型是否已经学会推理,还是以更智能的方式记住训练示例。
编辑
GPT-3的本质还是通过海量的参数学习海量的数据,然后依赖transformer强大的拟合能力使得模型能够收敛。基于这个原因,GPT-3学到的模型分布也很难摆脱这个数据集的分布情况。得益于庞大的数据集,GPT-3可以完成一些令人感到惊喜的任务,但是GPT-3也不是万能的.
对于一些明显不在这个分布或者和这个分布有冲突的任务来说,GPT-3还是无能为力的。例如通过目前的测试来看,GPT-3的缺点如下:
GPT-3的缺点 | (1)、不会判断命题有效性:对于一些命题没有意义的问题,GPT-3不会判断命题有效与否,而是拟合一个没有意义的答案出来; (2)、可能会生成敏感内容:由于45TB海量数据的存在,很难保证GPT-3生成的文章不包含一些非常敏感的内容,例如种族歧视,性别歧视,宗教偏见等; (3)、受限于自身架构的局限会生成重复性内容:受限于transformer的建模能力,GPT-3并不能保证生成的一篇长文章或者一本书籍的连贯性,存在下文不停重复上文的问题。 |
近年来,硬件的性能在飞速发展,而算法的研究似乎遇见了瓶颈,GPT-3给冷清的AI领域注入了一剂强心剂,告诉各大硬件厂商它们的工作还要加油,只要算力足够强,AI的性能还有不断提升的上界。
GPT-3的高昂成本特性→技术垄断:GPT-3如此高昂的计算代价也引发了一些关于AI领域垄断的一些担心,对于如此高的算力要求,中小企业是否有能力负担的起,或者对于这些企业来说,是否有必要花这么多钱就训练一个词向量模型。长此以往,恐怕会形成AI巨头对算力要求高的算法的技术垄断。
BERT模型 | |
引入 | |
简介 | 2018年,Google Brain团队,Devlin等人提出了BERT(Bidirectional Encoder Representations from Transformers)[6],即基于Transformer的双向编码器表示。 |
创新 | (1)、BERT不仅使用Transformer作为特征抽取器,而且使用双向语言模型,刷新了NLP中各种任务的最好效果,很快抢了GPT的风头。 |
特点 | |
缺点 | |
意义 | (1)、目前绝大多数的预训练模型都是在BERT上改造而来。 |
Bidirectional Encoder Representations from Transformers (BERT)
GPT有个缺陷,就是编码只依赖上文信息,没有加入下文信息,那么BERT很好的解决了这个问题。BERT其实是transformer的encoder部分,如下图
编辑train BERT有两种方法,Masked LM和Next Sentence Prediction,Masked LM是随机掩盖住一些词,让BERT猜测盖住的词什么。Next Sentence Prediction是让BERT推断两个句子是不是有上下文关系。
编辑
BERT充分考虑了上下文,对word进行编码,于是很好的体现语义和上下文的关系,在很多比赛中遥遥领先。
为了解决 GPT 采用单向语言模型所带来的问题,Google Brain 在2018年提出了基于双向 Transformer 的大规模预训练语言模型 BERT[18],刷新了11项 NLP 任务的 SOTA,具有里程碑意义。
在预训练阶段,BERT 提出了 Masked Language Model(MLM)与 Next Sentence Prediction(NSP) 的预训练方法。
MLM 任务令模型预测文本中随机覆盖的缺失词,类似完形填空。同时,为避免覆盖所用高频标签 [MASK] 带来的误差,将其中部分标签换为随机词。NSP 任务则是利用 [CLS] 与 [SEP] 标签分隔上下句关系,以满足基于句子级别的下游任务的需要(如 QA、NLI 等)。
BERT的输入如下图所示:
在微调阶段,BERT 和 GPT 并没有多少本质上的区别,论文中给出了几种不同任务的微调方案,如下图:
编辑
至此,BERT 的训练过程可以总结为下图:
编辑
BERT 虽然有着非常好的表现,但它依然存在以下问题:
1.预训练和微调阶段的不一致性(Discrepancy):预训练 BERT 时,会随机 Mask 掉一些单词,但在微调阶段,却并没有诸如 [MASK] 之类的标签,从而导致两个过程的不一致;
2.与标准的语言模型相比,BERT 并不具备很好的生成能力。
GPT(基于单向Transformer 模型)[17] | BERT(基于双向Transformer 模型)[18] | |
顾名思义 | Generative Pre-Training 生成式预训练模型 | Bidirectional Encoder Representation from Transformer 来自 Transformer 的双向编码器表示 |
时间 | 2018年早点 | 2018年晚点 |
团队 | Radford等人,OpenAI(马斯克成立+微软投资) | Google Brain |
语言模型 | 而GPT-2用的是transformer中去掉中间Encoder-Decoder Attention层的decoder,即:Marked Self Attention,是单向语言模型。 | Bert使用的是transformer的encoder,即:Self Attention,是双向的语言模型; |
结构 | Pre-Training+Fine-Tuning | Pre-Training |
输入向量 | token embedding + prosition embedding | token embedding + position embedding + segment embedding |
参数量 | 1.17亿参数量 GPT-1使用了12层的transformer | 3.4亿参数量 48层 |
应用 | 不能做生成式任务。 | |
各自特点 | (1)、GPT1的模型是Transformer的Decoder部分,其采用的self-attention机制较好地弥补了LSTM的弊端。 (2)、使用了掩码自注意力头,掩码的使用使模型看不见未来的信息,得到的模型泛化能力更强。 (3)、使用Transformer作为特征抽取器+使用单向的语言模型。 (4)、GPT模型使用的是单向语言模型,可以认为是基于Transformer的解码器表示。GPT把原始 Transformer 结构中的解码器结构用作编码器进行特征抽取,由于解码器中的 Mask 设计,使得 GPT 只使用了单向信息,即该语言模型只使用了上文预测当前词,而不使用下文,这也使得其更适用于文本生成类任务。 | (1)、BERT只使用了原始 Transformer 结构中的编码器结构,因此其使用了双向的信息,并在一些任务中达到了更好的效果。 (2)、不能做生成式任务。 (3)、BERT 模型堆叠 Transformer 的编码器结构,并且通过 Masked-LM 的预训练方式达到了真双向语言模型的效果。 (4)、而BERT使用的基于Transformer的编码器能够对来自过去和未来的信息进行建模(理解为偷看下文答案),能够提取更丰富的信息。 |
共同点 | (1)、BERT和GPT的结构和方法十分相似,都沿用了原始Transformer 的结构。 (2)、二者分别基于单向、双向Transformer 模型,运用了 Pre-training + Fine-tuning 的训练模式,在分类、标注等 NLP 经典下游任务取得很好的效果。 (3)、GPT 和 BERT 两个模型,都在 Fine-tuning 阶段在编码层后面加上 Task-layer 以适应不同下游任务的训练需求。 |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。