paper 4:Attention is all you need
原博链接: 论文解读:Attention is All you need - 知乎 (zhihu.com)
注意力机制可以分为三步:一是信息输入;二是计算注意力分布α;三是根据注意力分布α 来计算输入信息的加权平均
Attention用于计算query与输入$X$的“相关程度”。
例如在中译英(?)翻译过程中,不同的英文对中文的依赖程度不同。
$Attention:query\ space \times key-value\ pairs\ space \rightarrow attention\ vector\ space, $
$(q, (k_i, v_i)) \mapsto output$
其中$q$指query,$(k_i, v_i)$指key-value pair.
step 1: 计算$q$和$k$的相似度$s$
$$ s(q, k_i), i=1, 2, \ldots, m $$
step 2: 将上一步的相似度进行softmax操作, 得到归一化的权重$\alpha_i$
$$ \alpha_i = \frac {e^{s(q, k_i)}} {\sum_{j=1}^m e^{s(q, k_j)}} $$
step 3: 针对计算出来的权重$\alpha_i$, 对V中所有的values进行加权求和, 得到attention向量
$$ output = \sum_{i=1}^m \alpha_i V_i $$
注: 这种编码方式成为soft attention. 进一步可细分为: 普通模式(x=key=value)和键值对模式(x=key!=value)
回过头来看step 1的相似度计算, 有如下四种:
- 点乘 dot product: $s(q, k_i) = q^T k_i$ (可增加缩放)
- 权重 general: $s(q, k_i) = q^T W k_i$
- 拼接权重 concat: $s(q, k_i) = W [q; k_i]$
- 感知机 percepton: $s(q, k_i) = V^T \tanh (Wq+Uk_i)$
attention机制的变种
1. hard attention
仅选取最高概率的输入信息
在注意力分布式上随机采样
基于最大采样或随机采样, 使得最终的损失函数与注意力分布之间的函数关系不可导,因此无法使用反向传播算法进行训练.
因此, 为了应用反向传播算法, 一般使用soft attention. 而hard attention利用强化学习来训练.
2. key-value attention
3. multi-head attention
利用多个查询Q=[q1, ... , qM]来平行地从输入信息中选取多个信息. 每个attention关注输入信息的不同部分, 然后再进行拼接
![]()
4. self-attention (在处理长距离序列时强大)
(1)CNN和RNN都是对变长序列的一种局部编码, CNN基于N-gram的局部编码, 而对于RNN, 由于梯度消失问题也只能建立短距离依赖
(2) 为解决局部编码的短距离依赖问题, 可以: 一时增加网络层数, 二是使用全连接网络
全连接网络无法处理可变长度的输入序列
这是我们可以利用attention机制动态地生成不同连接的权重,
(3) self-attention的计算流程
输入X=[x1, ..., xN], 通过线性变化得到查询向量需求
$Q=W_Q X$
$K=W_K X$
$V = W_V X$
从上面看出, Q是对X自身的变换, 而传统的attention中, Q来自外部
attention向量计算公式为
$$ h_i = att((K,V), q_i) = \sum _{j=1}^N \alpha_{ij} v_j = \sum_{j=1}^N softmax(s(k_j, q_i))v_j$$
在self-attention, 通常使用缩放点积来作为attention打分函数, 输出向量序列可以写为:
$$ H = V softmax(\frac{K^TQ}{\sqrt{d_k}}) $$
其中 $d_k$ 为每个隐向量 $k_i$ 的维数.

浙公网安备 33010602011771号