注意力机制总结 (4)

$$\begin{aligned}
&p_{i}=n \times \operatorname{sigmoid}\left({\mathbf{v}}_{p} \cdot \operatorname{tarh}\left(\mathbf{W}_{p} {\mathbf{s}}_{i-1}\right)\right)\\
&e_{i, t}=\operatorname{score}\left({\mathbf{s}}_{i-1}, {\mathbf{h}}_{t}\right) \exp \left(-\frac{\left(t-p_{i}\right)^{2}}{2 d^{2}}\right)
\end{aligned}$$ 

其中${\mathbf{v}}_{p}$,$\mathbf{W}_{p}$为待学习的参数,$d$为人工指定的固定常量。

 

(1)为什么用Local?

Basic Attention机制中在计算上下文向量$c_i$时,需要考虑编码器的所有隐向量(背后逻辑是要减小噪音,进一步缩小重点关注区域)。当输入序列较长时(如一段话或一篇文章),计算效率较低。Local Attention在计算上下文向量$c_i$时,只需要考虑编码器的部分隐变量:首选预测编码器端对齐的位置$p_i$,然后基于位置$p_i$选择一个窗口来计算上下文向量$c_i$。

(2)怎么用Local?

文中提了两个方案 local-m 和 local-p:

local-m 基于的假设生硬简单,就直接 pass了。local-p 有一个预估操作,预计当前时刻应该关注输入序列(总长度为S)的什么位置 pt(引入了两个参数向量,vp,wp),然后在 alignment function 中做了一点儿调整,在 softmax 算出来的attention wieght 的基础上,加了一个以 pt 为中心的高斯分布来调整 alignment 的结果。

作者最后阐述 local-p + general(score-function 参考multiplicative attention 中的 general 版本)的方式效果是最好的。但从global/local 视角的分类来看,更常用的依然还是 global attention,因为复杂化的local attention 带来的效果增益感觉并不大。

 

虽然Local Attention可以提高计算效率,但是会带来两个问题

(1)编码器的输入序列长度$n$并不是很长时,计算量并没有显著减小。

(2)位置$p_i$的预测并不是非常准确,这就直接影响了计算attention的准确性。

从global/local 视角的分类来看,更常用的依然还是 global attention,因为复杂化的local attention 带来的效果增益感觉并不大。

 

 

 

(3)按generate context vector function分

《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》

Hard Attention          
hard attention 是一个随机采样,采样集合是输入向量的集合,采样的概率分布是alignment function 产出的 attention weight。因此,hard attention 的输出是某一个特定的输入向量。      
Soft Attention          
soft attention 是一个带权求和的过程,求和集合是输入向量的集合,对应权重是 alignment function 产出的 attention weight。hard / soft attention 中,soft attention 是更常用的,因为它可导,可直接嵌入到模型中进行训练,hard attention 文中 suggests a Monte Carlo based sampling approximation of gradient。      

 

3.attention的应用 3.1 Self-Attention (1)为什么要Self-Attention?

可变长文本的向量表示方法一般有两种:

Basic Combination:average,sum

Neural Combination:RNN、CNN

    RNN   CNN  
特点  

RNN 的长距离依赖比较 tricky:RNN 很强大(可以作为 encoder 对长度任意的序列进行特征抽取,基于特征抽取的能力可以胜任分类任务,另一方面可以作为Generators 学习 Language Model),其实核心就是长距离依赖(gate architectures - 线性操作让信息可以保持并流动,并选择性地让信息通过),可以对长度任意的序列进行表达,但是这种方式还是比较 tricky。并且这种序列建模方式,无法对具有层次结构的信息进行很好的表达。

RNN缺点:

并行化困难;

不能解决长距离依赖

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgzwzg.html