1. 自注意力机制
Transformer的核心是自注意力机制,它可以让模型在处理序列数据时关注序列中不同位置信息。对于一个输入序列,自注意力机制的思想是,对于每个位置的输出都由输入序列中所有位置的信息加权求和得到,而权重就是输入特征不同位置之间的相关性。而由于Transformer不像RNN本身先后循环输入机制暗含位置信息,因此输入特征需要先经过位置编码,即Position Embeding,常用的有基于sinsinsin,coscoscos函数的位置编码。
自注意力机制的公式为:
attention(Q,K,V)=softmax(QKTdk)Vattention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})Vattention(Q,K,V)=softmax(dkQKT)V
其中Q,K,VQ,K,VQ,K,V分别表示查询(query)、键(key)和值(Value)矩阵,其均由输入序列经线性变换得到。dkd_kdk表示键向量的维度。softmaxsoftmaxsoftmax是对每一行进行归一化,使得每一行的元素之和为1。其中softmax(x)=ex∑iexxsoftmax(x)= \frac{e^x}{\sum_i e^x}xsoftmax(x)=∑iexexx
公式的含义是对每一个查询向量qiq_iqi计算它与所有键向量kjk_jkj的点积,然后除以dk\sqrt{d_k}dk进行缩放,再通过softmaxsoftmaxsoftmax函数得到一个概率分布,表示qiq_iqi对不同位置信息的关注程度。然后基于得到的概率分布对所有值向量vjv_jvj进行加权求和,得到一个输出向量oio_ioi,最后将所有输出向量拼接起来,得到最终的输出矩阵。
2. Transformer模型
Transformer模型即基于注意力机制的深度学习架构,不使用循环或卷积来处理序列数据,而是使用注意力来捕捉序列中的依赖。
Transformer模型采用编码器-解码器结构,编码器将输入序列映射为一系列连续的表示,解码器接收编码器的输出和自身的输出生成目标序列。
每个编码器由N个相同的层组成,每个层包含两个子层,分别是:多头自注意力机制计算层,全连接前馈网络层。其中每个子层都有一个残差连接层和归一化层。
解码器层也由多个相同的层组成,每个层包含三个子层,分别是:多头注意力机制计算层,用于融合编码器的输出和和解码器的输出;全连接前馈网络,用于将提取输入的非线性特征组合,并将输入映射到输出。
在输入词嵌入(或其他张量)之后,编码器和解码器都会添加位置编码,用于表示序列中词语的位置信息,位置编码通过sin,cos函数实现,可以处理任意长度的序列。
在训练过程中,为了防止编码器提前看到目标序列中的后续词语,需要用掩码来遮挡未来的信息,掩码是一个二维矩阵,其中未来信息对应的位置为0,其他位置为1.
下图即模型结构图,左侧为编码器,右侧为解码器。编码器有一个自注意力计算层,解码器有两个自注意力计算层,途中Add为残差计算,Norm为归一化层,Feed Forward为MLP,Linear即Linear层。