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