一、attention
1.1循环神经网络的不足:
- 长距离衰减问题
- 解码阶段,越靠后的内容,翻译效果越差
- 解码阶段缺乏对编码阶段各个词的直接利用
1.2 attention在机器翻译的优点
- 使用全部token信息而非最后时刻的context信息。由此在解码时每时刻可以计算attention权重,让输出对输入进行聚焦的能力,找到此时刻解码时最该注意的词。
- attention的计算是序列各tokens的v向量和attention权重加权求和,每个词关注到所有词,一步到位,不存在长距离衰减
- 可以关注到不同位置的词语,而且使用多头和多层注意力、加入FFNN,表达能力更强。
1.3 self Attention和循环神经网络对比
LSTM:非词袋模型,含有顺序信息,无法解决长距离依赖,无法并行,没有注意力机制
Self Attention:词袋模型,不含位置信息,没有长距离依赖,可以并行,有注意力机制。
1.4为什么求内积之后除以 d \sqrt{d} d
上面计算相似度s=<q,k>时,s要除以 ( d k e y ) \sqrt(d_{key}) (dkey)(Key 向量的长度)。原因是词向量embedding维度过高时,s过大,softmax函数会进入饱和区。例如:
对于两个d维向量q,k,假设它们都采样自“均值为0、方差为1”的分布。Attention是内积后softmax,主要设计的运算是 e q ⋅ k e^{q⋅k} eq⋅k,我们可以大致认为内积之后、softmax之前的数值在 − 3 d -3\sqrt{d} −3d到 3 d 3\sqrt{d} 3d这个范围内,由于d通常都至少是64,所以 e 3 d e^{3\sqrt{d}} e3d比较大而 e − 3 d e^{-3\sqrt{d}} e−3d比较小,softmax函数进入饱和区。这样会有两个影响:
- 带来严重的梯度消失问题,导致训练效果差。
- softmax之后,归一化后计算出来的结果a要么趋近于1要么趋近于0,Attention的分布非常接近一个one hot分布了,加权求和退化成胜者全拿,则解码时只关注注意力最高的(attention模型还是希望别的词也有权重)
相应地,解决方法就有两个:(参考苏剑林《浅谈Transformer的初始化、参数化与标准化》)
- 像NTK参数化那样,在内积之后除以 d \sqrt{d} d