首页 > 科技派

gpt能写论文吗(搞懂GPT,只需看这些!)gpt 没有看后悔

时间:2023-05-24 15:22:30来源:冰蓝世界

 

好奇心总是驱使着我们去关注互联网的最新动态,而今天,就让我们聚焦在1些最近令人瞩目的互联网事件上,1起畅谈吧。

0.参考文献飞桨PaddlePaddle-源于产业实践的开源深度学习平台​www.paddlepaddle.org.cn/?fr=paddleEdu_zhihu

飞桨1站式深度学习百科​github.com/PaddlePaddle/awesome-DeepLearning/?fr=paddleEdu_zhihu[PDF] Improving Language Understanding by Generative Pre-Training | Semantic Scholar

​www.semanticscholar.org/paper/Improving-Language-Understanding-by-Generative-Radford-Narasimhan/cd18800a0fe0b668a1cc19f2ec95b5003d0a5035

1. 介绍2018 年 6 月,OpenAI 发表论文介绍了自己的语言模型 GPT,GPT 是“Generative Pre-Training”的简称,它基于 Transformer 架构,GPT模型先在大规模语料长进行无监督预训练、再在小得多的有监督数据集上为具体任务进行精细调节(fine-tune)的方式。

先训练1个通用模型,然后再在各个任务上调节,这种没有依赖针对单独任务的模型设计技巧能够1次性在多个任务中取得很好的表现这种模式也是 2018 年中自然语言处理领域的研究趋势,就像计算机视觉领域流行 ImageNet 预训练模型1样。

1.1 GPT的动机NLP 领域中只有小部分标注过的数据,而有大量的数据是未标注,如何只使用标注数据将会大大影响深度学习的性能,所以为了充分利用大量未标注的原始文本数据,需要利用无监督学习来从文本中提取特征,最经典的例子莫过于词嵌入技术。

但是词嵌入只能 word-level 级别的任务(同义词等),没法解决句子、句对级别的任务(翻译、推理等)出现这种问题原因有两个:没有清楚下流任务,所以也就没法针对性的进行优化;就算知道了下流任务,如果每次都要大改模型也会得没有偿失。

为了解决以上问题,作者提出了 GPT 框架,用1种半监督学习的方法来完成语言理解任务,GPT 的训练过程分为两个阶段:无监督Pre-training 和 有监督Fine-tuning在Pre-training阶段使用单向 Transformer 学习1个语言模型,对句子进行无监督的 Embedding,在fine-tuning阶段,根据具体任务对 Transformer 的参数进行微调,目的是在于学习1种通用的 Representation 方法,针对没有同种类的任务只需略作修改便能适应。

2. 模型结构GPT 使用 Transformer 的 Decoder 结构,并对 Transformer Decoder 进行了1些改动,原本的 Decoder 包含了两个 Multi-Head Attention 结构,GPT 只保留了 Mask Multi-Head Attention,如下图所示。

GPT 使用句子序列预测下1个单词,因此要采用 Mask Multi-Head Attention 对单词的下文遮挡,防止信息泄露例如给定1个句子包含4个单词 [A, B, C, D],GPT 需要利用 A 预测 B,利用 [A, B] 预测 C,利用 [A, B, C] 预测 D。

如果利用A 预测B的时候,需要将 [B, C, D] Mask 起来Mask 操作是在 Self-Attention 进行 Softmax 之前进行的,具体做法是将要 Mask 的位置用1个无穷小的数替换 -inf,然后再 Softmax,如下图所示。

Softmax 之前需要 Mask

GPT Softmax可以看到,经过 Mask 和 Softmax 以后,当 GPT 根据单词 A 预测单词 B 时,只能使用单词 A 的信息,根据 [A, B] 预测单词 C 时只能使用单词 A, B 的信息。

这样就可以防止信息泄露下图是 GPT 整体模型图,其中包含了 12 个 Decoder。

GPT只使用了 Transformer 的 Decoder 部分,并且每个子层只有1个 Masked Multi Self-Attention(768 维向量和 12 个 Attention Head)和1个 Feed Forward,共叠加使用了 12 层的 Decoder。

这里简单解释下为何只用 Decoder 部分:语言模型是利用上文预测下1个单词的,因为 Decoder 使用了 Masked Multi Self-Attention 屏蔽了单词的后面内容,所以 Decoder 是现成的语言模型。

又因为没有使用 Encoder,所以也就没有需要 encoder-decoder attention 了3. GPT训练过程3.1 无监督的预训练无监督的预训练(Pretraining),具体来说,给定1个未标注的预料库

U=u1,u2,...,unU={u_{1},u_{2},...,u_{n}} ,我们训练1个语言模型,对参数进行最大(对数)似然估计:L1(U)=∑ilogP(ui|u1,...,uk−1;Θ)L_{1}(U)=\sum_{i}log P(u_{i}|u_{1},...,u_{k};\Theta)

其中,k 是高低文窗口的大小,P 为条件概率,$\Theta$为条件概率的参数,参数更新采用随机梯度下落(GPT实验实现部分具体用的是Adam优化器,并没有是原始的随机梯度下落,Adam 优化器的学习率使用了退火策略)。

训练的过程也非常简单,就是将 n 个词的词嵌入 WeW_{e} 加上位置嵌入 WpW_{p} ,然后输入到 Transformer 中,n 个输出分别预测该位置的下1个词可以看到 GPT 是1个单向的模型,GPT 的输入用

h0h_{0} 表示,0代表的是输入层, h0h_{0} 的计算公式如下h0=UWe+Wph_{0}=UW_{e}+W_{p} WeW_{e} 是token的Embedding矩阵, WpW_{p} 是位置编码的 Embedding 矩阵。

用 voc 表示词汇表大小,pos 表示最长的句子长度,dim 表示 Embedding 维度,则 WpW_{p} 是1个 pos×dim 的矩阵, WeW_{e} 是1个 voc×dim 的矩阵在GPT中,作者对position embedding矩阵进行随机初始化,并让模型自己学习,而没有是采用正弦余弦函数进行计算。

得到输入 h0 h_{0} 以后,需要将 h0 h_{0} 依次传入 GPT 的所有 Transformer Decoder 里,最终得到 hnh_{n} hl=transformerblock(hl

−1),∀l∈[1,n]h_{l}=transformer_block(h_{l}), \forall l \in [1,n]n 为神经网络的层数最后得到$h_{n}$再预测下个单词的概率P(u)=

softmax(hnWeT)P(u)=softmax(h_{n}W_{e}^T)3.2 有监督的Fine-Tuning预训练以后,我们还需要针对特定任务进行 Fine-Tuning假设监督数据集合 CC

的输入 XX 是1个序列 x1,x2,...,xmx^1,x^2,...,x^m ,输出是1个分类y的标签 ,比如情感分类任务我们把 x1,..,xmx^1,..,x^m 输入 Transformer 模型,得到最上层最后1个时刻的输出

hlmh_{l}^m ,将其通过我们新增的1个 Softmax 层(参数为 WyW_{y} )进行分类,最后用交叉熵计算损失,从而根据标准数据调整 Transformer 的参数以及 Softmax 的参数

WyW_{y} 这等价于最大似然估计:P(y|x1,...,xm)=softmax(hlmWy)P(y|x^1,...,x^m)=softmax(h_{l}^mW_{y})WyW_{y} 表示预测输出时的参数,微调时候需要最大化以下函数:。

L2(C)=∑x,ylogP(y|x1,..,xm)L_{2}(C)=\sum_{x,y}log P(y|x^1,..,x^m)正常来说,我们应该调整参数使得 L2L_{2} 最大,但是为了提高训练速度和模型的泛化能力,我们使用 Multi-Task Learning,GPT 在微调的时候也考虑预训练的损失函数,同时让它最大似然

L1L_{1} 和 L2L_{2}L3(C)=L2(C)+λ×L1(C)L_{3}(C)=L_{2}(C)+\lambda \times L_{1}(C) 这里使用的 L1L_{1} 还是之前语言模型的损失(似然),但是使用的数据没有是前面无监督的数据

UU ,而是使用当前任务的数据 CC ,而且只使用其中的 XX ,而没有需要标签y3.3 其它任务针对没有同任务,需要简单修改下输入数据的格式,例如对于相似度计算或问答,输入是两个序列,为了能够使用 GPT,我们需要1些特殊的技巧把两个输入序列变成1个输入序列,如下图,可以发现,对这些任务的微调次要是新增线性层的参数以及起始符、结束符和分隔符3种特殊符号的向量参数。

Classification:对于分类问题,没有需要做什么修改文本蕴涵(Entailment):对于文本蕴涵任务,作者用1个“$”符号将文本和假设进行拼接,并在拼接后的文本前后加入开始符“start”和结束符“end”,然后将拼接后的文本直接传入预训练的语言模型,在模型再接1层线性变换和softmax即可。

文本相似度(Similarity):对于文本相似度任务,由于相似度没有需要考虑两个句子的顺序关系,因此,为了反映这1点,作者将两个句子分别1个句子进行拼接,中央用\$进行隔开,并且前后还是加上起始和结束符,然后分别将拼接后的两个长句子传入Transformer,最后分别得到两个句子的向量

hlmh_{l}^{m} ,将这两个向量进行元素相加,然后再接如线性层和softmax层Multiple-Choice:对于问答和常识推理任务,首先将背景信息问题进行拼接,然后再将拼接后的文本依次每个答案进行拼接,最后依次传入Transformer模型,最后接1层线性层得多每个输入的预测值。

4. GPT特点优点特征抽取器使用了强大的 Transformer,能够捕捉到更长的记忆信息,且较传统的 RNN 更易于并行化;方便的两阶段式模型,先预训练1个通用的模型,然后在各个子任务长进行微调,减少了传统方法需要针对各个任务定制设计模型的麻烦。

缺点GPT 最大的问题就是传统的语言模型是单向的;我们根据之前的历史来预测当前词但是我们没有能利用后面的信息比如句子 The animal didn’t cross the street because it was too tired。

我们在编码 it 的语义的时候需要同时利用前后的信息,因为在这个句子中,it 可能指代 animal 也可能指代 street根据 tired,我们推断它指代的是 animal但是如果把 tired 改成 wide,那么 it 就是指代 street 了。

Transformer 的 Self-Attention 理论上是可以同时关注到这两个词的,但是根据前面的介绍,为了使用 Transformer 学习语言模型,必须用 Mask 来让它看没有到未来的信息,所以它也没有能解决这个问题。

5. GPT ELMo,BERT的区别5.1 GPT ELMo 的区别: 模型架构没有同:ELMo 是浅层的双向 RNN;GPT 是多层的 Transformer encoder 针对下流任务的处理没有同:ELMo 将词嵌入添加到特定任务中,作为附加功能;GPT 则针对所有任务微调相同的基本模型。

5.2 GPT BERT 的区别 预训练:GPT 预训练的方式和传统的语言模型1样,通过上文,预测下1个单词;GPT 预训练的方式是使用 Mask LM,可以同时通过上文和下文预测单词例如给定1个句子 。

u1,u2,...,unu_{1},u_{2},...,u_{n} ,GPT在预测单词 uiu_{i} 的时候只会利用 u1,u2,...ui−1u_{1},u_{2},...u_{i} 的信息而BERT会同时利用 。

u1,u2,...,ui−1,ui+1,...,unu_{1},u_{2},...,u_{i},u_{i+1},...,u_{n} 的信息 模型效果: GPT 因为采用了传统语言模型所以更加适合用于自然语言生成类的任务 (NLG),因为这些任务通常是根据当前信息生成下1刻的信息。

而 BERT 更适合用于自然语言理解任务 (NLU) 模型结构: 模型结构:GPT 采用了 Transformer 的 Decoder,而 BERT 采用了 Transformer 的 EncoderGPT 使用 Decoder 中的 Mask Multi-Head Attention 结构,在使用 。

u1,u2,..,ui−1u_{1},u_{2},..,u_{i} 预测单词 uiu_{i} 的时候,会将 uiu_{i} 以后的单词 Mask 掉。

本文转载于万像素才网:https://www.wanxiangsucai.com/

用户评论(0条)

请文明上网,做现代文明人