Transformer 结构浅析
文章目录
- Transformer 结构浅析
- Transformer 网络结构
- 编码器
- 位置编码
- 多头注意力层
- Add&Norm
- Feed Forward
- 解码器
- 带掩码的多头注意力层
- 多头注意力层
- 预测
Transformer 网络结构
Transformer模型的网络结构如图,且transformer结构主要分为两部分,其中一部分为encode编码器,一部分为decode解码器。且Encoder 和 Decoder 都包含 6 个 block。
编码器
位置编码
第一步将sentence输入网络,并进行词编码,并与位置编码相加得到输入编码器的block。
其中transformer中的位置编码采用如下公式进行计算
P E ( p o s , 2 i ) = sin ( p o s / 1000 0 2 i / d ) P E ( p o s , 2 i + 1 ) = cos ( p o s / 1000 0 2 i / d ) \begin{aligned} PE_{(pos,2i)}&=\sin{(pos/10000^{2i/d})}\\ PE_{(pos,2i+1)}&=\cos{(pos/10000^{2i/d})} \end{aligned} PE(pos,2i)PE(pos,2i+1)=sin(pos/100002i/d)=cos(pos/100002i/d)
其中, p o s pos pos 表示单词在句子中的位置, d d d 表示 PE的维度 (与词 Embedding 一样), 2 i 2i 2i 表示偶数的维度, 2 i + 1 2i+1 2i+1 表示奇数维度 (即 2 i ≤ d , 2 i + 1 ≤ d 2i≤d, 2i+1≤d 2i≤d,2i+1≤d)。使用这种公式计算 PE 有以下的好处:
-
使 PE 能够适应比训练集里面所有句子更长的句子,假设训练集里面最长的句子是有 20 个单词,突然来了一个长度为 21 的句子,则使用公式计算的方法可以计算出第 21 位的 Embedding。
-
可以让模型容易地计算出相对位置,对于固定长度的间距 k k k,PE(pos+k) 可以用 PE(pos)计算得到。
因为 :
sin ( A + B ) = sin ( A ) cos ( B ) + cos ( A ) sin ( B ) cos ( A + B ) = cos ( A ) cos ( B ) − sin ( A ) sin ( B ) \sin(A+B) = \sin(A)\cos(B) + \cos(A)\sin(B) \\ \cos(A+B) = \cos(A)\cos(B) - \sin(A)\sin(B) sin(A+B)=sin(A)cos(B)+cos(A)sin(B)cos(A+B)=cos(A)cos(B)−sin(A)sin(B)
设 X X X为输入的sentence词编码与位置编码相加的结果
多头注意力层
然后将 X X X输入多头注意力中,其中自注意力机制如下图所示
首先将 X X X映射到 Q , K Q,K Q,K空间中,然后根据缩放点积进行打分,最后使用softmax的到概率,最后与value相乘的到输出结果
其中多头注意力的结构如图所示
其本质是采用多个 V , K , Q V,K,Q V,K,Q矩阵计算自注意力并进行拼接。
Add&Norm
然后将多头注意力的结果输入到Add&Norm层中,其中这部分采用残差连接的方式构成。
LayerNorm ( X + MultiHeadAttention ( X ) ) LayerNorm ( X + FeedForward ( X ) ) \begin{aligned} &\operatorname{LayerNorm}\left(X+\operatorname{MultiHeadAttention}(X)\right)\\ &\operatorname{LayerNorm}( X+ \operatorname{FeedForward}( X) ) \end{aligned} LayerNorm(X+MultiHeadAttention(X))LayerNorm(X+FeedForward(X))
并将输出结果输入Feed Forward中
Feed Forward
其中Feed Forward的结构如图所示
其数学表达为
max ( 0 , X W 1 + b 1 ) W 2 + b 2 \max(0,XW_1+b_1)W_2+b_2 max(0,XW1+b1)W2+b2
然后在将输出结果经过Add&Norm层输入到解码器中
解码器
带掩码的多头注意力层
因为在序列任务中,往往是从前往后开始进行的,为了防止提前知道以后的信息,所以使用了带掩码的多头注意力机制
根据下图可知
计算完缩放点积后与掩码矩阵相乘,在计算softmax并与v相乘。然后将结果输入到Add&Norm层中。
多头注意力层
接受来自上一层Add&Norm的输入并计算Q矩阵然后根据 Encoder 的输出计算得到 K, V,后续的计算与之前的一致。
预测
将解码器的输出输入到线性层,并使用softmax输出得到概率