transformer–编码部分
-
Positional Encoding
- 位置嵌入:就是在输入中加入包含句子中特定位置信息的维向量
- 位置嵌入的维度与输入时间序列的维度相同,为 [序列长度, 所处位置]。
- 一般输入的为多时次的时间序列,维度为[ time_num, feature_num ]
- 在论文中使用了sin和cos的线性变换来提供模型的位置信息:
- PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos, 2i)=sin(pos/10000^{2i/d_{model}})PE(pos,2i)=sin(pos/100002i/dmodel?)
- PE(pos,2i+1)=cos(pos/100002i/dmodel)PE(pos, 2i+1)=cos(pos/10000^{2i/d_{model}})PE(pos,2i+1)=cos(pos/100002i/dmodel?)
- 上式中,pos质的是一剧中某个字的位置,取值范围为[ 0, 序列长度 ],i每一个时次的特征序号,取值范围为[0, feature_num/2],dmodeld_{model}dmodel?是时间序列的特征数。
- 将位置矩阵与输入矩阵相加
-
self-attention
- 对于输入的时间序列矩阵X,通过与Positional Encoding将其相加,该矩阵的完整输入。第t个时次的向量记做xtx_txt?
- 在transformer中有三个权重矩阵,分别为查询矩阵(WQW_QWQ?)、键矩阵(WKW_KWK?)、值矩阵(WVW_VWV?)
- q:i=WQXiq_{: i}=W_QX_iq:i?=WQ?Xi?
- k:i=WKXik_{: i}=W_KX_ik:i?=WK?Xi?
- v:i=WVXiv_{: i}=W_VX_iv:i?=WV?Xi?
- 上述多个 q、k、v的列的聚集会变成一个完整的矩阵
- self-attention layer
- weights: α;j=Softmax(KTq:,j)∈Rm\alpha_{ ;_j}=Softmax(K^Tq_{:,j})\in R^mα;j??=Softmax(KTq:,j?)∈Rm
- 其中α\alphaα的维度为m,为一次所输入时次的总和
- V矩阵与α\alphaα矩阵相乘得到上下文矩阵,得到Context vector
- c:,j=α1,jv:,1+…+am,jv:,m=Vα:,jc_{:,j}=\alpha_{1,j}v_{:,1}+…+a_{m,j}v_{:,m}=V\alpha_{:,j}c:,j?=α1,j?v:,1?+…+am,j?v:,m?=Vα:,j?
- 注意力矩阵α\alphaα和上下文矩阵CCC的维度与X矩阵的形状一致
- attention head的计算如下:
- Z=softmax(Q?KTdk)?VZ=softmax(\frac{Q*K^T}{\sqrt{d_k}})*VZ=softmax(dk??Q?KT?)?V
-
多头注意力机制
- 就是定义多个Q,K,V矩阵,得到多组(W0QW0K,W0V)(W_0^{Q}W_0^{K},W_0^{V})(W0Q?W0K?,W0V?), (W1QW1K,W1V)(W_1^{Q}W_1^{K},W_1^{V})(W1Q?W1K?,W1V?),……
- 每一个头可以得到一个矩阵Z,因此多头注意理解机制可以得到:{ Z0,Z1,…,Zn{Z_0,Z_1,…,Z_n}Z0?,Z1?,…,Zn?}
-
残差连接
-
残差连接
-
将输入与self attention的输出相加起来进行下一步的计算:
-
X+SelfAttention(Q,K,V)X+Self Attention(Q, K, V)X+SelfAttention(Q,K,V)
-
Layer Normalization
- 在神经网络的隐藏成中设置标准化层,可以加快训练速度,加速收敛:
- 公式如下:
- layerNorms(x)=xi,j?μσj2+?layerNorms(x)=\frac{x_{i,j}-\mu}{\sqrt{\sigma_j^2+\epsilon}}layerNorms(x)=σj2?+??xi,j??μ?
-
transform层的编码部分的整体结构:
-
- 位置编码
- Xpos=X+positionEncodingX_{pos}=X+position EncodingXpos?=X+positionEncoding
- 位置编码
-
- 自注意力机制
- Q=linear(X)=XWQQ=linear(X)=XW_QQ=linear(X)=XWQ?
- K=linear(X)=XWKK=linear(X)=XW_KK=linear(X)=XWK?
- V=linear(X)=XWVV=linear(X)=XW_VV=linear(X)=XWV?
- Xattention=SelfAttention(Q,K,V)X_{attention}=SelfAttention(Q,K,V)Xattention?=SelfAttention(Q,K,V)
- 自注意力机制
-
- self-attention残差连接与Layer Normation
- Xattention=X+XattentionX_{attention}=X+X_{attention}Xattention?=X+Xattention?
- Xattention=LayerNorm(Xattention)X_{attention}=LayerNorm(X_{attention})Xattention?=LayerNorm(Xattention?)
- self-attention残差连接与Layer Normation
-
- 进行前向传递:
- Xhidden=Linear(ReLU(linear(Xattention)))X_{hidden}=Linear(ReLU(linear(X_{attention})))Xhidden?=Linear(ReLU(linear(Xattention?)))
- 进行前向传递: