transformer encoder整体结构梳理

transformer encoder整体结构梳理

transformer encoder整体结构梳理

下面用公式把一个transformer block的计算过程整理一下:
(1)字向量与位置编码
X=EmbeddingLookup(X)+PositionalEncodingX=EmbeddingLookup(X)+PositionalEncoding
XRbatchsizeseq.len.embed.dim. X\in R^{batch size * seq.len.*embed.dim.}
(2) 字注意力机制
Q=Linear(X)=XWQQ = Linear(X)=XW_Q
K=Linear(X)=XWKK = Linear(X)=XW_K
V=Linear(X)=XWVV = Linear(X)=XW_V
Xattention=SelfAttention(Q,K,V)X_{attention}=SelfAttention(Q,K,V)
(3) 残差连接与Layer Normalization:
LayerNormalization的作用是把神经网络中隐藏层归一为标准正态分布,也就是i.i.d独立同分布,以起到加快训练速度,加速收敛的作用。
Xattention=X+XattentionX_{attention}=X+X_{attention}
Xattention=LayerNorm(Xattention)X_{attention}=LayerNorm(X_{attention})
(4)FeedForward,其实就是两层线性映射并用**函数**,比如说ReLU:
Xhidden=Activate(Linear(Linear(Xattention)))X_{hidden}=Activate(Linear(Linear(X_{attention})))
(5) 重复(3),可以重复N次,N表示transformer block的个数:
Xhidden=Xattention+XhiddenX_{hidden}=X_{attention}+X_{hidden}
Xhidden=LayerNorm(Xhidden)X_{hidden}=LayerNorm(X_{hidden})
XhiddenRbatchsizeseq.len.embed.dim. X_{hidden}\in R^{batch size * seq.len.*embed.dim.}

以上就是transformer的编码器的部分,值得注意一点是,经过自注意力机制,一句话中的每个字都含有这句话中其他所有字的信息,那么我们可以添加一个空白字符到句子的最前面,让句子中的所有信息向这个空白字符(hidden state)汇总,然后再映射成想要分的类别。