问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

GPT核心原理详解:从模型结构到训练过程

创作时间:
作者:
@小白创作中心

GPT核心原理详解:从模型结构到训练过程

引用
CSDN
1.
https://blog.csdn.net/weixin_40280870/article/details/144523927

GPT(Generative Pre-trained Transformer)是OpenAI在2018年提出的一种基于Transformer架构的自然语言处理模型。它通过无监督预训练和有监督微调两个阶段,实现了在多个NLP任务上的优秀表现。本文将详细介绍GPT的核心原理,包括其模型结构、训练过程以及特点。

1. GPT概述

2018年6月,OpenAI发表论文介绍了其语言模型GPT。GPT基于Transformer架构,采用先在大规模语料上进行无监督预训练,再在小得多的有监督数据集上为具体任务进行精细调节(fine-tune)的方式。这种模式类似于计算机视觉领域流行的ImageNet预训练模型。

1.1 GPT的动机

NLP领域中只有小部分标注过的数据,而有大量的数据是未标注的。为了充分利用这些未标注的原始文本数据,需要利用无监督学习来从文本中提取特征。词嵌入技术虽然经典,但只能处理word-level级别的任务,无法解决句子、句对级别的任务。为了解决这些问题,GPT提出了半监督学习的方法,将训练过程分为无监督Pre-training和有监督Fine-tuning两个阶段。

2. 模型结构

GPT使用Transformer的Decoder结构,并对Transformer Decoder进行了一些改动。原本的Decoder包含了两个Multi-Head Attention结构,而GPT只保留了Mask Multi-Head Attention。这种设计使得GPT能够通过Mask操作防止信息泄露,确保模型在预测下一个单词时只能使用当前已知的上下文信息。


Softmax之前需要Mask


GPT Softmax

下图展示了GPT的整体模型结构,其中包含了12个Decoder。


GPT整体模型图

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

3. GPT训练过程

3.1 无监督的预训练

在无监督的预训练阶段,给定一个未标注的语料库U = { u 1 , u 2 , . . . , u n } U={u_{1},u_{2},...,u_{n}}U={u1 ,u2 ,...,un },训练一个语言模型,对参数进行最大(对数)似然估计:

L 1 ( U ) = ∑ i l o g P ( u i ∣ u 1 , . . . , u k − 1 ; Θ ) L_{1}(U)=\sum_{i}log P(u_{i}|u_{1},...,u_{k-1};\Theta)L1 (U)=i∑ logP(ui ∣u1 ,...,uk−1 ;Θ)

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

训练过程包括将n个词的词嵌入W e W_{e}We加上位置嵌入W p W_{p}Wp,然后输入到Transformer中,n个输出分别预测该位置的下一个词。GPT是一个单向模型,其输入计算公式如下:

h 0 = U W e + W p h_{0}=UW_{e}+W_{p}h0 =UWe +Wp

其中,W e W_{e}We是token的Embedding矩阵,W p W_{p}Wp是位置编码的Embedding矩阵。用voc表示词汇表大小,pos表示最长的句子长度,dim表示Embedding维度,则W p W_{p}Wp是一个pos×dim的矩阵,W e W_{e}We是一个voc×dim的矩阵。在GPT中,作者对position embedding矩阵进行随机初始化,并让模型自己学习,而不是采用正弦余弦函数进行计算。

得到输入h 0 h_{0}h0之后,需要将h 0 h_{0}h0依次传入GPT的所有Transformer Decoder里,最终得到h n h_{n}hn:

h l = t r a n s f o r m e r _ b l o c k ( h l − 1 ) , ∀ l ∈ [ 1 , n ] h_{l}=transformer_block(h_{l-1}), \forall l \in [1,n]hl =transformer_block(hl−1 ),∀l∈[1,n]

n为神经网络的层数。最后得到h n h_{n}hn再预测下个单词的概率:

P ( u ) = s o f t m a x ( h n W e T ) P(u)=softmax(h_{n}W_{e}^T)P(u)=softmax(hn WeT )

3.2 有监督的Fine-Tuning

预训练之后,需要针对特定任务进行Fine-Tuning。假设监督数据集合C CCC的输入X XXX是一个序列x 1 , x 2 , . . . , x m x^1,x^2,...,x^mx1,x2,...,xm,输出是一个分类y的标签,比如情感分类任务。

我们把x 1 , . . , x m x^1,..,x^mx1,..,xm输入Transformer模型,得到最上层最后一个时刻的输出h l m h_{l}^mhlm,将其通过新增的一个Softmax层(参数为W y W_{y}Wy)进行分类,最后用交叉熵计算损失,从而根据标准数据调整Transformer的参数以及Softmax的参数W y W_{y}Wy。这等价于最大似然估计:

P ( y ∣ x 1 , . . . , x m ) = s o f t m a x ( h l m W y ) P(y|x^1,...,x^m)=softmax(h_{l}^mW_{y})P(y∣x1,...,xm)=softmax(hlm Wy )

W y W_{y}Wy表示预测输出时的参数,微调时候需要最大化以下函数:

L 2 ( C ) = ∑ x , y l o g P ( y ∣ x 1 , . . , x m ) L_{2}(C)=\sum_{x,y}log P(y|x^1,..,x^m)L2 (C)=x,y∑ logP(y∣x1,..,xm)

为了提高训练速度和模型的泛化能力,使用Multi-Task Learning,GPT在微调的时候也考虑预训练的损失函数,同时让它最大似然L 1 L_{1}L1和L 2 L_{2}L2:

L 3 ( C ) = L 2 ( C ) + λ × L 1 ( C ) L_{3}(C)=L_{2}(C)+\lambda \times L_{1}(C)L3 (C)=L2 (C)+λ×L1 (C)

这里使用的L 1 L_{1}L1还是之前语言模型的损失(似然),但是使用的数据不是前面无监督的数据U UU,而是使用当前任务的数据C CC,而且只使用其中的X XXX,而不需要标签y。

3.3 其它任务

针对不同任务,需要简单修改下输入数据的格式,例如对于相似度计算或问答,输入是两个序列,为了能够使用GPT,我们需要一些特殊的技巧把两个输入序列变成一个输入序列

  • Classification:对于分类问题,不需要做什么修改
  • Entailment:对于推理问题,可以将先验与假设使用一个分隔符分开
  • Similarity:对于相似度问题,由于模型是单向的,但相似度与顺序无关,所以要将两个句子顺序颠倒后,把两次输入的结果相加来做最后的推测
  • Multiple-Choice:对于问答问题,则是将上下文、问题放在一起与答案分隔开,然后进行预测

4. GPT特点

优点

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

缺点

  • 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来让它看不到未来的信息,所以它也不能解决这个问题。
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号