论文笔记:ICLR 2018 FastGCN: Fast Learning With Graph Convolutional Networks Via Important Sampling

前言

这篇文章对数学的要求好高,奈何自己水平有限读不太懂,想进一步了解的推荐去看原文或者后面附上的博客链接,此篇博客仅仅是作者按照自己的思考过程整理而得

作者基于2017年由Kipf和Welling提出的以一阶切比雪夫不等式为卷积核的图卷积算法,分析它的一些特点如下:

  1. 传统的GCN是一种直推式图卷积(Transductive learning),也就是训练数据包含训练数据和测试数据,只是测试数据在计算loss的时候被省略掉,是一种半监督学习的策略
  2. 原始GCN通过递归方法对图数据进行处理,这导致在处理大图和密集图的时候存在时间和内存方面的问题

基于此本文提出将图卷积解释为概率测度下embedding函数的积分变换,这样的解释允许使用蒙特卡罗方法来一致地估计积分,由此在这项工作中提出的批量训练方案FastGCN。实验证明在保证实验结果的前提下拥有更高的训练效率

论文链接:https://arxiv.org/pdf/1801.10247.pdf
github:https://github.com/Gkunnan97/FastGCN_pytorch
https://github.com/matenure/FastGCN

参考

https://www.zhihu.com/question/68275921
https://blog.csdn.net/yyl424525/article/details/101101079
https://www.jianshu.com/p/4c74a7bff812
https://www.jianshu.com/p/48b526d29f0a

1. 归纳式(Inductive Learning) 与 直推式(Transductive Learning)

实际上我们平时所说的learning一般指的是inductive learning。

考虑普通学习问题,训练集为 D = { X t r , Y t r } \mathcal{D}=\{X_{tr},Y_{tr}\} D={Xtr,Ytr},测试(未标记) X t e X_{te} Xte,众所周知 X t e X_{te} Xte不会出现在训练集中,这种情况就是归纳式(Inductive Learning)。

半监督学习的情况,训练集为 D = { X t r , Y t r , X u n } \mathcal{D}=\{X_{tr},Y_{tr},X_{un}\} D={Xtr,Ytr,Xun},测试(未标记) X t e X_{te} Xte,此时 X u n X_{un} Xun X t e X_{te} Xte都是未标记的,但我们测试的 X t e X_{te} Xte在训练时没有见过,这种情况是归纳半监督式(Inductive semi-supervised learning)

如果我们不管 X t e X_{te} Xte,而是想知道对 X u n X_{un} Xun的效果怎么样时,由于此时在训练的时候我们已经见过 X u n X_{un} Xun(利用了 X u n X_{un} Xun的特征信息),这是就叫做直推半监督式(Transductive semi-supervised learning)。

简单来说,transductive和inductive的区别在于我们想要预测的样本,是不是我们在训练的时候已经见(用)过的。

通常transductive比inductive的效果要好,因为inductive需要从训练generalize到测试。

对于图类型数据的训练来说可以总结为
在这里插入图片描述

1.1 GCN的未来发展方向

  • GCN是transductive的,但对于实际中的许多应用,测试数据可能不容易获得,因为图形可能随着新的顶点不断扩展(例如,社交网络的新成员、推荐系统的新产品和功能测试的新药物)。这样的场景需要一个inductive的方案,该方案只用一部分训练顶点来学习模型,并且能够很好地推广到有任何扩充的图。

  • GCN面临的一个更严峻的挑战是,在批量训练中,跨层递归扩展邻域的代价很大。**特别是对于稠密图和幂律图,单顶点邻域的扩展很快占据了图的很大一部分。mini-batch训练即使在batch size很小的时候,也会涉及到和每个batch相关的大量数据。**因此,为了使GCN适用于大型、密集的图,可扩展性是一个迫切需要解决的问题。

2. 重要性采样

之前的工作,找领域的时候都是类似于均匀的采样。这篇文章,在采样的过程中,分配了不同的权重(概率测度下)。由于在前传的过程中用到了重要性采样,然后在计算loss的时候,也将这个概率测度加入。即文章所说将以前的简单加和变成了积分形式(integral transforms)。

3.正文

3.1概率密度 (probability measure)

概率测度:度量“事件发生的可能性大小”,有相同的概率测度就是指发生的可能性相同,有相同的分布

3.2 自助法 (bootstrapping)

“自助法”(bootstrapping)以自助采样(可重复采样、有放回采样)为基础。假如一个数据集D有m个样本,看看训练集和测试集怎么选择:

  • 训练集D’:每次从数据集D中随机选择一个样本,将这个样本复制一个放到D’中,然后再把原样本放回去(可放回)。重复操作m次。这样D’中就有m个样本了。这种采样方法有可能一个样本会被选择好多次,也有可能有的样本一次也不会被选择到。
  • 测试集D-D’:测试集就是那些剩下的,没被选择的样本。

那么训练集D和测试集D’中共有多少数据呢?可以看出数据集中样本在m次始终不被采样到的概率是: ( 1 − 1 m ) m (1-\frac{1}{m})^m (1m1)m

极限推导
在这里插入图片描述
所以数据集D中有36.8%的样本未出现在训练集中。

优缺点:

  • 数据集小、难以划分训练\测试集
  • 自助法能从初始数据集中产生多个不同的训练集,可以用于集成学习
  • 自助法产生的训练集改变了初始数据集的分布,会引入估计偏差

3.3 本文的创新点

将图卷积看作是一种概率测度下embedding函数的积分变换,这种方式为inductive学习提供了一个理论支持。具体来说,此文将图的顶点解释为某种概率分布下的独立同分布的样本,并将损失和每个卷积层作为顶点embedding函数的积分。然后,通过定义样本的损失和样本梯度的蒙特卡罗近似计算积分,并且可以进一步改变采样分布(如在重要性采样中)以减小近似方差。

3.4 通过采样进行训练和推理

假设一个图 G ′ G^′ G,顶点集为 V ′ V^′ V,并和一个概率空间 ( V ′ , F , P ) ( V^′ , F , P ) (V,F,P)相关联。在这个概率空间中,可以将 V ′ V^′ V看作样本空间, F F F看作事件空间,概率测度 P P P定义为一个样本的分布。对于图 G ′ G^′ G的子图 G G G,它的顶点来源于 V ′ V^ ′ V中根据概率测度计算的独立同分布的样本。

为了解决由于卷积造成的缺乏独立性的问题,文中将网络的每一层解释为顶点的embedding函数(把顶点看作随机变量),这些顶点(随机变量)有相同的概率测度,但彼此独立。
在这里插入图片描述

  • 图1是GCN的体系结构图
  • 左图(图卷积的视角):每个圆圈代表图中的一个顶点,在连续的两行上,如果图中两个对应的顶点相连,则在网络层中一个圆 i i i(用灰色线表示)与圆 j j j相连。卷积层使用图形连接结构混合顶点特征embedding。
  • 右图(积分变换的视角):下一层的embedding函数是前一层的一个积分变换(图中橙色部分所示)。对于此文提出的方法,所有的积分(包括损失函数)都通过蒙特卡罗采样了评估。
  • 相应地,在图的视角中,每个层中的顶点都以自助法(bootstrapping)方式进行下采样,以近似卷积。采样部分由蓝色实线和橙色线表示。

GCN的公式如下
H ~ l + 1 = A ^ H ( l ) W ( l ) , H ( l + 1 ) = σ ( H ~ ( l + 1 ) ) , l = 0 , . . . , M − 1 , L = 1 n ∑ i = 1 n g ( H ( M ) ( i , : ) ) , \widetilde{H}^{l+1}=\hat{A}H^{(l)}W^{(l)},H^{(l+1)}=\sigma(\widetilde{H}^{(l+1)}),l=0,...,M-1,L=\frac{1}{n}\sum_{i=1}^ng(H^{(M)(i,:)}), H l+1=A^H(l)W(l),H(l+1)=σ(H (l+1)),l=0,...,M1,L=n1i=1ng(H(M)(i,:)),

用积分变换的形式可以表示为

h ~ ( l + 1 ) ( v ) = ∫ A ^ ( v , u ) h l ( u ) W ( l ) d P ( u ) , h ( l + 1 ) ( v ) = σ ( h ~ ( l + 1 ) ( v ) ) , l = 0 , . . . , M − 1 , \widetilde{h}^{(l+1)}(v)=\int\hat{A}(v,u)h^{l}(u)W^{(l)}dP(u),h^{(l+1)}(v)=\sigma{(\widetilde{h}^{(l+1)}(v))},l=0,...,M-1, h (l+1)(v)=A^(v,u)hl(u)W(l)dP(u),h(l+1)(v)=σ(h (l+1)(v)),l=0,...,M1,

损失函数写为
L = E v ∼ P [ g ( h ( M ) ( v ) ) ] = ∫ g ( h ( M ) ( v ) ) d P ( v ) L=E_{v\sim P}[g(h^{(M)}(v))]=\int g(h^{(M)}(v))dP(v) L=EvP[g(h(M)(v))]=g(h(M)(v))dP(v)

  • u u u v v v是独立的随机变量,它们都有相同的概率测度 P P P
  • 函数 h ( l ) h^{(l)} h(l)解释为第 l l l层的embedding函数
  • 两个连续层的embedding函数通过卷积相互关联,表示为积分变换
  • A ^ ( u , v ) \hat{A}(u,v) A^(u,v)相当于邻接矩阵 A ^ \hat{A} A^ ( u , v ) (u,v) (u,v)元素
  • loss是最后一层的 g ( h ( M ) g(h^{(M)} g(h(M)对最后的embedding h ( M ) h^{(M)} h(M)的期望
  • 注意,这些积分不是通常的黎曼-斯蒂耶斯(Riemann–Stieltjes)积分,因为变量 u u u v v v是图顶点,而不是实数

以函数形式表示GCN就可以使用蒙特卡罗方法来计算积分,这样就产生了一种批处理的训练算法,也使得训练和测试数据得以分离,就像在归纳学习中一样。

使用 t l t_l tl个独立同分布的样本 u 1 ( l ) , … , u t l ( l ) ∼ P u_{1}^{(l)}, \ldots, u_{t_{l}}^{(l)} \sim P u1(l),,utl(l)P去近似估计公式(2)中的积分变换,也就是

h ~ t l + 1 ( l + 1 ) : = 1 t l ∑ j = 1 t l A ^ ( v , u j ( l ) ) h t l ( l ) ( u j ( l ) ) W ( l ) , h t l + 1 ( l + 1 ) ( v ) : = σ ( h ~ t l + 1 ( l + ! ) ( v ) ) , l = 0 , . . . , M − 1 \widetilde{h}_{t_{l+1}}^{(l+1)}:=\frac{1}{t_l}\sum_{j=1}^{t_l}\hat{A}(v,u_j^{(l)})h_{t_l}^{(l)}(u_j^{(l)})W^{(l)},h_{t_{l+1}}^{(l+1)}(v):=\sigma(\widetilde{h}_{t_{l+1}}^{(l+!)}(v)),l=0,...,M-1 h tl+1(l+1):=tl1j=1tlA^(v,uj(l))htl(l)(uj(l))W(l),htl+1(l+1)(v):=σ(h tl+1(l+!)(v)),l=0,...,M1
其中约定 h t 0 ( 0 ) = h ( 0 ) h_{t_0}^{(0)}=h^{(0)} ht0(0)=h(0)

然后,公式(3)的loss L容许一个估计量:
L t 0 , t 1 , . . . , t M : = 1 t M ∑ i = 1 t M g ( h t M ( M ) ( u i ( M ) ) ) L_{t_0,t_1,...,t_M}:=\frac{1}{t_M}\sum_{i=1}^{t_M}g(h_{t_M}^{(M)}(u_i^{(M)})) Lt0,t1,...,tM:=tM1i=1tMg(htM(M)(ui(M)))

结果表明,估计量是一致的(consistent)。这个证明是大数定律和连续映射定理的递归应用

详细部分可见:https://blog.csdn.net/yyl424525/article/details/101101079

4. 实验

Benchmark:在GCN和GraphSAGE的基础上做的实验,并和它们进行对比。
benchmark tasks:

  • 用Cora数据集做主题分类研究
  • 用Pubmed数据库分类学术文章
  • 用Reddit帖子数据集预测社交网络的社区结构

数据集

  • 使用调整了training/validation/test的比例的数据集Cora、Pubmed进行有监督学习
  • 在GCN中,进行训练的有标签的样本只有很少的一部分,而FastGCN中所有有标签的样本都进行训练
  • 这种分割与GraphSAGE中使用的另一个数据集Reddit是一致的
  • 使用Cora、Pubmed数据集原始比例进行训练的额外实验可在附录参考

在这里插入图片描述
实验细节

  • 所有网络只使用两层
  • FastGCN的代码来源于GCN,可以参考GCN的源代码

4.1 FastGCN中采样的使用

  • 表2的“Sampling”列下面显示了随着采样的样本数量的增加,训练时间和分类准确率(as measured by using micro F1 scores)都在增加
  • 由于第一层的 A ^ H ( 0 ) \hat{A}H^{(0)} A^H(0)是不变的,这就意味着在链式法则的最后一步关于 W ( 0 ) W^{(0)} W(0)的梯度是一个常量。因此文中做了一个预先计算乘积的方式而不是对这一层进行采样来提高效率。可以在表2中看到,训练时间有了本质的降低但是准确率却没有太大的变化。
  • 后面的所有实验都采用这种预先计算的方式
    在这里插入图片描述

FastGCN的速度和原始GCN和GraphSAGE的对比

  • 图3中条形图的高等表示每个batch的训练时间
  • GraphSAGE和GCN相比,在小图(Cora and Pubmed)上训练的时间慢一些,但是在大而稠密的图(如Reddit)上速度有了本质的提升
  • 从图3中可以看出FastGCN除了在Cora数据集上加速的少一些,在Pubmed和Reddit数据集上都有了很大的提升,和最慢的比,提升了近两个数量级的速度
  • FastGCN的训练时间与达到最佳预测精度的样本量有关,FastGCN在三种数据集上的样本量分别是400,100,400

在这里插入图片描述

new implementation of GraphSAGE for small graphs

  • GraphSAGE适用于大图,因为在小图上的样本数量(乘积的方式)和图的顶点数量是差不多的,因此在小图上的提升有限,并且采样也会增大时间开销
  • GraphSAGE的作者为了比较,改了GraphSAGE的代码,减少了采样的节点的冗余计算(GraphSAGE-GCN (new impl)),这样GraphSAGE每个batch的训练时间在最小的图Cora上比较好,但在大图(如Reddit)上不能运行
  • 在这里插入图片描述

5.总结

  • 提出了一个比GCN更快的inductive的FastGCN,解决了GCN由于递归扩展邻居的内存瓶颈
  • 将图卷积重新看作是embedding函数的积分变换的形式
  • 和GraphSAGE的邻居采样方式不同,FastGCN中的采样方式是基于给定的图的顶点的,并且是一种重要性采样
  • GCN体系结构的简单性允许用积分变换自然地解释图形卷积。然而,这种观点可以推广到许多基于一阶邻域的图模型,其中包括MoNet that applies to (meshed) manifolds (Monti et al., 2017),消息传递网络 (see e.g., Scarselli et al. (2009); Gilmer et al. (2017))
  • 当推广到其他网络时,另一项工作是研究方差是否减少是以及如何改进estimator,这可能是未来研究的一个有价值的方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值