gpt2中文训练模型((八)nlp学习之GPT系列模型讲解)gpt 全程干货
1. GPT简介GPT全称为 Generative Pre-Training,即生成式预训练。它首次于 2018 年由 OpenAI 在论文《Improvi...
互联网天下1直都是充满了令人惊奇和没有断变革的地方,今天就让我们1起聊聊最近在这个领域发生的1些重要事件吧。
1. GPT简介GPT全称为 Generative Pre-Training,即生成式预训练它首次于 2018 年由 OpenAI 在论文《Improving Language Understanding by Generative Pre-Training》中提出。
类似于 ELmo(见上1篇文章),GPT 是1个两阶段模型,第1阶段 pre-training,第二阶段 fine-tuning它们之间的区别在于,ELmo 模型的基本框架采用的是双向 LSTM,而 GPT 采用的是 Transformer Decoder 结构。
GPT如今有多个改进版,我们将其称为 GPT⑴, GPT⑵, GPT⑶,在本文中,我们将依次讲解这几个模型2. GPT⑴模型GPT⑴ 模型分为两个阶段,第1阶段通过语言模型进行预训练得到1个神经网络;第二阶段通过微调解决下流任务。
上面我们分别看看这两个阶段的过程2.1 第1阶段 Pre-Training第1阶段的预训练,我们认为它是1个无监督预训练,因为我们训练的是1个语言模型,并无标签的存在假设给定1个序列 u=(u1,u2,
...,un)u=(u_{1},u_{2},...,u_{n}) ,设高低文窗口大小为 kk , 使用标准语言建模来最大化该序列的概率:L1=∑ilogP(ui|ui−k,...,ui−1)L_{1}=\sum_{i}^{}{logP(u_{i}|u_{i-k},...,u_{i⑴})} \\
在 GPT⑴ 中,我们利用多个Transformer Decoder block(见图1)来实现该语言模型。
图1:红色方框内的即为Transformer Dcoder Block假设有L层transformer decoder block堆叠成1个网络,设经过word embedding和positional encoding后的输入为
h0h_{0} ,那么有:其中hl=transformerblock(hl−1),其中lϵ[1,L]h_{l}=transformerblock(h_{l⑴}),其中l\epsilon[1,L]\\ 由此,经过大量语料库的无监督训练后,我们的就得到了1个预训练模型。
需要注意的是,在Decoder block中第1个sublayer是Masked Multi-Head Attention,也就是说,它对输入进行了掩码,该结构中,模型只能看到每个单词之前的token,看没有到其以后的token。
相当于在该模型中,我们只能利用上文来推断后面的单词,这是1个单向语境的模型(见图2)
图2:left-to-right Transformer2.2 第二阶段 fine-tuning在第二阶段模型是1个监督模型,对于特定的任务,我们将输入转化为预训练模型可以处理的有序序列,在预训练模型后加上1个其他的网络层(如linear层)进行训练。
我们考虑在 fine-tuning 阶段加入最简单的 linear 层假设所有的数据集为C,设输入的序列为 x=(x1,...,xm)x=(x_{1},...,x_{m}) ,该序列的标签为 yy ,该模型的任务为预测标签,使以下概率最大化
P(y|x1,...xm)=softmax(hLmWy)P(y|x_{1},...x_{m})=softmax(h_{L}^{m}W_{y})\\ 其中 hLmh_{L}^{m} 是 xx 经过第1阶段预训练模型后得到的输出,
WyW_{y} 是 linear 层的权重矩阵在第二阶段我们要做的就是最大化式子: L2(C)=∑logP(Y|x1,...,xm)L_{2}(C)=\sum_{}^{}{logP(Y|x_{1},...,x_{m})}。
关于预训练阶段,我初次看时有1个疑惑,为何预训练过的语言模型后面加上1些简单的网络层后,就可以适用到许多没有同的下流任务中去呢?论文中对于第1阶段的预训练作用是这样解释的:第1,它可以提高第二阶段监督模型的泛化性能;第二,它可以加速网络的收敛。
结合该解释,我是这样理解的,语言模型经过训练后,1定程度上包含了某种语料讯息,而我们在处理下流任务时,通常也就是希望通过理解“语言信息”从而达到分类等目的,利用预训练过的模型,我们可以更好更快的理解语句中的信息,再经过微调,就可以完成下流任务。
将两个阶段整合起来,GPT⑴模型的最终目的就是最大化公式: L3(C)=L2(C)+λ∗L1(C)L_{3}(C)=L_{2}(C)+\lambda*L_{1}(C) ,其中 λ\lambda 是1个正则参数。
3. GPT⑵模型GPT⑵ 模型实际上只是在 GPT⑴ 上做了1点简单的修改我们知道 GPT⑴ 模型是两阶段训练模型,它首先是在第1阶段预训练1个语言模型,再在第二阶段将该语言模型运用到有监督的数据集上;。
GPT⑵ 第1阶段同样也是预训练1个语言模型,而第二阶段,它采用的是zero-shot,即没有再使用有标签的数据对模型进行fine-tuning,而是直接给出1个问题的描述,然后模型直接进行inference
通常来说,我们的模型建模的是概率 P(output|input)P(output|input) ,但是由于1个通用的模型会在许多任务长进行训练,那么对于同样的输入,可能会对应到多个输出,因此,在GPT2中提出,还需要对任务建模,即 。
P(output|input,task)P(output|input,task) ,这也就应证了论文的标题“Language Models are Unsupervised Multitask Learners”,其实这就有点类似于元学习了,这部分可以联系起来学习1下。
当然有人会问,第二阶段无监督训练效果怎么会好呢?考虑到这个问题,GPT⑵ 在第1阶段的模型规模更大,它堆叠了48层 Decoder Block,参数规模非常庞大;除此以外,它还用到了更大的数据集 WebText 进行训练(该数据集是作者他们自己爬取的,这个庞大的数据集本身也可以作为该论文的成果之1)。
通过这两种昂贵的扩容方法,模型就具备了更强的语言理解能力作者认为,具有足够能力的语言模型可以自然的学习和推断语言序列中演示的任务,因此它可以执行无监督的任务GPT⑵ 模型的核心其实还是第1阶段的预训练模型,作者进行第二阶段的无监督任务事实上只是为了论证1件事情,即第1阶段的语言模型学习到了足够多的语言信息。
4. GPT⑶模型GPT⑶模型结构类似于GPT⑵模型,没有同的地方次要在于两点:GPT⑶的 trasformer 结构采用的是 Sparse Transformer(attention 采用密集和稀疏交替形式),另外,它的规模更大,GPT⑶ 的预训练模型1共有1750亿个参数。
GPT⑶ 采用的是 few-shot 方法进行推断(in-context learning),即给定少量训练样本,只对其进行前向传播,模型的参数没有会因为这些样本的训练而改变首先给出1个问题描述,再给出几个示例,这些示例通过模型经过前向传播(并没有进行训练),为何这些示例会起作用呢?我小我理解是通过这些前向传播,模型激活了相应任务的能力(有点元学习/prompt的意思);另外,GPT这些大模型在预训练的时候,其实是包含了各种任务的数据1同训练,所以我们有fine-tuning,有in-context learning,它的目的就在于让模型在运用的时候知道目前应用的是哪个任务,对应这个任务进行inference。
另外,论文中还讨论了 zero-shot, one-shot, few-shot 几种方法的效率,这几种方法可见图3。
图3:zero-shot, one-shot, few-shot方法关于few-shot的实现原理,可以参考文章:Few-shot Learning 小白入门笔记 - 知乎 (zhihu.com)其实关于few-shot的实现,以及few-shot为何能够work的原理,我也还没有搞懂,上面的文章讲得很清楚,但是图像分类任务和序列任务还是没有太1样,图像分类计算二者相似度是可行的,因为预训练模型提取的特征都差没有多。
但是对序列任务来说,例如进行文本翻译,few-shot 究竟是如何起作用的我仍然没有太清楚,对于文本来说,计算相似度的方法在我看来没有太可行,没有同的语句相似度应该是没有太接近的,如果有懂的伙伴,欢迎留言指教~。
本文转载于万像素才网:https://www.wanxiangsucai.com/
当前非电脑浏览器正常宽度,请使用移动设备访问本站!