每周论文8

1️⃣[DiSAN: Directional Self-Attention Network for RNN/CNN-Free Language Understanding]

提出了两种attention机制,即 multi-dimentional attention和directional self-attention,在此基础上提出有向自注意力网络(directional self-attention network)

Multi-dimensional Attention

与传统的方法不同的是,对于每个词对,attention出来的不是标量而是向量。

计算公式:

$f$的维度与$q$相同,每一维代表的是$x_i$在该维对$q$的重要性。也即feature-wise的attention。因此对于$q$而言,其获得的加权求和向量为:

使用feature-wise的attention能够解决一次多义的问题,因为能够计算每一维的重要性,在不同的context下有不同的重要性。

将其应用于self-attention中,有两种变体:
①token2token

因此x在交互完有:

②source2token

也即$x_i$没有和其他元素有交互。
可用作获得sentence encoding:

Directional Self-Attention

使用mask达到有向性这一目的:通过mask矩阵将位置/方向编码进attention,解决时序丢失问题
首先将x过一层获得新的h表示:

接着使用token2token求attention,这里为了减少参数作了一定改动,将W换成c,tanh替换σ。

$\textbf{1}$是全1的向量。M就是mask矩阵,代表i与j是否连通,Mask矩阵有:

也即:

首先mask掉自己,第二:分别mask掉forward和backward,类似biLSTM,只和前面或后面的交互。

Directional Self-Attention Network

在上述两个方法的基础上,此时已获得了上下文相关的$s_i$,再引入fusion gate:

整个流程:

将前向和反向的表示拼接起来,获得最终的表示$[u^{fw};u^{bw}]$:

对于所获得的每一个表示,通过source2token,获得最终的句子表示。

这一点论文也提到了,非常类似bi-LSTM。


2️⃣[Targeted Dropout]

一种网络剪枝方法,想法简单易实现。
简单说,在每次更新时对最不重要的weight或者unit进行随机dropout。

Targeted Dropout

Dropout

给定输入X,权重W,输出Y M为dropout的mask矩阵。
unit dropout:

weight dropout:

也即drop掉的是layer之间的connection。

Magnitude-based pruning

剪枝通常对权重最小的进行剪枝,也即保留topk个最大的权重。

Unit pruning:直接剪掉的是一整列,也即一个unit

Weight pruning:对W的每个元素进行剪枝。注意是对每行的topk进行保留

可以理解成对一个unit来说,保留最高的k个connection。

方法

结合dropout和剪枝。
主要思想:首先选择N-k最不重要的element,由于我们希望这些low-value的元素有机会在训练过程中变得重要,因此我们对这些element进行随机dropout。

引入targeting proportion γ和drop probability α,亦即:选择最低的γ|θ|个weight,再根据α进行dropout。
这样做的结果是:减少重要的子网络对不重要的子网络的依赖。

附录

①dropout的intuition:减少unit之间的相互适应。when dropout is applied to a unit, the remaining network can no longer depend on that unit’s contribution to the function and must learn to propagate that unit’s information through a more reliable channel。
也可以理解成:使得unit之间的交互信息达到最大,在失去某个unit的时候影响不会那么大。

②targeted dropout intuition:the important subnetwork is completely separated from the unimportant one。假设一个网络由两个不相交的子网络组成,每个都能输出正确的结果,总的网络是这两个网络的平均。我们通过对不重要的子网络进行dropout(也即往子网络里加noise,会破坏该子网络的输出,由于重要的子网络已经能够输出正确的结果,因此为了减少损失,我们需要减少不重要网络的输出到0,也即kill掉该子网络,并且加强这两个网络的分离。(为什么不直接舍弃呢?因为是在训练过程中,有可能会有变化)
这个解释还是没完全懂。


3️⃣[A2-Nets: Double Attention Networks]

发表于NIPS2018,个人认为很有启发。提出一种新的attention机制,基于“收集-分发”的思想,能够让CNN获得更大的感受野。

Motivation

CNN本身主要是捕获局部特征与关系,但对于长距离之间的关系只能通过堆叠多几层才能实现。但这样需要更高的计算量,且容易过拟合;同时,远处的特征实际上是来自好几层的延迟,导致推理的困难。

通过将feature收集起来,然后分发下去,使得feature之间有交互,让CNN获得更大的感受野,能够捕获长距离的特征。

方法

也即:

X是所有输入,$v_i是$local feature。

The First Attention Step: Feature Gathering

对于两个feature map A,B,有:

其中:

如果A、B都来自同一个X,将B归一化softmax,就类似transformer的attention。其中上式的最右边是外积的形式。

我们将G拆分成向量形式:

同时将B重写成行向量形式,则有:

则会有:

上式让我们有一个新的理解角度:G实际上就是 a bag of visual primitives。每个$g_i$是所有local feature加权求和,其中$b_i$是求和的weight。

因此我们对B做softmax,保证权重为1:

The Second Attention Step: Feature Distribution

在获得了全局的feature G后,现在根据local feature去获取全局feature的部分,这通过一个权重控制,也即$v_i$(local feature)的每一维作为权重。可以不将local feature $v_i$归一化,但归一化能更好地converge。

The Double Attention Block

最终得到double attention block:

整个流程:

所以其实是有三个convolution layer。

上式还可以写成:

数学上等价,但计算上差很多。第一个式子会有更低的复杂度。

思考

虽然用了attention,但这里和Transformer还是有非常大的区别的。Transformer每个元素都和其他元素有交互,通过直接的计算得到权重。而这边的权重由feature本身来决定。并没有直接的交互。