理解 Non-local

之前一直没有深入地了解 Non-local 的来源,以为只是同名论文中提出的一个 Block 设计,最近阅读 AlphAction 论文时,突然发现其是来自于 Attention is all you need 中 self-attention 的思想。虽然 Attention 此文是针对 NLP 领域的,但是其思想逐渐被延伸到了视觉领域。在阅读关于 Transformer 中 self-attention 的文章后,在这里记录下对 Non-local 的理解。

首先介绍 Self-Attention

Self-attention 模块

公式

Attention(Q,K,V)=softmax(AKTdk)VAttention(Q,K,V)=softmax({AK^T\over\sqrt{d_k}})V

在 self-attention 中,每个单词有 3 个不同的向量,它们分别是 Query 向量( QQ ),Key 向量( KK )和 Value 向量( VV ),长度均是 64。它们是由嵌入向量 XX 乘以三个不同的权值矩阵 WQW^QWKW^KWVW^V 得到,其中三个矩阵的尺寸也是相同的。均是 512×416512\times416

Q, K, V的计算示例图

Attention 的计算方法

  1. 将输入单词转化成嵌入向量;
  2. 根据嵌入向量得到 qq, kk, vv 三个向量;
  3. 为每个向量计算一个 score: score=qkscore=q\cdot{k};
  4. 为了梯度的稳定,Transformer 使用了 score 归一化,即除以 dk\sqrt{d_k};
  5. 对 score 施以 softmax 激活函数;
  6. softmax 点乘 Value 值 vv,得到加权的每个输入向量的评分 vv;
  7. 相加之后得到最终的输出结果 zz: z=vz=\sum{v}

以上步骤可以表示成下图

Self-Attention计算示例图

实际计算过程中是采用基于矩阵的计算方式,那么论文中的 QQ, KK, VV 的计算方式如下图
Q, K, V的矩阵表示

Self-Attention 的计算示例图可以总结为下图所示的矩阵形式
Selef-Attention的矩阵表示
而这,也是公式的计算方式。


接下来看 Non-local 模块

Non-local 的图像

原始的 Non-local

lfb 中的 Non-local

AlphAction 中的 Non-local

从 AlphAction 的 Non-local 可以看出,
Q 的尺寸是 N×dN\times{d}, K 的尺寸是 N×dN^{'}\times{d}, QK转置进行矩阵乘法,对应的就是第三步 计算 score 的过程(Q的每一行与KTK^T的每一列点乘)。
接下来的 Scale 操作对应第四步 score 归一化 的过程。
再接下来,Softmax 的输出结果(尺寸 N×NN\times{N^{'}})与 V 进行矩阵乘法,得到最后尺寸为 N×dN\times{d} 的矩阵。这里,可以看作 N×NN\times{N^{'}} 矩阵的每一行分别与 V 相乘,即 V 的每一行的加权和。
其实,Q×KTQ\times{K^{T}} 结果的每一行,来自于 Q 的每一行与 KTK^{T} 进行矩阵相乘,即 Q 的一个向量与 K 所有向量的点积。而最后计算 V 矩阵每一行的加权和时的权重就来自这里

所以,整个 Non-local 的流程,整体感觉就是通过对 Q, K 的处理,得到了 N 组长度为 NN^{'} 的权重,并对 V 的每一行进行加权和。

补充解释: Self-Attention 真实的意图是,通过 QK 进行 score 的计算,并以 score 作为 VQ 所激活的程度的度量,并因此选择出激活程度最高的 V 中的特征向量,计算加权和。最后,将加权和与原始的 Q 进行相加,得到更新后的 Q。而这个更新后的 Q,就是获得了 attention 的 Q。在视频理解领域,目的就是通过 Self-attention 将来自其他人和物体的上下文信息加到 Q 所代表的人身上,以辅助后续分类。

AlphAction 中 3.2 节的解释如下

Through the dot-product attention, which is the output of the softmax layer in Figure 3 a, the block is able to select value features that are highly activated to the query features and merge them to enhance the query features.

参考

详解Transformer (Attention Is All You Need)


文章作者: taosean
文章链接: https://taosean.github.io/2020/11/05/Understanding-Non-local/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 taosean's 学习之旅