每周论文18

本周论文:

  1. GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond
  2. Ordered Neurons- Integrating Tree Structures into Recurrent Neural Networks
  3. Cached Long Short-Term Memory Neural Networks for Document-Level Sentiment Classification
  4. Unified Language Model Pre-training for Natural Language Understanding and Generation
  5. Language Models are Unsupervised Multitask Learners
  6. MASS: Masked Sequence to Sequence Pre-training for Language Generation
  7. Gather-Excite: Exploiting Feature Context in Convolutional Neural Networks
  8. PSANet: Point-wise Spatial Attention Network for Scene Parsing
  9. CCNet: Criss-Cross Attention for Semantic Segmentation

[GCNet: Non-local Networks Meet Squeeze-Excitation Networks and Beyond]

提出一种新的对长距离依赖建模的方法,并结合了之前其他研究者的工作,抽象得到全局上下文建模(global context modeling)的框架。

目前长距离依赖建模有两种:一种是引入self-attention机制,获得query-dependent的全局上下文,如NL-Net;另一种则是query-independent的全局上下文,如SE-Net。

Simplified NL-Net

Motivation:通过对Non-local network的分析,发现网络实际上学到的是query无关的上下文,因此可以直接对NL-Net进行简化。

首先是对NL-Net的观察,通过可视化,以及统计得到的数据,可以发现,NL-Net对于每个query来说,其学到的全局信息差异很小。

同时,NL-Net由于这种query-dependent的长距离依赖建模,拥有较高的复杂度(平方级别)。因此首先我们可以对NL-Net进行简化。

原来的NL-Net是:

每两个feature之间计算一个attention分数。

将query-dependent去掉后,则有:

还可以将$W_{v}$移到外面,更进一步地简化:

Global Context Modeling Framework

通过对比近期相关的工作,作者将全局上下文建模的方法抽象出来,分为三个步骤:
a)global attention pooling 将全局的信息收集起来,伴随着一个全连接和softmax
b)feature transform via a 1x1 convolution Wv 将所获得的feature进行线性转换。
c)feature aggregation 将global feature与每个position融合。

形式化则有:

如果从这个角度去理解,那么SE-Net也是属于该框架的一种实例。

作者在该框架的基础上提出了新的实例,也即GC-Net,同时有NL-Net的高效建模的优点和SE-Net的计算效率高的优点。

第一,基本采用NL-Net的形式,简化成query-independent的形式,并且使用的是加的形式而不是SE-Net的rescale的形式,将global feature与每个位置融合。
第二,采用SE-Net的bottleneck的形式去减少参数和计算量,并且在此基础上多了一步layer norm使得模型更易训练,实践证明,layer norm能够提升表现。

对比

对比NL-Net:不同之处在于global attention pooling,用的是query-independent
对比SE-Net:不同之处在于fusion module(框架的第三步),使用的是addition而不是rescale;以及在bottleneck上做了一点改进,加了layer norm。

思考:
文章有意思的点是立足于实验观察,这点值得学习,从实践中发现问题。同时,应学会用抽象的思想去总结前人的工作(比如NL-Net实际上也是对前面的工作的抽象总结,实际上个人认为并没有什么大的创新),从一个更高的角度去看问题能将问题看得更清晰。

抽象出框架是有必要的吗?我看在这篇论文里面有些勉强,因为完全可以说inspired by SE-Net for the computation efficiency… 但非要抽象成框架,会不会只是要表现出对模型的理解够深?以及增加点内容?

以及query-dependent是否真的没必要?似乎在其他论文中的结论反而是相反的。


[Ordered Neurons: Integrating Tree Structures into Recurrent Neural Networks]

ICLR19 best paper。

在LSTM中引入了新的inductive bias,隐式对句子进行树的建模。

Motivation:
语言都有一定的树的结构而不是序列结构。前人研究表明,在NLP中引入树的结构有助于增强泛化,帮助减少长程依赖问题,能够获得更好的抽象表示。
一些方法包括增加监督信号,也即语法树等,但该方法有限制,如标注数据不足,在一些领域语法规则容易被打破(如推特);同时随着时间的推移,语法也在变化。
同时,一些研究也表明,有足够容量的LSTM在能够隐式地对句子进行树的建模。

因此在本文引入新的inductive bias,完全数据驱动(相对于显式构建树),隐式地对句子进行树的建模。这种归纳偏置促进了每个神经元内存储的信息的生命周期的分化。high-ranking的神经元保存长程的信息,在一个较长时间步内保存,而low-ranking则保存短程信息,能够快速被遗忘。引入cumulative softmax,一种新的激活函数来生成master input gate和forget gate 保证当一个神经元被更新/遗忘,其后的神经元都会被更新/遗忘。

ORDERED NEURONS

给定语言序列$S=\left(x_{1}, \dots, x_{T}\right)$以及对应的constituency tree,我们希望在计算时间步t的时候,隐状态$h_t$能包含该节点到根节点路径上所有节点的信息。直观上,我们希望该路径上的节点都能够被$h_t$的一部分神经元表示。由于$h_t$的维度是固定的,而路径上的节点则是动态的,因此一种最好的情况就是能够动态分配每个节点在hidden state的维度。

在上述思路的基础上,作者引入了ordered neurons,强制让神经元表示不同时间尺度上的信息。正如前面提到的,high-ranking的神经元保存的时间长,代表的就是接近树根的节点,而low-ranking的神经元保存时间短,代表的就是小的成分(如phrase)。原则是:要更新/遗忘high-ranking的神经元,应该先把low-ranking的神经元先更新/遗忘掉。

如图:

ON-LSTM (“Ordered Neurons LSTM”)

LSTM结构:

$\begin{array}{ll}{f_{t}=\sigma\left(W_{f} x_{t}+U_{f} h_{t-1}+b_{f}\right)} \\ {i_{t}=\sigma\left(W_{i} x_{t}+U_{i} h_{t-1}+b_{i}\right)} \\ {o_{t}=\sigma\left(W_{o} x_{t}+U_{o} h_{t-1}+b_{o}\right)} \\ {\hat{c}_{t}=\tanh \left(W_{c} x_{t}+U_{c} h_{t-1}+b_{c}\right)} \\ {h_{t}=o_{t} \circ \tanh \left(c_{t}\right)}\end{array}$

OH-LSTM与LSTM的不同在于修改了cell state的更新方式。

首先定义新的激活函数:

$\hat{g}$可以看做是二元gate的期望,而g将cell state分成两个segment $g=(0, \dots, 0,1, \dots, 1)$。

因为离散的方法不好优化,以及太过严格。具体的解释和证明在论文里。

引入两个新的gate,master forget gate和master input gate。forget gate的值单调递增;而input gate的值单调递减。

$\begin{aligned} \tilde{f}_{t} &=\operatorname{cumax}\left(W_{\tilde{f}} x_{t}+U_{\tilde{f}} h_{t-1}+b_{\tilde{f}}\right) \\ \tilde{i}_{t} &=1-\operatorname{cumax}\left(W_{\tilde{i}} x_{t}+U_{i} h_{t-1}+b_{\tilde{i}}\right) \end{aligned}$

新的更新规则:
$\begin{aligned} \omega_{t} &=\tilde{f}_{t} \circ \tilde{i}_{t} \\ \hat{f}_{t} &=f_{t} \circ \omega_{t}+\left(\tilde{f}_{t}-\omega_{t}\right)=\tilde{f}_{t} \circ\left(f_{t} \circ \tilde{i}_{t}+1-\tilde{i}_{t}\right) \\ \hat{i}_{t} &=i_{t} \circ \omega_{t}+\left(\tilde{i}_{t}-\omega_{t}\right)=\tilde{i}_{t} \circ\left(i_{t} \circ \tilde{f}_{t}+1-\tilde{f}_{t}\right) \\ c_{t} &=\hat{f}_{t} \circ c_{t-1}+\hat{i}_{t} \circ \hat{c}_{t} \end{aligned}$

master forget gate 控制的是erasing行为;master input gate则是控制writing行为。具体的例子见论文。$\omega_{t}$则是$\tilde{f}_{t}$与$\tilde{i}_{t}$的重叠部分,表示的是 相应的神经元段编码包含一些先前单词和当前输入单词$x_t$的不完整成分。

同时,master gates专注一些粗粒度的控制,因此没必要和hidden state一样的维度,分配小一些的维度$D_{m}=\frac{D}{C}$即可。因此每C-sized个chunk有同样的master gates。

思考:
设计很精巧,通过将神经元分化,隐式建模。更新规则部分我其实还没仔细去看,但该思想确实很有意思。


[Cached Long Short-Term Memory Neural Networks for Document-Level Sentiment Classification]

配合上一篇ON-LSTM看,发现他们之间具有相似之处。

本文在LSTM上引入cache机制,将memory切分为多个group并赋予不同的forget rate,使模型更好地保留全局的信息,对document级别的情感分类能够有更好的结果。

LSTM:

在本文中,实际上是使用了LSTM的变体,将input gate与forget gate合并为一个,也即:

Cached LSTM

改进LSTM,将memory分为多个group,每个group代表不同的长程依赖,分配不同的forget rate。直观上,高的rate代表了短程依赖,低的rate代表长程依赖。

将memory cell切成K块$\left\{G_{1}, \cdots, G_{K}\right\}$。因此有如下公式:

$\psi_{k}(\mathbf{z})$是压缩函数:

将forget rate压缩在一定范围$\left(\frac{k-1}{K}, \frac{k}{K}\right)$。

类似bi-LSTM,同样CLSTM可以有双向。在做分类时,只将代表长程依赖的那组取出来过softmax。

思考:
与Ordered Neuron相比,这里显式地将固定维度切分成多个组,相比而言Ordered Neuron更加灵活,但二者还是有相当的相似程度的,虽然任务和motivation不同。


[Unified Language Model Pre-training for Natural Language Understanding and Generation]

将pretrain扩展到生成领域,使用生成任务来对语言模型进行pretrain。

同时使用三种语言模型来进行pretrain。一种是bidirectional的,和bert一样;一种是从左到右/从右到左单向的,和GPT一样;另一种是做生成的,也即encoder端相互都attend到,而decoder端只能看到encoder部分和decoder的左边。

统一使用[MASK]的方法(bert)同时训练这三种语言模型,这样可以使用同一套训练流程同时训练三种模型。

本文的主要贡献就是将生成加进来了吧,并且效果还可以。其他并没有很大的创新点。


[Language Models are Unsupervised Multitask Learners]

大名鼎鼎的GPT2.0 通过增加更多层,增加更多数据,训练一个更好的语言模型,并且尝试在不fine-tune的情况下完成下游任务,并取得不错的效果。

全文都在讨论怎么获得数据以及怎么训练。实际上帮助并不大,但个人认为本文最大的贡献就是尝试去做生成,并且在zero-shot的情景下去探索language model的上限。

其他我没仔细看。


[MASS: Masked Sequence to Sequence Pre-training for Language Generation]

引入encoder-decoder结构来做pretrain,可以同时训练encoder和decoder,可以用于生成任务。 idea还是挺有意思的。

Motivation:
采用encoder-decoder框架能进一步更好地用于生成任务上,而不像bert和GPT那样只有一个encoder或decoder,没法对attention预训练,对生成任务不友好。

做法:在encoder端mask连续的词,然后使用transformer对其进行encode;然后再decoder端输入同样的句子,但是masked掉的正好和encoder相反,和翻译一样,使用attention机制去训练,但只预测encoder端被mask掉的词。

作者认为这样做的好处:
对encoder端的mask能够强制让encoder端更好地学习未被mask掉的词的意义,这样才能预测mask掉的词;对decoder端的input进行mask能够强制模型更多依赖于source端,而不是前面的input。

作者还将MASS与Bert/GPT做了对比,发现Bert/GPT是MASS的一个特例。MASS有一个超参k,控制mask掉的segment长度。当k=1时,则是BERT;当k=m,也即整个句子长度时则是GPT。

当k=1时,我们可以理解为decoder端没有input信息,全部信息来自encoder,和Bert对比一下,虽然在结构上不一样,但做的事情是一样的,此时decoder的角色就是bert里面的分类器。
当k=m时,实际上就是将encoder端的所有信息都mask掉了,此时decoder要预测只能靠decoder端的input,这实际上就是一个标准的语言模型。

在几个生成任务上的结果相当不错,我没仔细看。

思考:将bert和GPT抽象出来,作为其框架的一种特殊形式,这又和NL-Net有一些相似。


[Gather-Excite: Exploiting Feature Context in Convolutional Neural Networks]

另一种Gather-Distribute思想的实例。该模型同样是为了捕获长距离上下文,以提升表现。

分为两步:gather,将较大空间内的信息聚集起来,excite,将信息重新分发给local features。

Motivation:CNN的信息流动方式。每次抽取周围的信息聚合在一起,随着层数的增多逐渐抽象,其感受野也逐渐增大。本文提出的模型实际上就是在同一层内让每个点都感受到其周围更大空间的信息。

模型

模型定义:
输入:$x=\left\{x^{c} : c \in\{1, \ldots, C\}\right\}$
C代表C个feature maps,也即channel维。

定义selection operator:
$\iota(u, e)=\left\{e u+\delta : \delta \in[-\lfloor(2 e-1) / 2\rfloor,\lfloor(2 e-1) / 2\rfloor]^{2}\right\}$

u是输出的元素,e是extent ratio,代表的实际上就是一个窗口大小。

因此gather operator可以定义为映射函数:
$\xi_{G} : \mathbb{R}^{H \times W \times C} \rightarrow \mathbb{R}^{H^{\prime} \times W^{\prime} \times C}\left(H^{\prime}=\left\lceil\frac{H}{e}\right\rceil, W^{\prime}=\left\lceil\frac{W}{e}\right\rceil\right)$
$\xi_{G}(x)_{u}^{c}=\xi_{G}\left(x \odot \mathbf{1}_{\iota_{(u, e)}}^{c}\right)$

其实就是对该窗口内的元素进行了映射(如mean-pooling)。其中$u \in\left\{1, \ldots, H^{\prime}\right\} \times\left\{1, \ldots, W^{\prime}\right\}, c \in\{1, \ldots, C\}$

从上式可以看出,gather操作实际上就是对于每个输出u,其感受野为单个channel的一个窗口。如果该窗口恰好覆盖了整个空间,则称该gather操作有global extent。

而excite操作则是利用gather获得的上下文信息,更新每个feature。也即:

那么G是如何获得的?可以有两种,一种是无参数,另一种是有参数。

无参数GE

实际上就是mean-pooling。
则整个GE-Net为:

其中interp(·)代表了最邻近插值。实际上可以理解成,将一个较大窗口的信息都mean-pooling一下,然后该窗口的feature都用mean-pooling的值乘一下(因为最邻近的特点,该窗口的插值都是自身)。

当设计不同的e时,也即窗口大小,可以看到窗口越大,其表现越好。

有参数GE

采用strided depth-wise convolution。

同样越大的e越好:

并且表现会比无参数的更好。

实验表明,在整个模型的中间层或者后面层(有更多的channel)加GE会更好。

与SE-Net的关系

SE-Net可以看做是特殊的GE-Net。SE-Net的gather操作就是全局的mean-pooling;而在excite时多了一层全连接的网络(?论文说就是一层全连接,但似乎不是这样的)。

论文中还将SE-Net和GE-Net结合起来,发现有更大的提升,证明二者不是排斥的。

应用GE-Net的几个例子:

我的思考:
与SE-Net的关系密切(实际上就是同一拨人做的)。但这里强调的是channel之间没有联系,仅仅是通过扩大感受野,增强global的信息;而SE-Net则是强调的channel之间的联系,并没有考虑channel内部的关系,相当于GE-Net具有全局感受野。如果GE-Net有全局感受野,那么他比SE-Net就差在channel之间的联系了。


[PSANet: Point-wise Spatial Attention Network for Scene Parsing]

提出另一种解决local constraint的方案,也即使得feature之间能够建立长距离依赖。feature map上的每个位置通过attention map与其他点进行连接,同时信息流动是双向的,每个点同时进行收集与分发的操作。

通常而言,信息的aggregation可以形式化成:

$\mathbf{z}_{i}$是第i个位置的输出;$\mathbf{x}_{j}$是输入的feature map $X$。$\forall j \in \Omega(i)$ 是与i相关的所有位置的feature集合。$ F\left(\mathbf{x}_{i}, \mathbf{x}_{j}, \Delta_{i j}\right)$ 代表的是j到i的信息流动。$\Delta$ 代表的是相对位置信息。

可以将上述式子简化为:

其中$\left\{F_{\Delta_{i j}}\right\}$是位置相关的函数映射。

当一个feature map的位置很多时,$x_i$与$x_j$的pair将会很大。

因此将上式函数映射简化为:

也即$j$到$i$的信息流动只与$i$位置的feature以及$i$与$j$之间的相对位置有关。

同理,还可以将函数映射简化成:

也即信息流动只与$i$与$j$的相对位置以及$j$位置上的feature有关。

将上述两个简化函数结合起来,可以获得双向信息传播路径。也即:

此时我们可以得到:

第一项$F_{\Delta_{i j}}\left(\mathbf{x}_{i}\right)$encode了在其他位置上的信息在多大程度上能够帮助位置i(通过位置i的feature以及相对位置)。

第二项$F_{\Delta_{i j}}\left(\mathbf{x}_{j}\right)$所做的也即预测其他位置上的feature的重要性(通过相对位置,以及位置j的feature)。

如下图:

上述两个F实际上可以看做是在预测一个attention的值,去做aggregation。也即:

问题在于如何获得a?
下图是较为清晰的一个框架图:

可以看出是通过多个CNN来获得attention矩阵的。

上下两条线很类似。第一步是先压缩channel以减少计算量(C2<C1)。第二步扩展channel为$(2H-1)\times(2W-1)$,下面解释为什么。接下来在重新获得$H\times W$的channel维,该channel维的每一维所代表的就是一个feature(共有$H\times W$个feature)的attention值。最后乘起来再concat一下,获得最后的output。

为什么是$(2H-1)\times(2W-1)$的channel维,因为希望将该feature剪裁一下变成$H\times W$,正好可以表示相对位置。

对于一个$(2H-1)\times(2W-1)$的feature可以展开成二维的,其中位置i为中心,仅有$H\times W$个有用。具体而言,在第k行第l列的位置i,则有用的矩阵是从$H-k$行和$W-l$列开始的。这个做法倒挺有意思的。

与NL-Net的关系:NL-Net没有考虑相对位置信息。

思考:
该方法似乎确实相比NL-Net的计算量小,虽然看起来也很大。NL-Net的计算量是(HW)^2。而这里的数量级是HW。究其原因,是因为attention是预测出来的。

从获得attention矩阵的方式可以看出,channel与channel之间有交互。

attention矩阵是预测出来的($1\times 1$的convolution),而不是一对pair计算出来的。似乎就没那么有道理。

并且,上下两条支线的操作都是一样的,只是将其解释为双向信息流动;那还可以解释成像Transformer那样,多个head,将同一个表示映射到多个隐空间中增强表示。之前理解错了、


[CCNet: Criss-Cross Attention for Semantic Segmentation]

对NL-Net的改进,通过引入十字交叉的attention和recurrent结构,减少了计算量,同时使得模型能够捕获长距离依赖,以及提升了模型表现。

Motivation:
NL-Net会生成一个很大的attention map,其复杂度为${\mathcal{O}}((H \times W)\times(H \times W))$。

主要做法,将该position-wise的attention分解成两步:第一步是每个点只和其同一行和同一列的进行attention,将attention的操作循环多次,达到每个点间接和其他点都做了attention。其复杂度则为 $\mathcal{O}((H \times W) \times(H+W-1))$

两种方法的对比:

注意到recurrent的结构中参数是共享的。

具体的框架:

先进行降维,做完criss-cross attention后的output与原先的x拼起来,再过CNN等进行融合。

Criss-Cross Attention

过三个线性层得到QKV(和transformer类似);接着Q与K做纵横交叉的attention,获得softmax,接着再和V对应的位置相乘。

具体而言:
输入:$\mathbf{H} \in \mathbb{R}^{C \times W \times H}$
过线性层:$\{\mathbf{Q}, \mathbf{K}\} \in \mathbb{R}^{C^{\prime} \times W \times H}$
attention分数:$\mathbf{A} \in \mathbb{R}^{(H+W-1) \times W \times H}$
与u元素做attention的feature集合,也即同一行或同一列的feature:$\boldsymbol{\Omega}_{\mathbf{u}} \in \mathbb{R}^{(H+W-1) \times C^{\prime}} \cdot \mathbf{\Omega}_{\mathbf{i}, \mathbf{u}} \in \mathbb{R}^{C^{\prime}}$
做attention:$d_{i, u}=\mathbf{Q}_{\mathbf{u}} \mathbf{\Omega}_{\mathbf{i}, \mathbf{u}^{\top}}$
再做softmax,最终获得output:$\mathbf{H}_{\mathbf{u}}^{\prime}=\sum_{i \in\left|\mathbf{\Phi}_{\mathbf{u}}\right|} \mathbf{A}_{\mathbf{i}, \mathbf{u}} \mathbf{\Phi}_{\mathbf{i}, \mathbf{u}}+\mathbf{H}_{\mathbf{u}}$
$\boldsymbol{\Phi}_{\mathbf{i}, \mathbf{u}}$与$\boldsymbol{\Omega}_{\mathbf{u}}$是同一集合。

Recurrent Criss-Cross Attention

多做几次,每次都共享,就是recurrent了。
当循环次数是2时,每个点都能够attend到其他任何点了。

思考:
通过纵横来间接attend到所有点,这个想法还蛮有趣的。并且减少了计算量。就是这种纵横的方法代码要怎么实现?有些好奇。
同时本文的图也很漂亮,每个图都恰到好处,可以通过图就大致理解本文在讲什么。