目录
reference:建议看李沐大神b站视频
1、attention
点积式的attention机制
假设Q是(n,dk)维度的,K是(m,dk)维度的,点积后经过scale变换后,放到softmax中得到输出query对于key的结果(n,m);出来的结果与V(m,dv)点积,得到一个(n,dv)的结果,每一行就是需要的一个输出。
scale是因为,dk比较大时,某两个值之间相对差距太大,其他值大部分都靠近0。不利于梯度计算
mask:是为了mask掉t时间后的k的值,具体操作是在t后面的数都换成很大的负数。
多头注意力机制
简单就是将q、k、v利用线形层投影到某一低维度,之后再concat通过linear保证维度不变,这是因为dot-procuct可学习的参数很少,但是投影层linear可以学习。
2、transform模型里面怎么使用注意力机制
编码器的输入的注意力
编码器的input,得到相同的K、Q、V,这就是自注意力
这个注意力机制,输出就是加权和,权重就是向量之间的相似矩阵
解码器的注意力
masked注意力机制,t时刻后的设置为0
解码器的另一个注意力
query是解码器里上一个attention的输出,k和v来自编码器的输出。
这个注意力的输出,就是来自value的加权和,权重取决于q和k的相似度。
3、feed forward
feed forward本质上是一个MLP,三层的。
attention+feed forward 与 rnn,如何传递序列信息。
4、embedding
输入token变换成一个向量,d是512。编码器、解码器和softmax前的embedding权重是一样的。
embedding 层权重有一个scale,乘以,long固定住
5、positional encoding
因为attention本身没有时序,sin、cos得到512维度的向量表达位置信息,加入embedding
6、Norm
layer_norm针对是batch做的归一化,相较于BN是针对feature做的归一化
layer_norm对每个样本做均值方差,对于梯度的李普希兹常数。
为什么self-attention
原文从计算效率角度出发的
正则化
res-dropout
label_smoothing