Non-local Neural Networks
行为识别:Non-local Neural Networks论文笔记
abstract
卷积or循环网络通常都是处理local neighborhood,但在本文中,我们提出non-local 操作来捕获long-range dependencies。
实验数据:Kinetics和charades datasets
introduction
如何捕获long-range dependencies是dnn中的主流。对于序列数据,一般用循环操作,对于图像数据,用堆叠的卷积+大感知野来捕获。但卷积和循环操作都是对local neighborhood处理,只有反复进行这类操作才能得到long-range dependencies。但反复操作的缺陷:1)computationally inefficient 2)optimization difficulties。
由此本文提出的non-local 操作,我们的方法的特点:efficient,simple,generic component。
non-local advantages:1)可以捕获 two positions 的关联,而不管它们的距离如何 2)efficient,即使只使用几层的网路 3)可以任意大小的输入(因为后文看出来,用的网络还是resnet)
non-local neutal networks
non-local操作的公式:
其中i是当前计算的position index,j是其他所有可能的position index。这里f算出来标量(看后文,应该是权重),而g是unary dunction,用来计算position j的input 的一个表示(相当于把该index的输入换了一种表征)。C(x)是归一化函数。x与y的shape相同。这里可以理解为:相当于对所有位置的信号都加权求和,权重就是xi与xj通过函数f算出来的关系,信号就是利用函数g对原始xj的进行转换。
1.如何选择函数f与g?(实验发现 f与g的选择对结果 影响不大,证明了non-local是generic的)
1)g的选择:为了简单起见,只考虑g为linear embedding,g(xj) = Wgxj,其中Wg是要学习的weight matrix,例如空间上用1*1的卷积,时空上用1*1*1的卷积操作。
2)f的选择
-
gaussion
此时归一化函数:
-
embedded gaussion
这里:θ(xi) = Wθxi and φ(xj)= Wφxj是两个embedding 操作,也就是先将xi与xj进行embed,再套入上面的高斯函数中,归 一化函数 C(x)也同上
- dot product
归一化函数,C(x)=N,其中N是 the number of positions in x,因为输入信号有variable size,所以这样的归一化是必须的。
-
concatenation
这里f是rule,C(x)=N,相当于先将xi与xj链接起来,再用一个weight vector wf去将连接后的矩阵映射到标量。
2.构建non-local block
为了能将non-local operation 添加到各种现存模型中,我们定义了一种non-local block:
这里yi是上述non-local公式的输出,xi是原始输出(很像残差链接,将残差部分换成了non-local的输出)。这里将Wg, Wθ, and Wφ 的channel 维度设置为x的channel维度的一半,follow resnet中bottleneck的设计,是为了节约计算成本。具体block如图:
实验中还使用了subsampling trick来进一步节约计算成本,例如采用pooling操作,在图中的 φ and g后面都加入一个max pooling层来执行这项操作,相当于减少参与计算的位置数量。
个人总结:
1)这篇文章相当于修改了resnet中每个block的残差连接那一部分,用non-local的操作来代替原始的多个卷积+bn+relu的操作。
2)non-local 这部分,是在要计算的位置i上,引入位置j的表征,一方面先将xj经过embedding操作,另一方面计算xi与xj的相关性来对xj引入权重,最后将embeding后的xj与权重相乘累加,就得到了xi的non-local表征。