《大语言模型》课件 05Transformers模型、06预训练语言模型_第1页
《大语言模型》课件 05Transformers模型、06预训练语言模型_第2页
《大语言模型》课件 05Transformers模型、06预训练语言模型_第3页
《大语言模型》课件 05Transformers模型、06预训练语言模型_第4页
《大语言模型》课件 05Transformers模型、06预训练语言模型_第5页
已阅读5页,还剩120页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章Transformer模型本章主要内容:1.Transformer术语与特点2.Transformer模型结构3.Transformer模型推理与训练4.Transformer-XL模型

5.1Transformer术语与特点Transformer模型由Google在2017年提出,它在NLP等领域取得了显著的成功,该模型的核心技术是自注意力(Self-Attention)机制和编码器-解码器(Encoder-Decoder)结构。Transformer是一种基于自注意力机制的深度学习模型,由Google的研究者在2017年为了解决机器翻译问题而提出,但后来被广泛应用于各种自然语言处理任务,以及需要处理序列数据的领域。5.1.1Transformer术语Transformer模型在处理序列数据时,能够自动捕捉序列内不同位置之间的依赖关系,而无需依赖于序列的顺序。下述几个术语紧密相关且共同构成了Transformer架构模型的基础。1.TokenToken是文本序列的基本单元。当我们将一段文本输入到模型时,首先通过分词器(tokenizer)将其分割成一个个离散的单元,每个单元就是一个token。这可以是一个单词、子词或者字符,具体选择取决于模型的设计。2.向量表示为了使机器学习模型能够理解和处理文本信息,需要将这些token转化为数值形式。这一过程通常称为词嵌入或编码,其中每个token被映射为一个固定维度的向量。这个向量不仅包含了该token本身的语义信息,还包含了上下文的相关信息。。3.上下文变量表示在自回归语言模型中,每个token的表示不仅要考虑它自身的嵌入,还要结合其在整个序列中的上下文信息。Transformer模型利用多头注意力机制,使得每个位置的token能够基于所有其他位置的token计算出一个加权求和的上下文向量表示。这个表示既包含了当前token自身的特征,也融入了整个序列的全局依赖关系。4.注意力输出在Transformer结构中,注意力机制是核心组件之一,它负责计算上下文向量表示。通过自注意力机制计算,模型为序列中的每个位置生成一个上下文相关的输出向量,即为“注意力输出”。每个位置的注意力输出向量都是对其它所有位置的token进行加权组合后得到的结果,权重系数反映了不同位置之间的关联程度。

5.1.2Transformer特点1.自注意力机制:它允许模型在进行编码和解码时,能够考虑到序列中的其他位置的信息,而不仅仅是当前位置。这种机制有助于捕捉序列中的长距离依赖关系。2.多头注意力:将自注意力拆分为多个头,每个头从不同的表示空间中学习信息,然后将这些信息综合起来,得到更丰富的表示。3.位置编码:由于Transformer模型本身并不具有处理序列位置信息的能力,位置编码被引入以向模型提供序列中单词的位置信息。4.残差连接和归一化:每个编码器和解码器层都使用了残差连接和层归一化技术,这有助于训练深层网络。5.全连接的前馈网络:在注意力机制之后,每个位置的输出将被传递到一个全连接的前馈网络中。6.堆叠的编码器和解码器:Transformer模型通常由多个编码器和解码器层堆叠而成,增强了模型的表达能力。7.文本数据到数学向量形式转换Transformer模型接受的输入是向量,将文本数据转换为机器可理解和运算的数学向量,词嵌入是一种将单词映射到固定长度连续向量空间中的技术。5.2Transformer模型结构Transform模型主要由编码器和解码器两部分组成,编码器将输入序列映射到隐藏层,然后解码器将再将隐藏层映射为输出序列。Transform模型的序列到序列转换基本过程如下: (1)将自然语言序列输入到编码器;

(2)将编码器的输出映射到隐藏层,然后再输入到解码器;

(3)启动解码器;

(4)得到一个字;

(5)将得到的第一个字再回输入到解码器,从解码器得到第二个字;

(6)重复(4)~(6)过程,直到解码器输出终止符,完成新序列生成。5.2.1Transformer架构Transformer模型架构由6个Nx结构的编码器和解码器的图层组成,如图5-1所示。每个Nx又分别称为编码器块、解码器块,其中左侧为编码器块,右侧为解码器块。粗框中的部分为多头注意力机制,可以看到编码器块包含一个多头注意力,而解码器块包含两个多头注意力,比编码器块多了一个掩码多头注意力。每个多头注意力上方还包括一个Add&Norm层,Add表示残差连接用于防止网络退化,Norm表示图层归一化,用于对每一层的激活值进行归一化。5.2.2位置向量位置编码通常是通过在输入的词嵌入向量中添加特定的位置信息来实现的,每个单词的词嵌入向量不仅包含单词的语义信息,还包含了关于单词在序列中位置信息。位置编码的引入有助于Transformer模型更好地处理序列数据,特别是在处理长序列时,位置编码可以帮助模型区分不同位置的单词,从而提高模型的泛化能力。

1.问题的提出 (1)对于任何一门语言,单词在句子中的位置以及排列顺序非常重要,它们不仅是一个句子的语法结构的组成部分,更是表达语义的重要概念。一个单词在句子的位置或排列顺序不同,可能导致整个句子的语义就发生了偏差。 (2)Transformer模型抛弃了循环神经网作为序列学习的基本模型。循环神经网络本身就是一种顺序结构,其本身就包含了词在序列中的位置信息。当抛弃循环神经网络结构,完全采用注意力机制的网络取而代之,这些就会丢失了词序信息,模型就无办法知道每个词在句子中的相对和绝对的位置信息。因此,有必要把词序信号加到词向量上,帮助模型学习这些信息,位置编码就是用来解决这种问题的方法。.

2.位置编码的要求位置编码是一种用词的位置信息对序列中的每个词进行二次表示的方法。因为Transformer模型需要主动地将词序信息输入模型,但是,模型的原始输入不含有词序信息,位置编码需要将词序信息和词向量结合起来形成一种新的表示输入给模型,这样模型就可以具备了学习词序信息的能力。 一种方法是给每个时间步分配一个[0,1]之间的数值,其中,第一个词为0,最后一个词为1。这种方法虽然简单,但也带来很多问题。其中一个问题就是无法知道在一个特定区间范围内到底存在多少个单词,所以不同句子之间的时间步差值没有任何的意义。另一种方法就是线性分配一个数值给每个时间步。也就是,1分配给第一个词,2分配会遇到一些比训练中的所有句子都要长的句子。此外,数据集中不一定在所有数值上都包含相对应长度的句子,也就是说模型很有可能没有看到过任何一个这样长度的样本句子,这将严重影响模型的泛化能力。因此,一种好的位置编码方案需要满足如下要求。 (1)能为每个时间步输出一个独一无二的编码; (2)不同长度的句子之间,任何两个时间步之间的距离应该保持一致; (3)模型应该能毫不费力地泛化到更长的句子,它的值应该是有界的; (4)它必须是确定性的。 .

3.Transformer模型位置编码方法 (1)位置编码 位置向量的引入是通过将位置编码与输入序列中的每个元素相加来实现的。位置编码可以基于不同的技术,其中最常用的是使用正弦和余弦函数来编码位置信息。位置编码根据元素的索引(位置)通过正弦和余弦函数计算出对应的位置向量,然后将这个位置向量与元素的嵌入向量相加,从而得到一个新的向量,这个新向量包含了位置信息。 位置编码的计算公式通常如下: 如果i是偶数,使用正弦函数: 位置编码(pos,i)=sin(pos/10000i/dmodel)

如果i是奇数,使用余弦函数: 位置编码(pos,i)=cos(pos/10000i-1/dmodel​)其中,pos表示位置索引,i表示维度索引,dmodel​是指模型的维度。这样的编码方式可以确保模型能够捕捉到不同尺度的位置信息。 将位置向量添加到自注意力机制中,可以使得模型在处理序列数据时考虑到元素的位置,这非常有帮助于序列建模任务(如机器翻译、文本摘要等)。这也是Transformer模型中的一个关键组成部分,使得模型在处理长距离依赖时表现出色。.(2)添加位置向量 如图5-2所示,对于n个单词的词向量(x1,x2,…,xn),添加相对应的位置向量(p1,p2,…,pn),得到:(x1‘,x2‘,…,xn‘)=(x1,x2,…,xn)+(p1,p2,…,pn)位置向量与词向量相加的运算是简单的逐元素加法运算。在Transformer模型中,每个词都有一个固定的词向量,表示该词的语义信息。同时,每个词在序列中的位置也会有一个对应的位置向量,表示该词的位置信息。将这两个向量进行逐元素相加,得到的合成向量同时包含词的语义信息和位置信息。 如果词向量的维度是dmodel,那么对于序列中的第i个词,其词向量可以表示为一个维度为dmodel的向量词嵌入[i],而对应的位置向量可以表示为位置编码[i]。将这两个向量相加,得到的结果[i]将作为Transformer编码器或解码器的输入:输入嵌入[i]=词嵌入[i]+位置嵌入[i]这里的加法是逐元素的,即对应位置上的元素相加。如果dmodel是512,那么词嵌入[i]和位置编码[i]都是长度为512的向量,它们的每个对应位置的元素相加,形成一个新的长度为512的向量,作为输入到Transformer模型中的表示。这种相加操作使得模型能够同时考虑到词的语义和上下文中的位置信息,从而更好地理解和处理自然语言序列。5.2.3编码器Transformer编码器由6个编码器块组成,1.编码器块结构一个Transformer编码器块主要包括以下几个部分:·多头自注意力(Multi-HeadSelf-Attention)机制·位置编码(PositionalEncoding)·前馈神经网络(FeedForwardNeuralNetwork)·层归一化(LayerNormalization)·残差连接(ResidualConnection)其中前馈神经网络:每个位置上的数据都独立地通过同一个前馈神经网络。这个网络通常由两个线性层组成,中间有一个ReLU激活函数或其他非线性激活函数。同样,前馈神经网络的输出也会通过残差连接和层归一化。编码器块的最终输出是经过多层这样的处理后的数据,它包含了输入序列的编码信息,可以用于后续的任务,如序列分类、机器翻译等。

Transformer编码器块的结构如图5-3所示。.(1)多头自注意力子层 编码器块通常包含两个主要子层:多头自注意力子层和前馈神经网络子层。①多头自注意力子层计算多头自注意力是Transformer编码器块中的核心部分,它由以下几部分组成:·线性层:每个输入向量通过三个不同的线性层分别生成查询(Query,Q)、键(Key,K)和值(Value,V)向量。这些线性层的权重是共享的,但是参数是不同的。·多头分割:将得到的Q、K、V向量分割成多个头,每个头有自己的Q、K、V向量集。这些头的数量是超参数,通常设置为8。·缩放点积注意力:每个头使用缩放点积注意力机制计算注意力得分。具体来说,每个头的Q与所有K进行点积运算,然后除以一个常数(通常是键向量维度的平方根),最后通过softmax函数得到注意力权重。·输出合并:每个头将得到的注意力权重与对应的V向量相乘,然后将所有头的输出拼接起来。·最后的线性层:拼接后的输出通过一个线性层进行转换,得到最终的输出。②线性层作用·特征整合:在多头自注意力机制中,输入序列被分割成多个头,每个头关注输入序列的不同部分。线性层的作用是将这些不同头捕获的信息整合起来,形成一个统一的全局表示。.·维度调整:虽然多头自注意力的输出在拼接后保持了输入的特征维度dmodel​,但是线性层提供了调整输出维度的灵活性。如果需要,可以增加或减少特征空间的维度。·非线性变换:尽管线性层本身是线性的,但在实践中,它通常与一个非线性激活函数(如ReLU或LayerNormalization)结合使用,从而引入非线性,使得模型能够捕捉更复杂的模式。·参数共享:在多头自注意力机制中,每个头都有可能学习到不同的表示。线性层通过共享参数,确保所有头的信息在整合时保持一致性和平衡。·减少过拟合:线性层通过引入额外的参数,增加了模型的复杂度,但同时也有助于模型更好地泛化到训练数据之外的数据。·实现复杂的函数映射:线性层可以看作是在学习一个从多头自注意力输出到最终输出的复杂函数映射,这有助于模型在后续任务(如序列标注、分类或语言建模)中取得更好的性能。·标准化:在某些实现中,线性层之后会跟一个层归一化步骤,这有助于稳定训练过程并加速收敛。归纳上述内容,线性层在Transformer的多头自注意力子层中起到了整合不同头的信息、调整特征维度、引入非线性、实现复杂函数映射以及标准化等重要作用,是模型能够有效学习序列表示的关键组成部分。.③推理过程多头自注意力子层的推理过程如下:·线性变换:假设输入序列的嵌入向量是X,其维度为[batch_size,seq_len,d_model],通过三个线性层分别得到Q、K、V向量。线性变换后的Q、K、V向量的维度也是

[batch_size,seq_len,d_model]。·多头分割:将Q、K、V向量分割成多个头,每个头得到一个子集。如果总维度是d_model,每个头得到的维度将是d_model/num_heads。·计算注意力:对于每个头,计算Q与K的点积,然后除以

sqrt(d_model/num_heads)

进行缩放,以避免在深度网络中梯度消失或爆炸。应用softmax函数到缩放后的点积上,得到每个位置的注意力权重。使用这些权重对V向量进行加权求和,得到每个头的输出。·多头合并:将所有头的输出拼接起来,形成形状为

[batch_size,seq_len,d_model]

的向量。·最后的线性变换:将拼接后的向量通过一个线性层进行变换,得到多头自注意力的最终输出。·残差连接和层归一化:将多头自注意力的输出与输入序列的原始向量相加,实现残差连接。对相加后的结果进行层归一化。.(2)前馈神经网络子层前馈神经网络子层的结构及其推理过程如下。①前馈神经网络结构前馈神经网络在Transformer编码器块中的结构相对简单,通常由以下几部分组成:·两个线性层:第一个线性层将输入数据从维度d_model

转换到维度d_ff(通常是d_model的4倍),第二个线性层将数据从维度d_ff转换回d_model。·激活函数:在两个线性层之间通常会添加一个非线性激活函数,如ReLU(RectifiedLinearUnit)。前馈神经网络的各神经元分层排列,每个神经元只与前一层的神经元相连,接收前一层的输出,并输出给下一层.同一层神经元无连接、各层间无反馈。多层前馈神经网络结构如图5-4所示。在Transformer模型中,前馈网络子层是一个两层的全连接层,第一层的激活函数为Relu,第二层无激活函数,其计算公式如下。 .②推理过程前馈神经网络子层的推理过程如下:·第一个线性变换:输入序列经过第一个线性层,其权重矩阵将输入数据的维度从d_model

变换到d_ff。如果输入序列的向量表示是X,其维度为[batch_size,seq_len,d_model],那么经过第一个线性层后的输出维度为[batch_size,seq_len,d_ff]。·激活函数:在第一个线性层的输出上应用ReLU激活函数,即对于每个元素x,如果x>0则输出x,否则输出0。·第二个线性变换:将激活函数的输出作为第二个线性层的输入,其权重矩阵将数据的维度从d_ff

变换回d_model,输出维度再次变为[batch_size,seq_len,d_model]。·残差连接和层归一化:将前馈神经网络的输出与原始输入X相加,实现残差连接。对相加后的结果进行层归一化。.2.Transformer编码器块推理过程结合Transformer编码器块的结构,编码器块的推理过程如下。

Transformer编码器块中的多头自注意力子层是Transformer模型中的一个关键组件,它允许模型在处理输入序列时同时关注不同位置的信息。这里位置指的是输入序列中的各个元素。考虑到多头自注意力,Transformer编码器块的推理过程如下。 (1)线性变换:首先,输入序列(例如,词向量加上位置向量)通过三个不同的线性变换(权重矩阵)分别得到查询(Query,Q)、键(Key,K)和值(Value,V)三个向量。这些向量是原始向量的线性投影,每个头都有自己的一组权重矩阵。 (2)头分割:接下来,这些查询、键和值向量会被分割成多个头。如果总共有h个头,那么每个头看到的维度将是原始维度dmodel除以h。例如,如果dmodel=512,并且有8个头,那么每个头的维度将是64。 (3)自注意力:对于每个头,使用缩放点积注意力机制来计算注意力得分。具体地说,对于序列中的每个查询向量Q,计算它与所有键向量K的点积,然后除以键向量维度的平方根,得到注意力得分。这些得分随后会通过Softmax函数转换为概率分布,表示模型应该给予序列中每个位置的注意力权重。 (4)加权求和:将得到的概率分布与值向量V相乘,得到加权值向量。然后,对所有头进行并行处理,将它们的结果拼接起来。 (5)线性变换和归一化:拼接后的向量再次通过一个线性变换,并且通常还会接一个归一化层,如层归一化(LayerNormalization)。这个线性变换的目的是将多头注意力输出的维度重新转换为dmodel,以便与模型的其它部分兼容。 (6)残差连接:最后,将这个线性变换和归一化后的输出与输入序列的原始嵌入进行残差连接(ResidualConnection),并应用另一个层归一化层。残差连接有助于避免梯度消失问题,并允许模型在训练过程中更容易地学习身份映射。.3.Transformer编码器输出向量基本格式

Transformer编码器输出的向量通常是固定长度的向量,这个长度是由模型设计时定义的内部表示维度决定的。以下是Transformer编码器输出向量的基本格式。

1.维度:编码器输出的是一个维度为D的向量,其中D是模型中定义的嵌入维度(比如768或1024)。

2.序列长度:对于序列数据,编码器的输出是一系列向量,每个向量对应输入序列中的一个元素(比如一个词或一个标记)。如果输入序列长度为N,则输出也是一个维度为N×D的矩阵。

3.位置:尽管Transformer模型本身位置不变,但是通过位置编码(PositionalEncoding),模型能够理解输入序列中元素的顺序。因此,输出的每个向量都包含了对应元素的位置信息。

4.上下文表示:每个输出向量都是基于整个输入序列上下文的表示,这意味着它不仅包含了对该位置原始元素的信息,还包含了模型对整个序列的理解。具体来说,编码器输出的矩阵可以表示为:这里,vi,j

表示第i

个元素在嵌入维度j上的值。在实际应用中,通常对这个矩阵进行进一步的处理,例如:

·池化操作:使用池化操作(如平均池化或最大池化)来得到一个固定长度的向量,这可以用于分类任务。

·注意力加权:使用注意力机制来强调序列中的某些部分,这在某些任务中非常有用。

·特定位置的向量:在某些任务中,可能只需要序列中特定位置的输出向量,例如在问答任务中,只关注与问题相关的输入部分的表示。5.2.4解码器Transformer模型解码器由6个解码器块组成 。

1.解码器块结构

Transformer解码器块包含下述3个子层:

·掩码多头自注意力子层

·编码-解码注意力子层

·前馈网络子层各个子层之后连接了残差和层归一化层,

解码器块结构如图5-5所示。(1)掩码多头自注意力子层①掩码多头自注意力子层计算在Transformer解码器块中,掩码多头自注意力子层是为了确保在解码过程中,模型不会“看到”未来的信息,即不会对尚未生成的输出序列部分进行注意力计算。这种掩码机制在机器翻译、文本生成等序列生成任务中尤为重要。掩码多头自注意力子层计算如下。对于某一个目标单词,只与之前单词做注意力计算,这就需要将目标单词后面的单词掩盖。掩码多头自注意力子层的主要作用是在处理序列数据时,从左到右的顺序确保模型在预测某个位置token时只能看到该位置之前的信息,看不到该位置之后的信息。在自注意力机制中,如果每个输出位置都关注所有输入位置,这可能导致模型在训练时泄露未来的信息。为了防止这种情况发生,将掩码应用于注意力分数,可以确保了在计算任何给定位置的表示时,只能考虑到该位置之前的序列信息。.掩码多头自注意力子层推理过程如下:

·线性变换:将输入序列线性变换映射成三组向量,每组向量对应于注意力机制中的查询(Q)、键(K)和值(V)。

·头分割:将上述的Q、K、V向量分割成多个头,每个头关注不同的信息。

·计算自注意力分数:对于每个头,计算查询和键之间的点积,这代表着不同位置之间的相关性。位置指的是输入序列中的各个元素。

·应用掩码:在计算注意力分数之后,应用掩码来确保在softmax步骤之前,所有未来的位置(即序列中当前位置右边的位置)都被掩盖,其分数被设置为负无穷大或一个非常小的值,这样在softmax之后这些位置的权重会接近零。 归纳掩码多头自注意力子层的推理过程如下:·生成查询、键和值:对于输入序列X,计算Q=XWQ,K=XWK,V=XWV。·应用掩码:创建一个掩码矩阵M,其中Mi,j的值为0或-inf(无穷小),取决于i和j的关系。如果i≤j,则Mi,j=0;否则Mi,j=−inf。将掩码矩阵M应用QKT的结果上,使得在计算softmax之前,未来的位置被掩码掉。−inf”代表负无穷大。·计算注意力:使用掩码后的QKT计算注意力权重:α=softmax((QKT+M)/sqr(dk))使用α和V计算每个头的输出:headi=αV。·拼接和线性变换:将所有头的输出拼接起来:Z=Concat(head1,...,headh)。通过一个线性层WO转换拼接后的输出:ZWO。 通过这种方式,掩码多头自注意力机制既能够捕捉到序列内部的长期依赖关系,又能够保持生成过程的自然顺序,是序列生成模型不可或缺少的一部分。.(2)编码-解码注意力子层

Transformer解码器块中的编码-解码注意力子层允许解码器中的每个位置关注到编码器输出的所有位置。这对于序列到序列的任务非常重要,因为它使得解码器能够根据编码器的上下文来生成输出序列。编码-解码注意力子层的结构和推理流程如下:①结构·线性变换:解码器中的每个头会分别对解码器的输入序列(即前一层的输出)和编码器的输出序列进行线性变换,以生成查询(Query,Q)和键(Key,K)。对于解码器中的每一个头h,这些变换分别由权重WhQ和WhK实现。·值(Value):编码器的输出序列同样会经过线性变换以生成值(Value,V)。这个变换由权重WhV实现。·缩放点积注意力:使用解码器的查询Q和编码器的键K计算点积,并通过缩放因子进行缩放。应用softmax函数进行归一化,生成注意力权重α。·输出:使用生成的注意力权重α和编码器的值V计算输出,即加权求和。每个头的输出随后被拼接,并通过一个线性层进行转换。.②推理过程·生成查询、键和值:对于解码器的输入序列X′(前一层的输出),计算Q=X′WQ。对于编码器的输出序列X,计算K=XWK和V=XWV。·计算注意力:使用Q和K计算注意力权重:

使用α和V计算每个头的输出:headi​=αV。·拼接和线性变换:将所有头的输出拼接起来:Z=Concat(head1​,...,headh​)。通过一个线性层WO转换拼接后的输出:Y=ZWO。(3)编码-解码注意力子层与掩码多头自注意力子层比较解码器块的编码-解码注意力子层与掩码多头自注意力子层区别不大,主要的变化是自注意力的K,V矩阵不是使用上一个解码器块的输出计算,而是使用编码器的编码信息矩阵C来计算。根据编码器的输出C计算得到K,V,根据上一个解码器块的输出Z,计算Q(如果是第一个解码器块,则使用输入矩阵X进行计算),后续的计算方法与之前描述的一致。这样设计好处是解码时,每一位单词都可以利用到编码器所有单词的信息,这些信息无需遮挡。(4)前馈网与残差连接+层归一化在解码器中的前馈神经网络与残差连接+层归一化与编码器中的相同。。(5)Softmax

预测输出单词解码器块最后的部分是利用Softmax

预测下一个单词,在之前的网络层可以得到一个最终的输出Z,因为遮挡存在,使得单词0的输出Z0只包含单词0的信息,单词4的输出Z4包含单词0、单词1、单词2、单词3、单词4的信息,如图5-7所示。Softmax

根据输出矩阵的每一行预测下一个单词,如图5-8所示。。对于某一个目标单词,将值与源端单词的隐层状态做注意力计算。编码-解码注意力子层能够在解码过程中利用源语言信息。具体做法是:注意力计算中查询向量q来自目标端单词的隐层状态,而键向量k和值向量v来自源端隐层状态 (6)编码器块与解码器块之间连接 在Transformer模型中,编码器用于处理输入序列,而解码器用于生成输出序列。编码器块与解码器块之间连接如5-9所示。解码器块的编码-解码注意力子层接受编码器的隐含层的输出。.编码器和解码器都是由多个相同的层堆叠而成的,编码器每个层通常包含一个多头自注意力子层和一个前馈网络子层,编码器和解码器之间的连接是通过注意力机制实现的。更具体来说,解码器中的每个层都有一个编码器-解码器注意力(Encoder-DecoderAttention)的子层,这个子层负责将编码器的输出与解码器当前层的输入结合起来。这样,解码器在生成每个输出时都能够考虑到整个输入序列的信息。编码器和解码器之间连接的过程如下所述。①编码器输出:编码器处理输入序列并产生一个输出,这个输出是对输入序列的编码表示。每个位置的输出是一个向量,它包含了整个输入序列在该位置上下文的信息。②解码器自注意力:在解码器的每个层中,首先会进行自注意力计算,这个自注意力是掩码的,确保解码器在生成某个位置的输出时只能看到该位置之前的输出。③编码器-解码器注意力:接下来,解码器层中的编码器-解码器注意力子层将使用解码器当前层的输出(查询Q)和编码器的输出(键K和值V)来计算注意力分数。在这个过程中,允许解码器在每个生成步骤都关注输入序列的适当部分。④加权求和:通过注意力分数对编码器的输出值V进行加权求和,得到加权上下文向量。⑤拼接与线性变换:将加权上下文向量与解码器自注意力的输出拼接起来,然后通过一个线性变换,将其转换为最终的输出。⑥前馈网络:解码器层的输出随后会传递到前馈网络子层,进行进一步的加工。通过这种方式,解码器能够利用编码器提供的输入序列的全面信息来生成输出序列。这种结构使得Transformer模型在机器翻译、文本摘要和其他序列到序列的任务中表现出色。.6.解码器推理完成编码阶段推理后,进入解码阶段。在译文时,为了翻译成英语句子,不断重复下列过程,直到到达特殊结束符为止,这时表明解码器已完成其输出。这个不断重复下列过程是:每个步骤的输出在下一个时间步骤中被反馈送到底部解码器,并且解码器像编码器那样输出它们的解码结果。解码器中的自注意力层与编码器中的自注意力层的操作方式略有不同。在解码器中,自注意力层关注输出序列中的较早的位置,这是通过在自注意力计算中的Softmax步骤之前屏蔽未来位置来完成的。编码器-解码器的注意力层就像多头自注意力层一样,除了从它下面层创建其查询矩阵,还从编码器的输出中获取键和值矩阵。 线性层的推理是将解码器输出的浮点数向量转变成一个单词,线性层是一个简单的全连接的神经网络,它将解码器产生的向量投影到一个更大的向量中。其后面是Softmax。。例5-4,注意力输出序列的解码过程。模型能够直接建模任意两个词汇之间的语义关系,提升词与词间远程依赖关系的建模能力。模型同时对所有源端单词和目标端单词进行编码和解码,提升了模型并行计算能力。目前,Transformer已经在机器翻译任务、自然语言处理、计算机视觉、预训练语言模型等多个任务中应用。 假设模型从训练数据集中学到的10,000个英语单词并存储于模型的输出词汇表中。这将使日志向量有10,000个细胞,每个细胞对应于一个唯一单词的得分,然后输入线性层。Softmax层将这些分数转换为概率(全部为正,全部加起来为1.0)。选择具有最高概率的单元,并且将与其相关联的单词作为该时间步的输出。如图5-10所示,注意力输出序列的解码过程从底部开始,向量的产生为解码器隐藏层的输出,然后它变成输出字。.图5-10注意力输出序列的解码过程

与标签有关词汇表

获最高概率的细胞标签与标签有关词汇表单词5.3Transformer模型推理与训练图5-11所示是由Transformer模型构成的中文-英文翻译系统的展开示意图,编码器由一堆编码器块(或者称为编码器层)组成,将六个编码器块彼此叠放,也可由其他多层设置,例如N=18,4等)。编码器从下到上,分别编号为#0,#1,…,#5。解码器是由一堆相同数量的解码器块组成。解码器从下到上,也是分别编号为#0,#1,…,#5。虽然解码器名字为解码,其内部也包括了已经翻译好的部分句子(例如翻译到Iama的时)的编码表示,以及参考编码器的源语言句子的表示矩阵的注意力机制和解码Softmax选词等。.机器翻译任务是Transformer模型将编码器-解码器架构应用于源语言和目标语言转换的任务。基于Transformer模型的机器翻译过程如下。 (1)预处理:首先,对源语言和目标语言的句子进行预处理,包括分词、标记化(Tokenization)、转换为词嵌入等步骤。同时,为了训练的需要,通常还对句子进行长度补齐和掩码处理。 (2)编码器:将源语言句子输入到编码器中。编码器由多个编码器层组成,每个层都包含一个多头自注意力子层和一个前馈网络子层。编码器对源语言句子进行编码,生成一系列上下文感知的表示。 (3)解码器:目标语言的句子随后输入到解码器中。解码器也由多个解码器层组成,每个层包含一个多头自注意力子层(掩码自注意力),一个编码器-解码器注意力子层,和一个前馈网络子层。解码器在生成每个词时都会使用编码器提供的源语言句子的上下文信息。 (4)编码器-解码器注意力:在解码器的每个层中,编码器-解码器注意力子层会将编码器的输出作为键(K)和值(V),而解码器当前层的输出作为查询(Q)。这样,解码器在生成每个目标语言的词时都能够关注到源语言句子的相关部分。 (5)输出:解码器的最后一层输出是目标语言句子的词嵌入。这些嵌入可以通过一个线性层和一个softmax函数转换成概率分布,然后通过贪婪解码、束搜索(BeamSearch)或其他解码策略来生成翻译后的句子。 (6)训练:在训练过程中,Transformer模型通过最小化目标语言的实际输出和模型预测输出之间的差距来进行学习。这通常通过交叉熵损失函数来实现。.(7)优化和正则化:训练过程中还会使用各种优化算法(如Adam)和正则化技术(如dropout)来提高模型的泛化能力和性能。 解码器生成英文,需要字典。解码器生成英文时通常需要使用一个字典(也称为词汇表,vocabulary)。字典在神经机器翻译(NMT)模型中扮演着关键角色,以下是它的几个主要用途:

·词嵌入查找: 字典将每个英文单词映射到一个唯一的索引。在翻译过程中,解码器使用这个索引来查找对应的词嵌入),这些嵌入是单词在连续向量空间中的表示。

·输出概率分布: 在解码器的每个时间步,它会输出一个向量,这个向量随后通过一个线性层转换成目标语言词汇表大小的向量。这个向量经过Softmax函数处理,生成一个概率分布,表示在当前解码步骤选择每个单词的概率。 字典的索引对应于这个概率分布中的每个条目,因此字典是生成概率分布的基础。

·解码策略: 在解码过程中,无论是使用贪婪解码、束搜索(BeamSearch)还是其他解码策略,都需要根据概率分布来选择下一个单词。字典帮助解码器将选中的概率分布索引转换回实际的单词。

·处理未知单词: 字典通常包含一个特殊的未知(UNK)标记,用于处理在训练期间未见过的单词或在字典之外的单词。

.·序列的开始与结束: 字典还会包含特殊的开始(如<s>)和结束(如</s>)标记,这些标记用于指示解码器序列的开始和结束。 总的来说,字典是NMT模型解码器生成目标语言(如英文)句子的关键组成部分,它确保了解码过程的正确性和效率。没有字典,解码器将无法将内部向量表示转换为人类可读的单词序列。5.3.1Transformer推理过程可以看到Transformer编码器和解码器都分别包含6个块。编码器负责把自然语言序列映射于隐藏层,然后解码器将隐藏层内容再映射为自然语言序列,如图6-24所示,以将“我有一台计算机”翻译成英文为例,说明Transformer的推理过程。.1.获取输入句子的每一个单词的表示向量X,X由单词嵌入和单词位置嵌入相加得到,“我有一台计算机”的表示如图5-13所示。2.得到的单词表示向量矩阵如图5-14所示,每一行是一个单词的表示,将X传入编码器中,经过6个编码器块后可以得到句子所有单词的编码矩阵C。单词向量矩阵用X(n×d)表示,n是句子中单词个数,d是表示向量的维度(例如维度d=512)。每一个编码器块输出的矩阵维度与输入完全一致。.3.启动解码器,将编码器输出的编码信息矩阵C传递到解码器中。解码器接收了编码器的编码矩阵C,然后首先输入一个翻译开始符<Begin>,预测第1个单词“i”;然后输入翻译开始符<Begin>和单词“i”,预测第2个单词“have”,以此类推。4.输入一个翻译开始符<Begin>,预测第1个单词“I”;5.将第一个字落下来再输入到解码器,得到第二个字“have”;6.重复此过程,直到解码器输出终止符,Ihaveacomputer<end>序列生成完成。如图5-15所示。在使用的过程中,翻译到单词i+1的时需要通过掩盖(Mask)操作遮盖住i+1之后的单词。5.3.2Transformer训练所涉及的结构1.编码器编码器负责将输入序列转换为包含丰富上下文信息的表示。它由多个相同的编码器层堆叠而成,每层包含以下关键结构:(1)词嵌入层将输入的文本序列转换为向量表示,每个词映射到一个固定维度的向量。词嵌入捕捉词汇的语义信息,使相似词汇在向量空间中接近。(2)位置编码层由于Transformer没有循环结构,无法自动感知词序,因此需要位置编码。通过正弦和余弦函数生成位置编码,并与词嵌入相加,为模型提供序列中词的位置信息。(3)多头自注意力机制这是Transformer的核心结构,允许模型在处理每个词时关注序列中的其他所有词。通过多个注意力头并行计算,捕捉不同子空间中的依赖关系,最终将结果拼接。(4)前馈神经网络在多头自注意力机制之后,每个位置的表示会通过一个全连接神经网络进一步处理。通常由两个线性变换和一个ReLU激活函数组成,用于增加非线性能力。.(5)残差连接与层归一化残差连接将层输入直接加到输出上,防止梯度消失。层归一化对每层的输出进行标准化,提升训练稳定性。2.解码器解码器负责将编码器的输出转换为目标序列,通常用于生成任务(如机器翻译)。它由多个解码器层堆叠而成,每层包含以下结构:(1)掩码多头自注意力机制解码器中的自注意力机制增加了掩码,防止模型在生成当前词时看到未来的词。这确保了生成序列的合理性,避免看到未来信息。(2)编码器-解码器注意力机制解码器通过这一机制直接关注编码器的输出,帮助生成与输入序列相关的目标序列。它结合了编码器的上下文信息和解码器自身的上下文信息。(3)前馈神经网络(与编码器相同)对解码器的注意力输出进行进一步的特征提取和转换。(4)残差连接与层归一化(与编码器相同)与编码器相同,用于稳定训练过程。.3.输入与输出结构(1)输入部分输入部分包括源文本嵌入层及其位置编码器,将输入序列转换为模型可处理的向量形式。(2)输出部分输出部分包括线性层和Softmax层,将解码器的输出转换为词汇表中的概率分布,用于生成目标序列。4.整体结构图Transformer的整体结构的工作流程:输入序列→词嵌入+位置编码→编码器→解码器→线性层+Softmax→输出序列。编码器和解码器各自由多个堆叠层组成,每层通过自注意力机制和前馈网络提取特征,并通过残差连接和层归一化稳定训练。归纳上述,Transformer训练的内容主要有:自注意力层Q(Query)、K(Key)、V(Value)权重矩阵、前馈神经网络权重矩阵、位置编码、层归一化层的参数。词嵌入权重矩阵等。在训练过程中,权值通过反向传播和优化算法不断更新,以获得最小化损失函数。关键步骤如下:首先:所有权重矩阵随机初始化,偏置项通常初始化为零。然后:前向传播:输入数据经过嵌入层、自注意力层、前馈神经网络等模块,生成输出。计算损失函数(如交叉熵损失)。再进行反向传播:根据损失函数的梯度,计算各权重矩阵的梯度。使用优化器更新权重矩阵。最后:迭代优化:重复前向传播和反向传播过程,直到模型收敛或达到预设的训练轮数。.例5-7,一个未经训练的模型可以使用有标记的训练集来训练,通过一个前向传播,用它的实际输出与期望的输出比较,然后利用误差反传,修改权重。 使用bos(序列的开头)表示序列开始。eos(序列结束)表示序列结束。 为了简单说明,假设输出词汇仅包含六个单词:“a”,“am”,“I”,“thanks”,“student”以及“<eos>”。词 a am I thanks student <eos>标签 0 1 2 3 4 5

模型的输出词汇表在训练之前的预处理流程中就已设定。一旦定义了输出词汇表,就可以使用一个相同宽度的向量来表示词汇表中的每一个单词。如果采用one-hot编码,可以用下面这个向量来表示单词“am”:0.0 1.0 0.0 0.0 0.0 0.0

可以用下面这个向量来表示单词“student”: 0.0 0.0 0.0 0.0 1.0 0.0模型的损失函数是用来在训练过程中优化的标准。通过它可以训练得到一个结果尽量准确的模型。例如训练模型,将“谢谢”翻译为“thanks”。这表明需要一个表示单词“thanks”概率分布的输出。但是因为这个模型还没被完成训练,所以不太可能得到现在这个结果。未经训练模型的输出为:0.2 0.2 0.1 0.2 0.2 0.1

期望输出为: 0.0 0.0 0.0 1.0 0.0 0.0aamIthanksstudent<eos>.因为未经训练模型的参数(权重)都被随机的生成,产生的概率分布在每个单元格/单词中都赋予了随机的数值。但是,可以使用真实的输出来比较它,然后用反向传播算法来调整所有模型的权重,生成更接近结果的输出。 例如,输入“我是一个学生”期望输出是“Iamastudent”。那就希望模型能够成功地输出概率分布,完成中文翻译英文。 本例中是6个词,如果采用one-hot编码,现实情况通常是3000或10000为宽度的向量。 第1个概率分布在与“I”关联的单元格有最高的概率; 第2个概率分布在与“am”关联的单元格有最高的概率; 以此类推,第5个输出的分布表示“<eos>”关联的单元格有最高的概率。 模型的目标输出词表如下: 位置

a

am

I

thans

student

<eos>

1

0.0

0.0

1.0

0.0

0.0

0.0

2

0.0

1.0

0.0

0.0

0.0

0.0

3

1.0

0.0

0.0

0.0

0.0

0.0

4

0.0

0.0

0.0

0.0

1.0

0.0

5

0.0

0.0

0.0

0.0

0.0

1.0

模型的目标输出如下:Iamastudent<eos>经过训练后,模型将输出正确的翻译。如果这段话完全来自训练集,它并不是一个很好的评估指标。既使每个位置(词)都得到了概率,它不太可能成为那个时间步的输出,但经过Softmax函数可以帮助模型训练。只选择概率最高的单词,并将剩下的词去除。.例5-8,需要使用一个Transformer模型来生成这个句子。在训练过程中,模型不能看到未来的词,因此需要对句子进行掩码处理。假设一个简单的句子:“我昨天去了学校”。首先,将句子中的每个词转换成嵌入向量。然后,这些嵌入向量将被传递到掩码多头自注意力子层。接下来,定义一个掩码矩阵,它是一个下三角矩阵,因为需要确保每个词只能看到它左边的词。对于上面的句子,掩码矩阵将是:

1000 1100 1110 1111其中“1”表示允许注意力机制考虑的词,而“0”表示不允许注意力机制考虑的词,即忽略得词。在计算自注意力分数之后,将这个掩码矩阵应用到注意力分数上,将所有被掩码的位置的分数设置为负无穷大或一个非常小的值。这样,在softmax步骤之后,被掩码的位置将具有接近零的概率,从而确保了模型在生成每个词时只考虑它之前的词。当模型生成“昨天”这个词时,它只能看到“我”,而不能看到“去了”或“学校”。这样,模型就被迫学习如何根据前面的上下文来预测下一个词,而不是简单地从整个句子中获取信息。在实际应用中,掩码通常是通过软件实现的,而不是手动创建掩码矩阵。在PyTorch或TensorFlow等深度学习框架中,有内置的函数可以创建和应用这种掩码。.从整个句子中获取信息。在实际应用中,掩码通常是通过软件实现的,而不是手动创建掩码矩阵。在PyTorch或TensorFlow等深度学习框架中,有内置的函数可以创建和应用这种掩码。例5-9,以将“i/love/machine/learning”翻译成"我/喜欢/机器/学习"为例说明解码器训练过程。 (1)将“i/love/machine/learning”嵌入后输入到编码器中,最后一层的编码器最终输出的outputs[10,512],表明采用的嵌入长度为512,批量大小=10,outputs[10,512]乘以新的参数矩阵,可以作为解码器中每一层用到的K和V。 (2)将<bos>作为解码器的初始输入,将解码器的最大概率输出词A1和‘i’做交叉熵计算误差。 (3)将<bos>,"i"作为解码器的输入,将解码器的最大概率输出词A2和‘love’做交叉熵计算误差。 (4)将<bos>,"i","love"作为解码器的输入,将解码器的最大概率输出词A3和'machine'做交叉熵计算误差。 (5)将<bos>,"i","love","machine"作为解码器的输入,将解码器最大概率输出词A4和‘learning’做交叉熵计算误差。 (6)将<bos>,"i","love","machine","learning"作为解码器的输入,将解码器最大概率输出词A5和终止符做交叉熵计算误差。2.解码器测试 将训练完的模型进行测试,例如用“machinelearning”当作测试样本,得到其中文翻译“机器学习”。首先经过编码器后得到输出张量,送入到解码器(并不是当作解码器的输入:.(1)用起始符<bos>当作解码器的输入,得到输出machine

(2)用<bos>+machine当作输入,得到输出learning

(3)用<bos>+machine+learning当作输入得到<eos>

就得到了完整的翻译“machinelearning<eos>”

可以看到,在测试过程中,只能一个单词一个单词的进行输出,是串行进行的。

3.模型预测单词的位置 通过训练,模型将输出期望的正确翻译。因为模型一次生成一个输出,可以从该概率分布中选择具有最高概率的单词并丢弃其余的单词,进而预测单词的位置。训练与预测最大的不同是解码器的输入; (1)预测时,解码器的输入除了第一个字符,其余字符来自解码器的前一个预测字符。

(2)训练时,解码器的所有输入都是真实的数据集输入,此时解码器的输出仅仅用来计算交叉熵来进行模型优化。将这种方法称为有监督学习。5.3.3Transformer训练关键步骤Transformer模型的训练是一个复杂但系统化的过程,主要包括以下关键步骤。1.数据准备与预处理(1)数据是Transformer模型训练的基础,其质量和多样性直接影响模型的性能。主要步骤包括:(2)数据来源:通常使用大规模语料库,如维基百科、新闻文章、社交媒体文本等。领域特定任务(如医疗、法律)需要使用相关领域的文本数据。(3)数据清洗:去除噪声(如HTML标签、重复内容、无关符号等),纠正拼写错误,过滤不合规定的文本。(4)分词与编码:将文本切分为单词或子词单元,使用方法如字节对编码(BPE)或SentencePiece。每个子词映射为数值索引,统一序列长度,短句补PAD,长句截断。(5)数据增强:通过同义词替换、句子重组等方法扩充数据,提升模.型泛化能力。(6)数据集划分:将数据分为训练集、验证集和测试集,通常比例为7:2:1,保证分布均衡。.的梯度,更新模型参数。(4)参数更新:通过优2.模型构建根据任务需求选择合适的模型架构,并定义相关组件:(1)架构选择:标准的Transformer模型由编码器和解码器组成,但某些任务(如文本分类)可能仅使用编码器部分。(2)关键组件:·自注意力机制:允许模型动态关注序列中的不同部分,捕捉长距离依赖关系。·多头注意力:并行计算多个注意力子空间,提升模型表达能力。·位置编码:由于Transformer没有循环结构,需要引入位置编码来保留序列顺序信息。·嵌入层:将单词或子词映射到高维向量空间,捕捉语义信息。3.训练流程训练过程涉及前向传播、损失计算、反向传播和参数更新,具体步骤如下:(1)前向传播:将输入数据传递给模型,生成输出结果。(2)损失计算:使用损失函数(如交叉熵损失)比较模型输出与真实标签的差异。(3)反向传播:计算损失函数化器(如Adam)调整参数,优化模型性能。(5)学习率调度:通常采用动态调整策略,如预热(Warmup)和余弦衰减,以提升训练稳定性。.4.优化与正则化优化和正则化技术是提升模型性能的重要手段:(1)优化器选择:Adam优化器因其自适应学习率特性被广泛使用。此外,AdamW、Lion等优化器也被用于提升训练效率。(2)正则化策略:通过Dropout、权重衰减等方法防止过拟合。(3)稀疏训练:直接训练稀疏子网络,减少计算资源消耗。5.超参数调优超参数对模型性能有重要影响,需仔细调整:(1)批次大小:通常为32-512,需根据硬件资源选择。(2)学习率:初始值通常为1e-3到1e-4,通过预热和衰减策略动态调整。(3)隐藏层维度与层数:根据任务复杂度选择,较大的模型需要更多计算资源。6.模型评估与微调(1)评估指标:使用验证集计算准确率、损失值等指标,评估模型性能。(2)微调:在特定任务(如文本分类、命名实体识别)上,通过添加任务特定层并使用相关数据进一步优化模型。7.模型保存与部署(1)保存模型:训练完成后,保存模型权重和参数,便于后续使用。(2)部署应用:将模型部署到实际场景中,如文本生成、机器翻译等。5.3.4Transformer并行训练与测试Transformer编码器无论是训练还是测试,都可并行推理。但Transformer解码器仅在训练时可为并行、测试时为串行。

1.编码器 编码器的并行可以理解,对于一个BFE数据块(B为一个批次的样本数、F为一个样本中的字符数、E为每个字符的嵌入长度),其经过一层编码器后,数据块的形状仍为BFE。而在一个编码器中,尽管计算非常复杂,但是通过矩阵运算,每条样本的计算都是同时发生的,每条样本内的字符之间的自注意力分数计算也是同时发生的。经过一层编码器的运算时间,取决于最小粒度的计算的耗时时间,这就可称为并行。

2.解码器 解码器有两个输入,一个是编码器的输出,一个是带标签的矩阵。例如,机器翻译任务中译英。“我爱编程”译为“Iloveprogramming”。那么“我爱编程”就是编码器的输入,解码器的输入就是编码器的输出与“lloveprogramming”。 简单地说,将训练过程中的解码器可以看作一个N分类任务。在上文的例子中,应该先预测出l,结合l再预测出love,最后结合llove预测出programming。训练过程是按照这么一个逻辑,只不过通过示教与遮挡将该逻辑并行化实现了。.例5-10,Transform模型的解码器训练。训练过程是按单个单词串行进行的,也可以并行进行训练,单个句子训练时,输入到解码器的分别是:

<bos> <bos>,"i" <bos>,"i","love" <bos>,"i","love","machine" <bos>,"i","love","machine","learning"

这就是需要将矩阵输入到解码器,同时可以得到5个输出概率分布,这样就可以进行并行训练。这个矩阵类似于批处理,矩阵的每行是一个样本,只是每行的样本长度不一样,每行输入后,最终得到一个输出概率分布,如果作为矩阵输入,同时可以得到5个输出概率分布。 在Transformer模型中,每一层都在学习输入数据的不同的特征和表示,以下是一个简化的例子说明。假设一个简单的英语到中文的翻译任务,源句子是“Ihaveacat”,目标句子是“我有一只猫”。第一层(底层)输入:原始的词嵌入向量,这些向量是对词的初步数值表示。学习特征:这一层可能主要学习一些基本的语言特征,如词的上下文无关属性(例如,“cat”可能与“dog”更相似,因为它们都是动物名词)。输出:基于自注意力和前馈网络处理后的特征表示,这些表示开始捕捉词与词之间的简单关系。.第二层输入:第一层的输出,即已经初步处理过的特征表示。学习特征:这一层可能开始学习更复杂的特征,如词的上下文相关属性(例如,“have”在这个句子中与“cat”的关系,表明拥有关系)。输出:更抽象的特征表示,开始形成关于句子结构的一些理解。第三层输入:第二层的输出。学习特征:这一层可能学习到更高级的语法结构,如短语或从句的组成(例如,“haveacat”作为一个整体的意思)。输出:更加抽象的表示,可能包含了关于句子中短语结构的信息。第四层输入:第三层的输出。学习特征:这一层可能开始捕捉到句子中的长距离依赖关系,如主语和谓语之间的关系,或者句子中不同部分之间的逻辑联系。输出:更加复杂和抽象的特征表示,有助于理解整个句子的语义。第五层输入:第四层的输出。学习特征:这一层可能专注于学习句子中的细微语义差异和复杂的语言规则。输出:高度抽象的表示,可能包含了句子的深层语义信息。.第六层(顶层)输入:第五层的输出。学习特征:这一层可能综合之前所有层的特征,形成对整个输入序列的全面理解,包括句子的整体意图和语境。输出:最终的抽象特征表示,用于解码器生成翻译后的句子。在这个例子中,每一层都在其前一层的基础上,学习到更复杂和抽象的语言特征。这种层次化的特征学习使得Transformer模型能够有效地处理和理解自然语言。5.4Transformer-XL模型Transformer-XL模型是Transformer模型的升级版,该模型利用段级递归机制和相对位置编码技术解决长文本问题。

5.4.1长文本问题与解决策略

1.长文本问题 在LLM处理长文本时,遇到下述问题:

(1)上下文限制:许多语言模型,包括Transformer模型,都有上下文长度的限制。例如,OpenAI的GPT-3只能处理大约2048个token的输入。当文本超过这个长度时,模型无法一次性处理整个文本。 (2)信息丢失:当长文本被分割成多个部分进行处理时,可能在分割点附近丢失一些上下文信息,导致输出的连贯性和准确性下降。 (3)内存和计算资源:长文本需要更多的算力资源来处理。在算力资源有限的情况下,可能导致性能下降或无法处理。 (4)连贯性和一致性:即使成功地分割和处理长文本,保持输出的连贯性和一致性也是一个挑战,这是因为,需要模型能够在处理不同部分时保持主题、风格和细节的一致性。 (5)处理速度:处理长文本需要更长的时间,这可能影响用户体验,尤其是在实时应用或交互式环境中。.2.解决问题的策略:为了解决这些问题,采用了以下策略。 (1)分段处理:将长文本分割成较小的段落,逐个处理,同时保持足够的上下文重叠,以减少信息丢失。 (2)摘要和提炼:使用摘要技术来减少文本的长度,同时保留关键信息。 (3)高级模型架构:使用能够处理更长上下文的模型,例如长序列Transformer模型或更先进的模型。 (4)优化资源使用:通过模型压缩、蒸馏或使用更高效的推理方法来减少对内存和计算资源的需求。 (5)后期编辑和校对:在模型处理完毕后,进行人工编辑和校对,以确保输出的质量和一致性。需要综合运用多种技术和策略来解决长文本问题,以实现既高效又准确的处理结果。3.Transformers模型的两个关键的限制:为了要正确理解一篇文章,有时需要参考出现在几千个单词后面的一个单词或一个句子,这是序列数据处理中经常遇到的现象,这就是一个长期依赖性的例子,处理许多现实世界的任务都必须理解这种依赖。虽然人类能够很自然地完成,但是,用神经网络建模长期依赖关系仍具挑战性。使用Transformers模型可以应对这个问题,它允许数据单元之间直接连接,能够更好地捕获长期依赖关系。然而,在语言建模中,Transformers使用固定长度的上下文来实现,处理一个长的文本序列的方法是将长的文本序列截断为由几百个字符组成的固定长度片段,然后分别处理每个片段。这种方法造成了下述两个新问题:

·对于超过固定长度的依赖关系,算法无法建模。

·被分割的片段通常不考虑句子边界,导致上下文碎片化,从而优化低效。即使是对于长期依赖性不显著的较短序列,也是特别麻烦。5.4.2Transformer-XL技术Transformer-XL架构适用于超出了固定长度的上下文。该模型利用段级递归机制和相对位置编码两项技术,获得了显著效果。

1.Transformer模型的训练与推理 (1)Transformer训练

Transformer模型在训练阶段,需要对多个段训练,其训练过程如图5-18所示。可以看出,两段之间无相互依赖,导致上下文信息丢失。不同段的位置编码也一样,因此也不准确。.(2)Transformer推理在推理阶段,对于第一段,跨段预测时(大于第一段的序列),由于依赖的上下文长度固定,可以理解为使用了一个滑动窗口,每次窗口的值都不一样,所以每次只能预测一个字/词,并且每次都要完整的计算,例如图5-19中,每个段长度是4,超过4的部分只能逐字/词计算。2.Transformer-XL训练与推理

Transformer-XL架构在Transformer的基础上引入了下述创新:

·段级递归机制

·相对位置编码 与Transformer相比,Transformer-XL的另一个优势是它可以被用于单词级和字符级的语言建模。.(1)段级递归机制 利用段级递归机制可使模型能够处理超出固定长度的文本,具体方法是将长序列划分为多个段,并且在这些段之间进行信息的传递和更新。由于每个段的长度固定,在处理当前段时,模型利用前面段的信息来进行上下文的编码,从而捕捉到长距离的依赖关系。这种机制的关键在于它允许模型在处理当前段时,不仅考虑当前段的信息,还要考虑前面段的信息。更具体地说,模型保存前面段的隐藏状态,并将这些状态作为当前段的输入。这样就可使得当前段的输出不仅包含了当前段的信息,还包含了前面段的信息。

Transformer-XL仍然是使用分段的方式进行建模,但与Transformer的本质不同是在于引入了段与段之间的段级递归机制,使得当前段在建模的时候能够利用之前段的信息来实现长期依赖性。如下图所示: 为了解决固定长度的限制,提出了一种递归机制,如图5-20所示,第一段计算完成后,把计算的结果保存下来。在计算第二段的时候,将第一段的隐藏状态和第二段的隐藏状态拼接在一起,再进行后续的计算。.①在训练阶段,处理后面的段时,每个隐藏层都会接收下述两个输入:

·该段的前面节点的输出,与Transformer相同(图中的灰色线)。

·前面段的节点的输出(图中的绿色线),可以使模型创建长期依赖关系。这部分输出不参与梯度的计算,该方法可以利用前面更多段的信息。②在预测阶段: 如果预测x11,只要使用之前预测好的[x1,x2...x10]的结果拿过来,直接预测。同理在预测x12的时候,直接在[x1,x2...x10,x11]的基础上计算,不用像Transformer一样每次预测一个字就要重新计算前面固定个数的词。

"无梯度"或"不计算梯度"通常用于描述在机器学习或深度学习模型训练过程中的某些阶段或操作,在这些阶段或操作中,不需要计算反向传播的梯度。因为在模型的预测阶段,通常不需要计算梯度,因为预测是前向传播的过程,不需要反向传播来更新模型参数。 在推理阶段,如图5-21所示,大于第一个段的序列,均可以进行批计算,每个批的长度是段的长度,并且,由于每次都会保存前一个段的隐藏状态,所以不需要像Transformer版本重新计算。通过对比可以看出,Transformer-XL推理速度比Transformer快数千倍。.(2)相对位置编码 在Transformer中,一个重要点是考虑了序列的位置信息。在分段的情况下,如果仅仅对于每个段仍直接使用Transformer中的位置编码,即每个不同段在同一个位置上的表示使用相同的位置编码,就会出现问题。比如,第i-2段和第i-1段的第一个位置将具有相同的位置编码,但它们对于第i段的建模重要性显然并不相同(例如第i-2段中的第一个位置重要性可能要低一些)。因此,需要对这种位置进行区分。针对这个问题,提出了一种新的位置编码的方式,即根据词之间的相对距离而非Transformer中的绝对位置进行编码,也就是说,Transformer-XL模型采用了相对位置编码。可以将Transformer-XL中的注意力的计算分为如下四个部分:·基于内容的“寻址”,即没有添加原始位置编码的原始分数。·基于内容的位置偏置,即相对于当前内容的位置偏差。·全局的内容偏置,用于衡量key的重要性。·全局的位置偏置,根据query和key之间的距离调整重要性

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论