> 注意力机制逐渐在NLP中得地位变得越来越重要,上有Google的"Attention is All You Need"论文,下有 Tranformer、BERT等强大的NLP表征模型,attention 在 NLP 的地位就像卷积层在图像识别一样变得不可缺少的一部分。在这里,总结下注意力机制,并回顾下最近的一些相关的研究进展。
什么是注意力机制
注意力机制就是对输入权重分配的关注,最开始使用到注意力机制是在编码器-解码器
(encoder-decoder)中, 注意力机制通过对编码器所有时间步的隐藏状态做加权平均来得到下一层的输入变量:
注意力机制的通用表达式可以写为:
$$\boldsymbol{O} = \text{softmax}(\boldsymbol{Q}\boldsymbol{K}^\top)\boldsymbol{V}$$
注意力机制广义上可以理解成一个由查询项矩阵 $\boldsymbol{Q}$ 和所对应的键项 $\boldsymbol{K}$ 和 需加权平均的值项 $\boldsymbol{V}$ 所构成的一层感知机(softmax
求和)。
这里我们可以从两个视角来看:
- 从工程学上理解 从工程学上简单理解,我们可以把注意力机制理解成从数据库(内存槽)
Q
中通过键K
和值V
得到输出O
,由于V
是输入,所以可以理解注意力机制的核心就是如何构建数据库Q
和键值K
的方法。
- 从算法上理解 从算法上来理解,我们可以把注意力机制和池化做类比,即将
卷积神经网络
中的池化看成一种特殊的平均加权的注意力机制
,或者说注意力机制是一种具有对输入分配偏好的通用池化方法(含参数的池化方法)。
从构建查询项看注意力机制
最早的Attention的提出
在最早提出注意力机制的论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,其主要是用来作翻译模型,解决翻译核对齐问题(论文采用了seq2seq+attention)。文中QK
的计算表示:
{% raw %} $$\boldsymbol{c}{t'} = \sum{t=1}^T\alpha_{t' t}\boldsymbol{h}t$$ $$\alpha{t' t} = \text{softmax}(\sigma(\boldsymbol{s}_{t' - 1}, \boldsymbol{h}t))$$ $$\sigma(\boldsymbol{s}{t' - 1}, \boldsymbol{h}_t) = \boldsymbol{v}^\top \tanh(\boldsymbol{W}s \boldsymbol{s}{t' - 1} + \boldsymbol{W}_h \boldsymbol{h}_t)$$ {% endraw %}
$\boldsymbol{c}_{t'}$表示输出变量,$\boldsymbol{h}t$为隐藏层,{% raw %}$\alpha{t' t}${% endraw %}表示一个权重的概率分布,即QK
得softmax值,这里得查询项矩阵Q
采用了一个{% raw %}$\tanh(\boldsymbol{W}_s \boldsymbol{s} + \boldsymbol{W}_h \boldsymbol{h})${% endraw %},所以$\sigma$其本质在是一个单层的感知机。由于这种注意力机制由Bahdanau在seq2seq中正式提出,也叫循环注意力机制,更加$\sigma$函数即其参数不同我们可以把注意力机制分成多种形式。
最基础形态的注意力机制
从上面我们将注意力机制抽象出来即:
{% raw %} $$\bolds