Non-local Neural Networks

Introduction

对于序列数据,通常采用循环操作解决长范围的依赖建模。对于图像数据,通常采用堆叠卷积操作提供大的感受野来进行长距离的依赖建模。这两种操作都是处理局部的范围数据,要想获得大范围的依赖关系,只能通过重复这种局部操作。

那么能不能设计一个高效、简单并且通用的方法来解决大范围的依赖呢?

论文提出了 non-local 操作,说是启发于图片降噪里的 non-local mean 操作[3],其实更像是文献[4]中 self-attention 的另一种提法,在那篇文章中针对的是序列数据,这里对它进行了扩展用到图片数据。这里,作者有避重就轻的嫌疑,这也是很多人认为这篇论文的创新性不够的原因。

Non-local operation

设 $x$ 是输入,$y$ 是输出,其维数和 $x$ 一样,$i,j$代表空间位置下标,$f$ 是两点的相似性函数,$g$ 是输入在某点的表示函数,公式如下:
$$
y_i=\frac{1}{\mathcal{C}(x)} \sum_{\forall j}f(x_i,x_j)g(x_j)
$$

这里借用文献[2]里的解释,其本质就是 attention:



Figure 1:Non-local操作可以看成attention


对于相似函数 $f$ 的选择,论文里列出了四种:

  • Gaussian:$f(x_i,x_j)=e^{x_i^T \cdot x_j},\mathcal{C}(x)=\sum_{\forall j}f(x_i,x_j)$`
  • Embedded Gaussian:$f(x_i,x_j) = e^{\theta(x_i)^T \cdot \phi(x_j)}, \mathcal{C}(x) = \sum_{\forall j}f(x_i,x_j)$`
  • Dot Product:$f(x_i,x_j) = \theta(x_i)^T \cdot \phi(x_j), \mathcal{C}(x) = N $`, $ N $ 是所有点的个数
  • Concatenation:$f(x_i,x_j) = ReLU(w_f^T \cdot [\theta(x_i),\phi(x_j)]), \mathcal{C}(x) = N$

Non-local Block

为了让 non-local 操作作为一个组件,嵌入任意的神经网络中,作者把 non-local 设计成残差块的形式,去学习 $x$ 的残差:
$$
z_i=W_z \cdot y_i + x_i
$$
这里 $W_z$ 实际就是一个卷积操作。如图 2 所示:



Figure 2:A spacetime non-local block


Relations with Self-Attention

论文中解释 self-attention 模块是 Embedded Gaussian 的一种特殊情况。将 $\frac{1}{\mathcal{c}(x)} f(x_i,x_j)$ 替换成 softmax 函数。

论文其他部分是讲如何将 non-local 操作应用到 CV 任务中,这里就不再赘述。

Authors

Carnegie Mellon University

Facebook AI Research

References

请作者吃酒!