《Non-local Neural Networks》论文阅读
原文地址:https://arxiv.org/abs/1711.07971
一、简介
无论是卷积操作(convolutional operation)还是循环操作(recurrent operation),都是在一个邻域内进行的处理。
本文受到 Non-local means 的启发,提出了一个可以集成在神经网络中的非局部操作模块——Non-local Block,来捕获神经网络中的长距离依赖信息( capture long-range dependencies)。
Non-local means的表达式如下:
其中 代表输出信号
中的第
个位置的值,该值将受到输入信号
中所有点的值的影响(由
来遍历输入信号中所有点),不同点的影响是可以不一样的(例如离
越近的点,对该点的输出(
) 的影响越大),影响的大小是由函数
来决定的(例如
可以是用来计算欧氏距离的函数),
表示的是输入信号
在
点的强度,
的作用是作标准化(normalized)。
假设 是一个线性函数即
,下面讨论函数
有哪些选择:
1、高斯函数(Gaussian): ,
是利用内积来计算相似度,相比于欧氏距离,它的实现比较简单,标准化因子可以设为:
2、复合高斯函数(Embedded Gaussian):,其中
,
,标准化因子可以设为:
,对于任一给定的
,
在
维度上是个 softmax 函数(归一化指数函数),因此有
,这就是最近出现在机器翻译中的自注意力模块(self-attention module)
3、内积形式(Dot product):,此时将标准化因子设为:
,
为
中点的个数,这样简化了梯度的计算。
4、连结形式(Concatenation):
作者在实验中发现,上述 的几种形式对实验结果的提升差异不大(not sensitive to these choices)。
二、Non-local Block(非局部模块)
定义 Non-local Block 如下:
其中的 是上面公式(1)所定义的非局部操作(non-local operation),
是为了将该模块做成一个残差结构(方便插入到网络中,如当
初始化为0时,对原网络没有影响)。
根据前面的定义,Non-local Block 的结构如下:
值得注意的是,这里都是使用 1x1x1 (因为在 spacetime 域中,所以是三维)的卷积核来执行线性操作(linear embedding),如 、
、
和
。同时 1x1x1 的卷积核将输入在 channel 上的维度由 1024 降到 512 ,减少计算复杂度。若要进一步降低计算复杂度,可以先对输入进行下采样。