【LGCN】如何理解Large-Scale Learnable Graph Convolutional Networks?

在这里插入图片描述

论文:Large-Scale Learnable Graph Convolutional Networks?,
代码:https://github.com/divelab/lgcn/

摘要

卷积神经网络在网格数据上取得了很大的成功,但是在学习像图这样的数据的时候就面临着很多的挑战。CNN中,可学习的局部滤波器可以自动地捕获高层次的特征。滤波器的计算需要感受野内有固定数量的单元。然而,在图结构中,邻居单元的数量不固定,而且邻居也不有序,所以阻碍了卷积的操作。我们提出了可学习图卷积层(learnable graph convolutional layer LGCL)来解决这些挑战。基于值的排序,LGCL为每个特征自动地选择固定数量的邻居结点,以此将图结构数据变换到1维的网格结构中,然后就可以在图上使用常规的卷积操作了。为了能让模型在大尺度的图上训练,我们提出了一个子图训练方法来减少过多的内存和计算资源的开销。在顶点分类任务上,不论是transductive 还是 inductive,表现得都更好一些。我们的结果展示出了我们的子图训练方法比前人的方法更高效。

3 方法

3.1 在图数据上应用卷积运算的挑战

为了让传统的卷积操作可以应用在图上,需要解决两个图结构数据和网格数据的差异。首先,顶点的邻居数量通常会变化。其次,我们不能对邻居顶点进行排序,因为他们没有可供排序的信息。举个例子,社交网络中,每个人都可以看作是一个顶点,边表示人与人之间的关系。显然,每个顶点的邻居顶点数量是不同的,因为人们可以有不同数量的朋友。而且,如果没有额外的信息,很难对他们进行排序。

网格数据可以看作是一种特殊的图结构数据,每个顶点有固定数量的邻居。因为卷积操作是直接应用在图像这样的网格数据上。为了看清楚固定邻居数量以及排序信息的重要性,我们举个例子,有一个 3 × 3 3\times 3 3×3 的卷积核,扫描一张图像。我们将这张图片考虑成一个特殊的图,每个像素是一个顶点。在扫描的过程中,计算包括了中心结点和周围8个邻居结点的计算。这8个顶点在这个特殊的图中通过边连接到中心结点。与此同时,我们使用他们和中心结点的相对位置对他们排序,这对于卷积操作很重要,因为在扫描的过程中,滤波器的权重和图中的顶点要一一对应。举个例子,在上面的例子中, 3 × 3 3\times 3 3×3 的卷积核,左上角的权重应该总是对应中心节点左上方的邻居结点。没有这样的排序信息,卷积的输出结果就不再是确定的。从刚才的讨论中可以看到传统卷积在图结构数据上应用的挑战。为了解决这两个挑战,我们提出了一个方法将图结构数据变换到网格数据内。

3.2 可学习的卷积层(LGCL)

为了让传统卷积可以在图上可用,我们提出了LGCL。LGCL的layer-wise传播规则写为:
X ~ l = g ( X l , A , k ) , X l + 1 = c ( X ~ l ) (3) \tag{3} \tilde{X}_l = g(X_l, A, k),\\ X_{l+1} = c(\tilde{X}_l) X~l=g(Xl,A,k),Xl+1=c(X~l)(3)

其中, A A A 是邻接矩阵, g ( ⋅ ) g(\cdot) g() 使用了 k k k -largest Node Selection, 将图结构数据映射到网格结构, c ( ⋅ ) c(\cdot) c() 表示1维常规的CNN, 将顶点信息聚合, 为每个顶点输出 了一个新的特征向量。我们会在下面分开讨论 g ( ⋅ ) g(\cdot) g() c ( ⋅ ) ∘ c(\cdot)_{\circ} c()

k k k-largest Node Selection. 我们提出了一个新的方法称为 k k k -largest Node Selection, 将图结构映射到网格数据上, 其中 k k k 是LGCL的超参数。在这个操作之后,每个顶点的邻居信息聚合, 表示成一个有 ( k + 1 ) (k+1) (k+1) 个位置的1维的网格状。变换后的数据会输入到CNN中来生成新的特征向量。

假设有行向量 x l 1 , x l 2 , … , x l N x_{l}^{1}, x_{l}^{2}, \ldots, x_{l}^{N} xl1,xl2,,xlN X l ∈ R N × C X_{l} \in \mathbb{R}^{N \times C} XlRN×C, 表示 N N N 个顶点的图,每个顶点有 C C C 个特征。邻接矩阵 A ∈ N N × N , k A \in \mathbb{N}^{N \times N}, \quad k ANN×N,k 为定值。顶点 i i i 的特征向量是 x l i x_{l}^{i} xli, 它有 n n n 个邻居。通过在 A A A 中的一个简单查找,我们可以获得这些邻居结点的下标, i 1 , i 2 , … , i n ∘ i_{1}, i_{2}, \ldots, i_{n_{\circ}} i1,i2,,in 对它们对应的特征向量 x l i 1 , x l i 2 , … , x l i n x_{l}^{i 1}, x_{l}^{i_{2}}, \ldots, x_{l}^{i_{n}} xli1,xli2,,xlin 进行拼接, 得到 M l i ∈ R n × C M_{l}^{i} \in \mathbb{R}^{n \times C} MliRn×C 。假设 n ≥ k n \geq k nk, 就没有泛化上的损失。如果 n < k n<k n<k, 我们可以使用全为0的列,给 M l i M_{l}^{i} Mli 加padding。 k k k -largest node selection是在 M l i M_{l}^{i} Mli 上做的:也就是, 对于每列,我们排出 n n n 个值,然后选最大的k个数。我们就可以得到一 个 k × C k \times C k×C 的输出矩阵。因为 M l i M_{l}^{i} Mli 表示特征,这个操作等价于为每个特征选择k个最大值。通过在第一行插入 x l i x_{l}^{i} xli, 输出变为 M ~ l i ∈ R ( k + 1 ) × C \tilde{M}_{l}^{i} \in \mathbb{R}^{(k+1) \times C} M~liR(k+1)×C 。如图2左部分。通 过对每个顶点重复这个操作, g ( ⋅ ) g(\cdot) g() X l X_{l} Xl 变为 X ~ l ∈ R N × ( k + 1 ) × C \tilde{X}_{l} \in \mathbb{R}^{N \times(k+1) \times C} X~lRN×(k+1)×C

在这里插入图片描述

注意,如果将 N , ( k + 1 ) , C N,(k+1), C N,(k+1),C 分别看作是batch size, spatial size, 通道数, 那么 X ~ l \tilde{X}_{l} X~l 可以看作是1维网格状的结构。因此, k k k 个最大顶点选择函数 g ( ⋅ ) g(\cdot) g() 成功地将图结构变换为网格结构。这个操作充分利用了实数的自然顺序信息, 使得 每个顶点有固定数量的有序邻居。

1-D Convolutional Neural Networks. 就像3.1节讨论的,传统的卷积操作可以直接应用到网格状的数据上。 X ~ l ∈ R N × ( k + 1 ) × C \tilde{X}_{l} \in \mathbb{R}^{N \times(k+1) \times C} X~lRN×(k+1)×C 是1维的数据,我们部署一个 维CNN模型 c ( ⋅ ) ∘ c(\cdot)_{\circ} c() LGCL基本的功能是聚合邻居信息,为每个顶点更新特征。 后续的话, 它需要 X l + 1 ∈ R N × D X_{l+1} \in \mathbb{R}^{N \times D} Xl+1RN×D, 其中 D D D 是更新后的特征空间的维度。一维 CNN c ( ⋅ ) c(\cdot) c() 使用 X ~ l ∈ R N × ( k + 1 ) × C \tilde{X}_l \in \mathbb{R}^{N \times (k + 1) \times C} X~lRN×(k+1)×C 作为输入, 输出一个 N × D N \times D N×D 的矩阵,或是 N × 1 × D N \times 1 \times D N×1×D 的矩阵。 c ( ⋅ ) c(\cdot) c() 可以将空间维度从 ( k + 1 ) (k+1) (k+1) 减小到 1 。

注意, N N N 看作是batch size, 与 c ( ⋅ ) c(\cdot) c() 的设计无关。结果就是, 我们只聚焦于一个 样本,也就是图中的一个顶点。对于顶点 i i i, 变换得到的输出是 M ~ l i ∈ R ( k + 1 ) × C \tilde{M}_{l}^{i} \in \mathbb{R}^{(k+1) \times C} M~liR(k+1)×C c ( ⋅ ) c(\cdot) c() 的输入。由于任何一个卷积核大于1且没有padding的卷积都会减少空间的大小,最简单的 c ( ⋅ ) c(\cdot) c() 只有一个卷积核大小为 ( k + 1 ) (k+1) (k+1) 的卷积, 没有 padding。输入和输出的通道数分别为 C C C D ∘ D_{\circ} D 同时, 可以部署任意一个多层 C N N \mathrm{CNN} CNN, 得到最后的输出的维度是 1 × D ∘ 1 \times D_{\circ} 1×D 图2右侧展示了一个两层CNN的例子。再对所有的 N N N 个顶点使用一次 c ( ⋅ ) c(\cdot) c(), 输出 X l + 1 ∈ R N × D X_{l+1} \in \mathbb{R}^{N \times D} Xl+1RN×D 。总结一下,我们 的LGCL使用 k k k 最大顶点选择以及传统的一维CNN, 将图结构变换到网格数据, 实现了对每个顶点进行的特征聚合和特征过滤

3.3 可学习的图卷积网络

越深的网络一般会产生越好的结果。然而,之前在图上的深度模型,如GCN,只有两层。尽管随着深度的增加,它们的性能有有所下降[Kipf & Welling 2017],我们的LGCL可以构造的很深,构造出图顶点分类的可学习的图卷积网络。我们基于densely connected convolutional networks(DCNNs),构造了LGCNs,前者获得了ImageNet分类任务最好的成绩。
在这里插入图片描述

以上图为例:
(1) 第一层为图嵌入层:将输入节点的多通道特征进行降维,减少节点的通道数; 图嵌入层相当于 一层全连接层;
X 1 = X 0 W 0 X_{1}=X_{0} W_{0} X1=X0W0
其中, X 0 ∈ R N × C 0 , X 1 ∈ R N × D 0 , W 0 ∈ R C 0 × D 0 , C 0 > D 0 X_{0} \in R^{N \times C_{0}}, X_{1} \in R^{N \times D_{0}}, W_{0} \in R^{C_{0} \times D_{0}}, C_{0}>D_{0} X0RN×C0,X1RN×D0,W0RC0×D0,C0>D0 。图中 C = 2 , D 0 = 1 ∘ C=2, D_{0}=1_{\circ} C=2,D0=1
(2) 第二层为LGCL层, 输入节点维度为 C 1 = D 0 C_{1}=D_{0} C1=D0,输出维度为 D 1 = 1 ; D_{1}=1 ; D1=1;
(3) 第三层为LGCL层, 输入为第二层LGCL的输出与输入的拼接,输入维度为 C 2 = 2 C_{2}=2 C2=2,输出维度 D 2 = 1 D_{2}=1 D2=1
(4) 第四层为全连接层, 输入为第三层LGCL的输出与输入的拼接,输入维度 C 3 = 3 C_{3}=3 C3=3,输出为节点的分类概率。

在LGCN中,我们先用一个图嵌入层来生成顶点的低维表示,因为原始输入一般都是高维特征, 比如Cora数据集。第一层的图嵌入层本质上就是一个线性变换,表示为:
X 1 = X 0 W 0 X_{1}=X_{0} W_{0} X1=X0W0
其中, X 0 ∈ R N × C 0 X_{0} \in \mathbb{R}^{N \times C_0} X0RN×C0 表示高维的输入, W 0 ∈ R C 0 × C 1 W_0 \in \mathbb{R}^{C_0 \times C_1} W0RC0×C1 将特征空间从 C 0 C_{0} C0 映射到了 C 1 C_{1} C1 。结果就是, X 1 ∈ R N × C 1 X_{1} \in \mathbb{R}^{N \times C 1} X1RN×C1 C 1 < C 0 C_{1}<C_{0} C1<C0 。或者,使用一个GCN层来做图嵌入。如第二部分描述的, GCN层中的参数数量等价于传统的图嵌入层中参数的数量。

在图嵌入层后,我们堆叠多个LGCL, 多少个取决于数据的复杂程度。因为每个LGCL只能聚合一阶邻居的信息, 也就是直接相连的邻居顶点, 堆叠LGCL可以从一个更大的顶点集中获得信息, 这也是传统CNN的功能。为了提升模型 的性能,帮助训练过程,我们使用skip connections来拼接LGCL的输入和输出。最后,在softmax激活前使用一个全连接层

就像LGCN的设计理念, k k k 以及堆叠的LGCL的数量是最重要的超参数。顶点的平均度是选择 k k k 的一个重要参数。LGCL的数量应该依赖任务的复杂度, 比如类别的个数,图的顶点数等。越复杂的模型需要越深的模型

3.4 大规模数据的子图训练

主要的思想是:将一个大型的图通过采样的方式确定初始的中心节点以及中心节点的邻域节点, 由这些节点可以组成原图数据的子图 (单个样本), 通过多次采样得到多个样本实现小批量训练。

大部分图上的深度学习模型都有另一个限制。在训练的时候,输入的是所有顶点的特征向量以及整个图的邻接矩阵。图的尺寸大的时候这个矩阵就会变大。这些方法在小尺度的图上表现的还可以。但是对于大尺度的图,这些方法一般都会导致内存和计算资源极大的开销,限制了这些模型的一些应用

其他类型的数据集也有相似的问题,比如网格数据。举个例子,图像分割上的深度模型通常使用随机切片的方式来处理大的图片。受到这种策略的启发,我们随机的将图“切分”,使用得到的小图进行训练。然而,尽管一张图片的一个矩形部分很自然地包含了像素的邻居信息。如何处理图中顶点的不规则连接还是一个问题。

我们提出了子图选择算法来解决大尺度图上计算资源的问题,如算法1所示。给定一个图,我们先采样出一些初始顶点。从它们开始,我们使用广度优先搜索算法,迭代地将邻接顶点扩充到子图内。经过一定次数的迭代后,初始顶点的高阶邻居顶点就会被加进去。注意,我们在算法1中使用一个简单的参数 N m N_m Nm 。实际上在每个迭代中,我们将 N m N_m Nm 设置为了不同的值。图4给出了子图选择过程的一个例子。
在这里插入图片描述

上图是得到子图的伪代码:
(1) 首先从所有节点 N N N 中,随机采样 N i n i t N_{i n i t} Ninit 个节点, 表示为 i n i t N o d e s initNodes initNodes; (代码第2行)
(2) 从 i n i t N o d e s initNodes initNodes 节点的1-邻域中再随机采样 N m N_{m} Nm 个节点,表示为 n e w A d d N o d e s new AddNodes newAddNodes; (代码6-10行)
(3) 循环过程 (2) 直到采样节点总数 S S S 大于等于 N s N_{s} Ns 停止循环; 每次迭代过程中的 N m N_{m} Nm 都为不同值。
(4) S > N s S>N_{s} S>Ns 时,需要把最后一次过程 (2) 得到的采样节点再次采样 N r N_{r} Nr 个节点, 使得 S = N s S=N_s S=Ns。 (代码11-14行)

在这里插入图片描述
这样随机的切分子图,我们可以在大尺度的图上训练深层模型。此外,我们可以充分利用mini-batch训练方法来加速学习过程。在每轮训练中,我们可以使用子图训练方法采样多个子图,然后把它们放到batch中。对应的特征向量和邻接矩阵组成了网络的输入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值