摘要:本文介绍了GPT模型的基本概念,讲解了GPT模型所需要的基本知识,包括词嵌入,自注意力机制,Transformer框架和Softmax函数,同时还详细阐述了GPT模型的数学原理和实现过程。对于人们了解并掌握预训练模型具有较好的帮助作用。

一、预训练模型简介

预训练模型是一个通过大量数据上进行训练并被保存下来的网络。可以将其通俗的理解为前人为了解决类似问题所创造出来的一个模型,有了前人的模型,当我们遇到新的问题时,便不再需要从零开始训练新模型,而可以直接用这个模型入手,进行简单的学习便可解决该新问题。
比如说一个会开手动档汽车的人去开自动档汽车的时候并不需要从头学起,只需要将他在操作手动档汽车时形成的经验,经过微调应用到自动档汽车。

1、迁移学习与预训练模型

预训练模型是迁移学习的一种应用。当神经网络在用数据训练模型时,在数据中获取到的信息,其本质就是多层网络一个的权重。将权重提取出来,迁移到其它网络中,其它的网络便学来了这个网络的特征和其所拥有的知识。

2、预训练模型训练过程

如何得到和使用预训练模型,下面以自然语言处理领域为例,对其进行解释。
(1)用词嵌入方法将所要处理的数据的字符串转换成数字;
(2)使用基于Transformers框架的方法对词向量进行训练;
(3)将训练得到的网络进行微调,即针对具体的任务进行修正。
下面将依次对训练过程中提到的几个概念进行解释。

二、词嵌入

深度学习的本质是对数字的学习,机器无法直接处理文本字符串,这要求我们先将文本转换为数字,然后继续执行后续的任务。这里介绍两种词嵌入的方法

1、独热嵌入(one-hot embedding)

根据所要处理的文本字符串信息创建一个词库表,从0开始为词库中的每一个词依次编号。比如词库中有1000个词,“我”这个词在词库中的位置是第123个,那么“我”用独热向量便表示为一个1×1000维的向量,其中第123维是1,其余位置均为0。
这是自然语言处理算法中最常见的第一步,其能够清晰的表示每一个词。但其缺点也显而易见,一是若用该方法表示一段文本,矩阵会非常稀疏,二是随着词量的增加,会造成维度爆炸问题,三是这种方法无法表示不同词之间的相互关系,存在语义鸿沟。

2、词向量嵌入(Word2Vec Embedding)

词向量嵌入是用一个一层的线性神经网络将N维独热形式的稀疏向量映射为一个M维的稠密向量的过程。
其有两种语言模型
Skip-gram模型:用一个词作为输入,预测它周围的上下文。
CBOW模型:用一个词的上下文作为输入,来预测该词语本身。
在这里插入图片描述

以CBOW模型为例,假设单词向量空间的维度为V(即整个词库大小为V),上下文单词窗口的大小为C,最终词向量的维度大小为N。一般来说V远远大于N。
下面详细介绍其计算过程如下:

  1. 输入层(Input layer)是某词语(Word)的C个上下文单词的独热向量,每个向量的大小均为1*V。
  2. 权值共享矩阵W的大小为V∗N,用随机数对其进行初始化。
  3. 将C个1*V大小的独热向量分别跟同一个大小为V∗N的权值共享矩阵W相乘,得到的是C个1∗N大小的隐层向量(hidden
    layer)。
  4. C个1∗N 大小的hidden layer取平均,得到一个1∗N大小的向量。
  5. 输出权重矩阵W‘的大小为N∗V,用随机数对其进行初始化。
  6. 将得到的隐层向量1∗N与W’相乘(矩阵W‘是矩阵W的转置),并且用softmax处理,得到1∗V的向量,此向量的每一维代表词库中的一个单词。概率中最大的index所代表的单词为预测出的中间词。
  7. 与词语(Word)中的独热向量比较,求loss function的极小值。

Word2Vec的最终目的,不是要把这个一层的网络训练得多么完美,而是得到模型训练完后的副产物——模型参数(即矩阵W),从而得到每一个独热向量在N维空间中的表示。

三、自注意力机制

注意力是我们大脑处理信息的一种非常有效的方法。当过载信息映入眼帘时,我们的大脑会把注意力放在主要的信息上,这就是大脑的注意力机制。比如当读过一本书后,我们会记得这本书大概讲了什么,却很难记全这本书的全部内容,这就是注意力机制发挥的作用。
注意力机制的本质是从大量信息中筛选出少量重要信息,并聚焦在这些重要信息上,忽略大多数不重要的信息。自注意力机制是注意力机制的变体,减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。比如对于一句话“The animal didn’t cross the street because is was too tired.”中的单词“it”指的是animal还是street对机器来说并不一件容易的事,这时就可以利用自注意力机制进行判别。
自注意力机制的计算步骤如下:

  1. 将句子中的每个词转换为词向量X;
  2. 用随机分布初始化三个矩阵WQ,QK,WV;
  3. 求出每个词向量所对应的q=WQX,k=WKX,v=WV*V;用Q,K,V表示由所有词向量所对应的q,k,v组成的矩阵
  4. 计算某一个词向量的输出:
    4.1)用该词向量注意力得分score=q*K’;
    4.2)对score进行归一化处理score=softmax(score);
    4.3)求加权值:用score的第i个值点乘V的第i行;
    4.4)将所有的加权值相加,该值即为该词向量对应的输出;
  5. 用4的方法求出每一个词向量的输出Z。

四、Transformer框架

与传统的深度学习不同,Transformer抛弃了传统的卷积神经网络(CNN)和循环神经网络(RNN),其整个网络结构全部由自注意力机制组成。
Transformer由多个Encoder块和Decoder块组成。Encoder块由一个多头自注意力机制和一个前向神经网络组成;Decoder块有两个多头自注意力机制和一个前向神经网络组成,第一个多头自注意力机制采用了Masked操作,第二个多头自注意力机制的k和v使用Encoder块最后输出的编码信息矩阵WKC、WVC得到,q使用WQ*上层输出求出。
以文本翻译为例解释Transformer大体的工作流程如下:

  1. 获取输入的表示向量X,X由单词的词向量嵌入(Word2Vec Embedding)和位置嵌入(Position Embedding)相加得到;(X是n*d维矩阵,n是句子中单词的个数,d是每个单词用向量表示后的维度)
  2. 将X传入Encoder,经过多个Encoder块后得到输出的编码矩阵C;
  3. 将C传入Decoder中,Decoder会根据翻译过的前i-1个单词来翻译第i个单词。

在这里插入图片描述

下面详细解释其各部分细节

1、单词的向量化表示

单词向量的词向量嵌入(Word2Vec Embedding)和位置嵌入(Position Embedding,简称PE)相加得到。Word2Vec已在前文介绍,它的问题在于只记录了每一个单词的词信息,而没有记录这些单词在句子中出现的位置信息,我们应该记录下单词在句子中的位置信息,这就是位置嵌入的意义。
在Transformer中,选用了如下公式来表示PE:
在这里插入图片描述
其中,pos表示单词在句子中的位置,d表示PE的维度(与word2Vec Embedding维度一致),2i表示偶数的维度,2i+1表示奇数的维度。

2、多头自注意力机制(Multi-Head self Attention)

上图中的每一个self-attention都代表一个多头自注意力机制,它是多个自注意力机制的集成,为每个“头”(注意力机制)保持独立的WQ、WK、WV矩阵,从而产生不同的q、k、v。
它扩展了自注意力机制的性能,比如当我们用多头注意力机制处理“The animal didn’t cross the street because is was too tired.”时,一个“头”将“it”指向了animal,另一个头则将“it”执行了tired。从某种意义上说,模型对“it”一词的表达在某种程度上是“animal”和“tired”的代表。
在这里插入图片描述

其具体的操作流程如下:

  1. 将数据X分别输入到n个自注意力机制中,从而得到n个特征矩阵Z;
  2. 将n个特征矩阵Z拼接(Concat)在一起;
  3. 将拼接后的特征矩阵传入一个一层的全连接网络后得到输出。
    在这里插入图片描述

3、掩模自注意力机制(Masked Self-Attention)

之所以采用 Masked 操作,因为在翻译的过程中是顺序翻译的,即翻译完第 i 个单词,才可以翻译第 i+1 个单词。通过 Masked 操作可以防止第 i 个单词知道 i+1 个单词之后的信息。
与自注意力机制不同的是,在计算词向量的注意力得分矩阵S=QK’ 时,令
在这里插入图片描述

式中的是一个方阵,其主对角线及以下位置的元素为1,其余位置元素为0:
在这里插入图片描述

4、前向神经网络(Feed Forward)

Transformer中的前向神经网络层是一个两层的全连接网络。其第一层使用激活函数Relu,第二次不使用激活函数,最终得到的前向神经网络公示如下:
在这里插入图片描述

X表示输入,Feed Forward最终得到的输出矩阵的维度与X一致。

五、经典预训练模型——GPT

Transformer模型由编码器(encoder)和解码器(decoder)组成,之所以这样设计是因为其能够处理机器翻译,编码-解码架构是过去在机器翻译取得成功的一大原因。
后来的很多研究发现,架构要么只用编码器,要么只用解码器,并将堆栈堆得尽可能高,输入大量文本进行训练,同样能获得很多的训练效果。
最具代表性的是基于Transformer框架两个最主要的预训练模型,一个是GPT模型(Generative Pre-Training),另一个是BERT模型(Bidirectional Encoder Representations from Transformers)。GPT是通过Transformer解码器模块构建的,BERT是通过Transformer的编码器构建的。本节主要对GPT模型展开介绍。

1、仅含解码器的模块

2018年,Peter J. Liu等提出了一种能够生成语言建模的Transformer模型,该模型摒弃了Transformer的编码器,由6个Transformer的解码器组建构成。
在这里插入图片描述

可以看到,它和原始的 Decoder 模块非常类似,也使用了掩模的自注意力机制,只是它们去掉了第二个 Self Attention 层。

2、GPT模型

GPT的就是仅含解码器的模块,其总体结构分为两个部分,一是无监督的预训练阶段,二是有监督的下游任务精调阶段。

(1)无监督预训练阶段(Unsupervised pre-training)

GPT预训练阶段是根据语言窗口内容预测当前内容。其利用常规语言建模的方法优化给定序列的最大似然估计:
在这里插入图片描述

式中,k表示语言窗口大小,θ表示神经网络的参数,使用随机梯度下降法来优化该似然函数的参数。
对于某窗口词序列, x ′ = x − k . . . x − 1 x'=x_{-k}...x_{-1} x=xk...x1在这里插入图片描述
e x ′ ∊ R k ∗ ∣ V ∣ e_{x'}∊R^{k*|V|} exRkV表示词序列中各个词汇的独热向量所组成的矩阵; W e W^e We表示词向量矩阵; W P W^P WP表示位置向量;L表示Transformer的总层数。P(x)为输出,是每个词被预测到的概率,然后利用最大似然估计,构造损失函数,进而优化模型的参数。

(2)有监督的微调阶段(Supervised fine-tuning)

该阶段是将上阶段从开发领域学习到的知识迁移到下游任务,从而改善低资源任务,其通常是由标注数据进行训练和优化。
假设下游任务的标注数据集为C,每个样本的输入为 x = x 1 . . . x n x=x_1...x_n x=x1...xn,对应的标签为y。
1)将C中的每一个x输入到预训练模型中,获得(5.3)式所对应的 h [ L ] h^{[L]} h[L];
2)将 h [ L ] h^{[L]} h[L]输入一个一层的全连接网络,从而预测最终的标签:
在这里插入图片描述
式中的表示这个一层的全连接网络的权重。
最终,通过优化以下损失函数来得到最终的权重矩阵 W y W_y Wy
在这里插入图片描述

六、预训练模型的一个Trick——Softmax函数

Softmax函数,归一化指数函数,是当前深度学习研究中广泛使用在深度网络有监督学习部分的分类器,经常与交叉熵损失函数联合使用。具体表述如下:
假设由数组 V V V V i V_i Vi表示 V V V中的第 i i i个元素,那么这个元素的softmax值为:
在这里插入图片描述
Softmax函数可将数组的各值映射到区间[0,1]上,且累和为1。
我们之所以使用Softmax函数是因为其在求导表换上的优越性。对于一个输入为 A = [ a 1 , . . . , a n ] A=[a_1,...,a_n] A=[a1,...,an],权重矩阵为W,输出为 B = [ b 1 , . . . , b n ] B=[b_1,...,b_n] B=[b1,...,bn]的全连接神经网络,
在这里插入图片描述
对输出B使用Softmax函数进行处理后可得 S i = e b i ∑ j e b j S_i=\frac{e^{bi}}{∑_je^{bj}} Si=jebjebi
使用交叉熵求其损失函数
在这里插入图片描述
式中 y i y_i yi代表真实值, s i s_i si代表Softmax函数求出的值。
对于多任务分类问题来讲,在真实值中,只存在一个预测的结果,即只有一个 y i y_i yi的值对应为1,其它值都为0,所有损失函数Loss虽有求和符,实则只有一个值。
如果真实值的第k个值为1,其余值为0,那么
在这里插入图片描述
梯度下降法求矩阵的最优解
在这里插入图片描述
已知 S i = e b i ∑ j e b j S_i=\frac{e^{bi}}{∑_je^{bj}} Si=jebjebi,那么可知
在这里插入图片描述
将(6.6)式代入(6.5)式可得
在这里插入图片描述

七、总结

本文介绍了GPT模型的基本概念,以及GPT模型所需要的基本知识,主要包括词嵌入,自注意力机制,Transformer框架和预训练过程中常用的一个技巧Softmax函数,并在数学原理和实现过程上详细解释了一个经典的预训练模型——GPT模型。
本文是一篇介绍性和解释性的文章,对于初学者了解预训练模型并掌握其基本原理和技术能够提供较好的帮助。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐