Preface
三种序列转换模型的对比
- CNN 模型
- 优点:可以并行计算,计算效率高
- 缺点:感受野小,受卷积核窗口大小的影响,不能同时考虑整个上下文
- RNN 模型
- 优点:可以考虑数据的时序特征,序列的位置信息自然获得
- 缺点:受顺序计算的影响,无法并行计算
- Transformer 模型
- 优点:可以并行计算,还可以考虑数据的全局信息
- 缺点:计算量大,训练参数多
1. 基础知识
建立 Transformer 模型之前,需要将序列数据转换为词向量数据。
2. Transformer 模型结构
全部采用自注意力 ( self-attention ) 层进行 编码,引入了三个变换矩阵,得到查询 ( Query, Q ) 、键 ( Key, K ) 、值 ( Value, V ) 三个向量,然后利用词与词之间 Q 和 K 相乘的结构进行注意力计算,将权重系数乘以 V 就是新的词向量表示。

( 图 1-Transformer 模型结构 )

2.1 Sequence
模型的输入
- 输入序列:inputs=(i1,i2,⋯,ip,⋯,iN),其中ip∈N∗为输入符号表中的序号。用于图 1 中的Inputs
- 目标序列:targets=(t1,t2,⋯,tq,⋯,tM),其中tq∈N∗为目标符号表中的序号。用于图 1 中的Outputs
模型的输出
- 输出序列:outputs=(o1,o2,⋯,oq,⋯,oM),其中oq∈N∗为目标符号表中的序号。用于图 1 中的Output Probabilities
- outputs=Transformer( inputs,targets )
- 代价函数:loss function=L(targets,outputs)
2.2 Embedding and Encoding
2.2.1 Word Embedding
序列的词嵌入(Word Embedding)编码
- 词嵌入的维度:dmodel
- 输入序列
- 序列长度:N
- 词嵌入编码:InputsEmbedding(inputs)∈RN×dmodel)
- 目标序列
- 序列长度:M
- 词嵌入编码:TargetsEmbedding(targets)∈RM×dmodel
2.2.2 Positional Encoding
位置编码(Positional Encoding):因为自注意力机制并没有考虑位置信息,因此需要将每个位置编号,然后每个编号对应这个向量,最后将该向量与词向量相加,从而实现为每个词引入位置信息。
位置编码的维度和词嵌入的维度一致:dmodel
PositionEncode(pos,i)={sin(pos/100002idmodel1),cos(pos/100002i−1dmodel1),if i is 偶数if i is 奇数
注 1:使用 sin 和 cos 函数,是因为基于和差化积公式,
注 2:编码函数还有其他方式,Encoder 与 Decoder 的编码函数是相同的
- 序列的位置编码
-
输入序列位置编码:InputsPositionEncode={PositionEncode(inputs-position,i)}
- 输入符号对应的位置序列:inputs-position∈{1,2,⋯,p,⋯,N}
- 输入符号对应的编码维度: i∈{0,1,2,⋯,(dmodel−1)}
- 输入序列位置编码的维度:InputsPositionEncode∈RN×dmodel
-
目标序列位置编码:TargetsPositionEncode={PositionEncode(targets-position,i)}
- 输入符号对应的位置序列:targets-position∈{1,2,⋯,q,⋯,M}
- 输入符号对应的编码维度:i∈{0,1,2,⋯,(dmodel−1)}
- 目标序列位置编码的维度:TargetsPositionEncode∈RM×dmodel
2.3 Encoder
2.3.1 Encoder Structure
编码器的结构
- 输入层:e0=InputsEmbedding(inputs)+PositionEncode(inputs-position),e0∈RN×dmodel
- 编码层:el=EncoderLayer(el−1),el∈RN×dmodel,l∈[1,n]
- 编码器的编码层的叠加层数:n
- 第l个编码层的输入:ein∈RN×dmodel
- 第l个编码层的过渡:emid=LayerNorm(ein+MultiHeadAttention(ein)),emid∈RN×dmodel
- 多头注意力机制:MultiHeadAttention(⋅)
- 层归一化:LayerNorm(⋅)
- 第l个编码层的输出:eout=LayerNorm(emid+FFN(emid)),eout∈RN×dmodel
- 前馈神经网络:FFN(⋅)
2.3.2 Multi-Head Attention

( 图 2-多头注意力机制与缩放点积 )
多头注意力 ( Multi-Head Attention )
MultiHeadAttention(ein)=MultiHead(Q,K,V)=Concat(head1,⋯,headh)WO
-
输入向量序列ein=(ein1,ein2,⋯,einN)∈RN×dmodel,分别得到:
- 查询向量序列:Q=ein
- 键向量序列:K=ein
- 值向量序列:V=ein
-
多头输入:headi=Attention(QWiQ,KWiK,VWiV),i∈[1,h],headi∈RN×dv
- 使用缩放点积注意力 ( Scaled Dot-Product Attention ) 作为打分函数的自注意力函数
Attention(QWiQ,KWiK,VWiV)=softmax(dkQWiQ(KWiK)T)VWiV
注:QWiQ(KWiK)可以理解为相关矩阵,然后通过 softmax 将相关矩阵的值转化为概率,即归一化,相关性强的概率值大,将这个概率矩阵作为值的权重矩阵,使得输出结果具有更加明显的结构信息。这个结构信息可以作为输出数据的结构参考信息使用
2.3.3 Encoder Padding Mask
编码器的PAD掩码:因为每个批次输入序列长度不同,为了将输入序列对齐,需要将长句子截断,对短句子填充 0.
- 编码函数:EncodePadMask(⋅)∈RN×N
EncodePadMaskj=(ej1,ej2,⋯,ejp,⋯,ejN)
-
ejp={True,ip=0False,ip=0,j=1,2,⋯,N
-
ip为输入序列 inputs 对应的单词序号,默认填充序号为 0
- 因为 pad 掩码如果为 0,当进行 softmax 计算时,0 会使计算产生偏差,因此采用 mask 方法进行补偿,即把 0 的位置填充很大的负值 ( 代码中为-1e9 ) ,从而经过 Softmax 函数时对数据分布影响很小
- Softmax 函数:Si=∑jexpxjexpxi
2.3.4 Residual
残差连接:经过注意力矩阵加权之后的 V,即 MultiHeadAttention(ein) 与 ein 的维度一致,
2.3.5 Layer Normalization
层归一化:把神经网络中的隐藏层归一化为标准正态分布,从而加快训练速度,加速模型收敛
2.3.6 Feedforward Network
前馈神经网络
- 参数矩阵:W1∈Rdmodel×dff,W2∈Rdff×dmodel
- 偏置:b1∈Rdff,b2∈Rdmodel
- 前馈神经网络的维度:dff
FFN(emid)=ReLU(emidW1+b1)W2+b2=max(0,emidW1+b1)W2+b2
2.4 Decoder
2.4.1 Decoder Structure
解码器的结构
- 输入层:d0=TargetsEmbedding(targets)+PositionEncode(targets-position),d0∈RM×dmodel
- 编码层:dl=DecoderLayer(dl−1),l∈[1,n],dl∈RM×dmodel
- 解码器的编码层的层数:n
- 第 l 个编码层的输入:din∈RM×dmodel
- 第 l 个编码层的第一子层:dmid1=LayerNorm(din+MaskedMultiHeadAttention(din))
- MaskedMultiHeadAttention(⋅)∈RM×dmodel
- 第 l 个编码层的第二子层:dmid2=LayerNorm(dmid1+MultiHeadAttention(dmid1,eout))
- MultiHeadAttention(⋅)∈RM×dmodel
- 第 l 个编码层的输出:dout=LayerNorm(dmid2+FFN(dmid2)),dout∈RM×dmodel
- 输出层:output-probabilities=softmax(dnW),W∈Rdmodel×tgt-vocab-size
- 目标单词库的大小:tgt-vocab-size
2.4.2 Decoder Padding Mask
解码器的 PAD 掩码:与编码器相同
2.4.3 Decoder Sequence Mask
解码器的序列掩码:因为解码阶段,后序单词不应该用于预测前序的单词,因此需要掩掉
- 生成方法:产生一个下三角矩阵,下三角矩阵中的值全为1,矩阵中其它值都为0,将这个矩阵应用于序列上即可