摘要:Encoder的主要功能是将输入转化为固定维度的向量,它由多个相同的层组成。每层包含两个子层:自注意力层和前馈全连接层。自注意力层通过计算输入中各元素之间的注意力分数,来捕捉元素之间的长程依赖关系;前馈全连接层则将每个元素映射到不同的向量空间,以捕获更高级的特
主要由编码器(Encoder)和解码器(Decoder)两部分组成
Encoder的主要功能是将输入转化为固定维度的向量,它由多个相同的层组成。每层包含两个子层:自注意力层和前馈全连接层。自注意力层通过计算输入中各元素之间的注意力分数,来捕捉元素之间的长程依赖关系;前馈全连接层则将每个元素映射到不同的向量空间,以捕获更高级的特征。
Decoder则利用Encoder的输出以及目标序列(例如翻译后的句子)作为输入,生成目标序列中每个元素的概率分布。Decoder同样由多个相似的层构成,每层包括三个子层:自注意力层、编码器-解码器注意力层和前馈全连接层。自注意力层和前馈全连接层的功能与Encoder中相同,而编码器-解码器注意力层则专注于将Encoder当前位置的输入与Decoder中所有位置进行注意力分数的计算,以提取与目标序列相关的信息。
整个模型可以抽象为以下结构
编码器的核心功能是将输入数据转换为包含注意力信息的连续表示。通过将编码器层堆叠N次,使得每一层都有机会学习到不同的注意力表示,从而增强Transformer的预测能力。
编码器的主要组成部分包括:输入嵌入(Input Embedding)、位置编码(Position Encoding)、多头注意力机制(Multi-Head Attention)以及前馈网络(Feed Forward)。
由于计算机无法直接处理文本信息,因此需要将输入的文本转换为固定维度的向量表示,从而使其可以被模型所处理。
例如,输入文本为“how are you?”,在input Embedding层中,每个单词将被转换为相同长度的向量。
由于Transformer使用的都是线性层,编码过程中缺乏显著的位置信息,字词位置的交换实际上只是相当于矩阵中行位置的互换。这虽然带来了并行计算的优势,但也削弱了语序信息,因此需要引入位置编码以进行补充。下面我们来看一个具体的例子。
#假设线性层ww = np.array([1, 2], [3, 4], [5, 6])x = np.array([1, 2, 3], [4, 5, 6], [7, 8, 9])print(x.dot(w))#输出"""[[22, 28][49, 64][76, 100]]"""#仅交换输入位置x = np.array([4, 5, 6], [7, 8, 9], [1, 2, 3])print(x.dot(w))#输出"""[[49, 64][76, 100][22, 28]]"""transformer中位置编码位置编码通常是一组与input Embedding维度相同的向量,通过特定方式生成
在transformer中,采用正余弦位置编码
其中,是input Embedding嵌入向量的维度,是单词在序列中的位置,是嵌入向量中的维度索引 例,输入句子为“I am a robot”,那么其位置编码如下:
注意力机制从本质上讲和人类的选择性注意力机制类似,核心目标是从众多信息中选择对当前任务目标更加关键的信息,它允许模型对输入序列的不同位置分配不同的权重,以便在处理每个序列元素时关注最相关的部分
自注意力机制用公式表示为:
注:除以是因为点积数量级增长很大,因此将softmax函数推向梯度极小区域反向传播时导致梯度消失而无法学习
如上图,注意力分数计算分为三步:
1、将一个token embedding分别与三个矩阵做矩阵乘后得到这个token对应的三个向量
2、为了找到token与其他token的关注关系,将token的向量与其他所有token的向量做内积,除以后得到注意力分数
3、过softmax将分数归一化到[0,1]之间,那么对于不太需要关注的token权重就会很小
多头注意力机制多头注意力机制是在自注意力机制的基础上演变而来的,它是一种自注意力机制的变体,目的是提升模型的表达能力和泛化能力。该机制通过多个独立的注意力头来分别计算注意力权重,最终将这些结果加权求和,从而获得更加丰富的表示。
残差连接指的是将多头注意力机制的输出向量与原始输入向量相加,然后再进行层归一化处理。
在Transformer中,主要采用层归一化而非批归一化,这样可以有效避免训练过程中出现的梯度消失问题,从而提升模型的稳定性。
①.为何使用层归一化:在自然语言处理任务中,输入序列的长度通常是变化的。层归一化是针对单个样本内的所有特征进行归一化,因此它能够较好地处理可变长度的情况。
②.何时使用:层归一化通常在残差连接之后使用。在Transformer模型中,每个子层都设置有一个残差连接,其后紧接着进行层归一化处理。
在Transformer中,前馈网络被称为点对点前馈神经网络(Position-wise Feed-Forward Networks,简称FFN)。它实质上由两个全连接层组成:第一个层将输入的维度扩展(例如,从512维增加到2048维),并通过激活函数(通常使用ReLU或GELU)进行处理;第二个层则将扩展后的输出缩减回原始维度(比如,从2048维缩减回512维)。
完成前馈网络层的处理后,会进行残差连接并随后进行层归一化。
解码器的主要功能是生成文本序列。其结构主要由以下几个部分组成:
具有掩码的多头注意力机制(Masked Multi-Head Attention):用于确保在生成过程中,只考虑当前及之前的输入,防止信息泄露。
多头注意力机制(Multi-Head Attention):用于关注编码器输出的不同部分,以整合上下文信息。
前馈网络(Feed Forward):对每个位置的表示进行进一步处理,以提取更复杂的特征。
分类器(Classifier):将最终的编码表示转换为目标文本的词汇分布,生成最终的输出。
在解码器中,目标序列首先通过嵌入层转换为密集的向量表示。接着,通过位置编码将序列中的位置信息添加到这些向量中,这些处理后的向量将作为解码器的输入,供模型训练使用。
3.2 Masked Multi-Head Attention具有掩码的多头注意力机制在自注意力机制中,当前词与其他词之间的关系会被计算。然而,在使用解码器生成序列时,目标是预测当前位置的单词,这就要求模型只能访问该位置之前的信息,而无法使用当前位置之后的信息,以防止信息泄露。因此,需要采取一些方法来遮挡后面的信息。在Transformer中,这主要通过应用掩码(Mask)操作来实现。
为避免解码器获取未来的信息,在已获得的注意力分数矩阵上添加一个掩码矩阵,使得掩码位置的注意力分数变为负无穷大,从而得到Masked Scores。这样,在经过softmax函数处理后,关于“当前词”的“未来词”的注意力得分将变为0,即不会访问到未来的信息。
这里的多头注意力机制和编码器部分原理相同,不过它的输入来自于编码器,目的是将解码器当前生成的序列与经过编码器处理的原始输入序列关联起来,以生成下一个目标词。
最后,由一个线性层和一个softmax得到当前词概率
在模型输出""时停止生成,至此整个Transformer模型的各个部分已经完整拆解。该模型具体解决了以下几个关键问题:
长距离依赖关系问题:传统的RNN在处理长文本时,容易忽视序列中的远距离依赖。Transformer利用自注意力机制,能够为序列中不同位置的每个元素分配不同的重要性,从而有效捕捉长距离的依赖关系。
并行计算问题:传统RNN的训练过程需要按序列顺序逐一进行,因而无法实现并行计算,导致计算效率低下。Transformer引入了编码器-解码器框架,使得可以在输入序列上进行编码,并在输出序列上进行解码,从而实现并行计算,显著提高了模型训练的速度。
特征抽取问题:通过自注意力机制和多层神经网络结构,Transformer能够从输入序列中高效提取丰富的特征信息,从而为后续任务提供更强的支持。
我们相信人工智能为普通人提供了一种“增强工具”,并致力于分享全方位的AI知识。在这里,您可以找到最新的AI科普文章、工具评测、提升效率的秘籍以及行业洞察。
来源:小陈科技观察