Transformer
Embedding
把词变成词向量
位置编码Positional Encoding
$$
PE(pos,2i)=sin(pos/10000^{2i/d_{model}})
\ PE(pos,2i+1)=cos(pos/10000^{2i/d_{model}})
\ pos:词语索引位置
\ i:dim_index//2 \ \ \ dim_index为词向量的索引
\ d_{model}:词向量长度
$$
通过sin和cos转换公式可以得出相对位置
$$
sin(\alpha+\beta)=sin(\alpha)cos(\beta)+sin(\beta)cos(\alpha) \
cos(\alpha+\beta)=cos(\beta)cos(\alpha)-sin(\alpha)sin(\beta) \
PE(pos+k, 2i)=PE(pos,2i)PE(k,2i+1)+PE(k,2i)PE(pos,2i+1) \
PE(pos+k, 2i+1)=PE(k,2i+1)PE(pos,2i+1)-PE(pos,2i)PE(k,2i)
$$
Multi-Head Attention
把词向量经过线性变换生成Q,K,V,再把Q,K,V分别切分为多个部分这些多个部分,同时进入Self-Attention计算,之后进行合并。
Multi-Head
为了可以注意到不同子空间的信息,捕捉到更加丰富的特征信息
Self-Attention
$$
Attention(Q,K,V)=softmax(\frac {QK^T}{\sqrt {d_k}})V
$$
点积缩放
为防止点积后数值过大,再经过softmax是大部分数据变为0对点积之后的结果除以根号d_k(为向量长度),假设q,k分别都是均值为0,方差为1的向量那么q,k点积之后的均值为0,方差为d_k
$$
设:X=[q_1,q_2,…,q_{d_k}]和Y=[j_1,j_2,…,j_{d_k}]
\ 满足:均值E(q_i)=0,E(j_i)=0\ \ \ \ \ \
\ 方差D(q_i)=1,D(j_i)=1 \
\ E(q_ij_i)=E(q_i)E(j_i)=0
\ D(X)=E(X^2)-E^2(X) \
\ D(q_ij_i)=E(q_i^2j_i^2)-E^2(q_ij_i)
\ =E(q_i^2)E(j_i^2)-0
\ =[E(q_i^2)-E^2(q_i)][E(j_i^2)-E^2(j_i)]
\ =D(q_i)D(j_i)=1
\ E(XY)=E(q_1j_1)+E(q_2j_2)+…+E(q_{d_k}j_{d_k})
\ =0+0+…+0=0
\ D(XY)=D(q_1j_1)+D(q_2j_2)+…+D(q_{d_k}j_{d_k})
\ =1+1+…+1=d_k
$$
$$
令:Z=XY \
D(\alpha Z)=1=\alpha^2D(Z) \
\alpha=\frac {1}{\sqrt {d_k}}
$$
ADD & Norm
残差网络
残差网络可以有效的减少深度神经网络梯度消失的问题,使训练层数到达比较深的层次
LayerNorm
因为当前batch的分布不能代表整个数据集的分布,所以不适合BatchNorm,进而退而求其次选择LayerNorm,尽可能是数据分布再均值为0,方差为1的范围内,可以更好的训练
Feed Forward
前馈神经网络为一个两层的全链接层
Masked
训练时模拟输入预估结果,可以使对每个词的预估结果进行并发训练
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zoubinbf@163.com