cs224w(图机器学习)2021冬季课程学习笔记21 Scaling Up GNNs to Large Graphs

428 阅读18分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第5天

本文首发于CSDN。

诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合

@[toc]

YouTube视频观看地址1 视频观看地址2 视频观看地址3 视频观看地址4


本章主要内容: 本章首先介绍了GNN在实践中遇到的难以应用到大图上的问题,指出了scale up GNN这一课题的研究重要性。 接下来介绍了三种解决这一问题的方法:GraphSAGE模型1的neighbor sampling,Cluster-GCN模型2和简化GNN模型(SGC模型3)。


1. 介绍scale up GNN问题

  1. 图数据在当代ML研究中应用广泛,在很多领域中都出现了可供研究的大型图数据。
    推荐系统,推荐商品(链接预测),分类用户/物品(节点分类): 在这里插入图片描述
    社交网络,好友推荐(边级别),用户属性预测(节点级别): 在这里插入图片描述
    学术图,论文分类(节点分类),作者协作预测、文献引用预测(链接预测): 在这里插入图片描述
    知识图谱(KG),KG completion,推理: 在这里插入图片描述
  2. 这些图的共同点有二: 第一,大规模。节点数从10M到10B,边数从100M到100B。 第二,任务都分为节点级别(用户/物品/论文分类)和边级别(推荐、completion)。 本节课就将介绍如何scale up GNNs到大型图上。 在这里插入图片描述
  3. scale up GNN 的难点在于: 在传统大型数据集上的ML模型的训练方法: 目标:最小化平均损失函数 l(θ)=1Ni=1N1li(θ)\mathcal{l}(\mathbf{\theta})=\dfrac{1}{N}\sum\limits_{i=1}^{N-1}\mathcal{l}_i(\mathbf{\theta})(其中 θ\mathbf{\theta} 是模型参数,li(θ)\mathcal{l}_i(\mathbf{\theta}) 是第 ii 个数据点的损失函数)。 我们使用随机梯度下降stochastic gradient descent(SGD)方法:随机抽样 MM (<<N)(<<N) 个数据(mini-batches),计算 MM 个节点上的 lsub(θ)\mathcal{l}_{sub}(\mathbf{\theta}),用SGD更新模型:θθlsub(θ)\mathbf{\theta}\leftarrow\mathbf{\theta}-\nabla \mathcal{l}_{sub}(\mathbf{\theta}) 在这里插入图片描述 如果我们想直接将标准SGD应用于GNN的话,我们就会遇到问题: 在mini-batch时,我们独立随机抽样 MM (<<N)(<<N) 个节点,会出现如图所示的情况,抽样到的节点彼此孤立。由于GNN就是靠聚集邻居特征生成节点嵌入的,在mini-batch中无法获取邻居节点,因此这样的标准SGD无法有效训练GNNs。 在这里插入图片描述 因此我们会使用naïve full-batch: 如图所示,对整张图上的所有节点同时生成嵌入:加载全部的图结构和特征,对每一层GNN用前一层嵌入计算所有节点的嵌入(message-passing),计算损失函数,应用梯度下降来更新参数。 在这里插入图片描述 但full-batch应用不适用于大型图,因为我们想要使用GPU来加速训练,但GPU的memory严重受限(仅有10GB-20GB),整个图结构和特征信息无法加载到GPU上。 如图所示,CPU运算慢,memory大(1TB-10TB);GPU运算快,memory受限(10GB-20GB)。 在这里插入图片描述
  4. 本节课我们介绍三种scale up GNN的方法来解决这个问题,这三种方法分为两类: 第一类是在每一mini-batch中在小的子图上运行message-passing,每次只需要把子图加载到GPU上:GraphSAGE的neighbor sampling1 和Cluster-GCN2。 第二类是将GNN简化为特征预处理操作(可以在CPU上有效运行):Simplified GCN3在这里插入图片描述

2. GraphSAGE Neighbor Sampling: Scaling up GNNs

  1. 计算图 GNN通过聚合邻居生成节点嵌入,表现为计算图的形式(如右图所示): 在这里插入图片描述 可以观察到,一个2层GNN对节点0使用2跳邻居结构和特征生成嵌入: 在这里插入图片描述 可以泛化得到:K层GNN使用K跳邻居结构和特征生成嵌入。 在这里插入图片描述
  2. 我们发现,为计算单一节点的嵌入,我们只需要其K跳邻居(以之定义计算图)。在一个mini-batch中给定M个不同的节点,我们可以用M个计算图来生成其嵌入(如图所示),这样就可以在GPU上计算了:在这里插入图片描述
  3. GNN随机训练 我们现在就可以考虑用SGD策略训练K层GNN:
    1. 随机抽样 MM (<<N)(<<N) 个节点
    2. 对每个被抽样的节点 vv,获取其K跳邻居,构建计算图,用以生成 vv 的嵌入。
    3. 计算 MM 个节点上的平均损失函数 lsub(θ)\mathcal{l}_{sub}(\mathbf{\theta})
    4. 用SGD更新模型:θθlsub(θ)\mathbf{\theta}\leftarrow\mathbf{\theta}-\nabla \mathcal{l}_{sub}(\mathbf{\theta}) 在这里插入图片描述
  4. 随机训练的问题: 对每个节点,我们都需要获取完整的K跳邻居并将其传入计算图中,我们需要聚合大量信息仅用于计算一个节点嵌入,这样计算开销过大。 在这里插入图片描述 更多细节:  1. 计算图的大小会依层数K指数增长。如右图上面的图所示。  2. 在遇到hub node(度数很高的节点)时计算图会爆炸,但在现实世界的图中往往大多数节点度数较低,少量节点度数极高,就是会存在这种hub node。如右图下面的图所示。 下一步,我们就要让计算图更小。 在这里插入图片描述
  5. neighbor sampling 核心思想:每一跳随机抽样H个邻居,构建计算图。 H=2时示例如图所示,从根节点到叶节点,每个节点抽样2个邻居作为子节点: 在这里插入图片描述 我们可以用这个经剪枝的计算图来更有效地计算节点嵌入。 在这里插入图片描述
  6. 对K层GNN的neighbor sampling: 对每个节点的计算图:对第k(k=1,2,...,K)层,对其k阶邻居随机抽样最多 HkH_k 个节点,构成计算图。如图所示。 K层GNN一个计算图最多有 k=1KHk\prod^K_{k=1}H_k 个叶节点(每一层都抽满)。 在这里插入图片描述
  7. neighbor sampling注意事项
    1. 对sampling number HH 的权衡:小 HH 会使邻居聚合过程效率更高,但训练过程也会更不稳定(由于邻居聚合过程中variance会更大)。
    2. 计算用时:即使有了neighbor sampling,计算图的尺寸还是跟GNN层数K呈指数增长。 在这里插入图片描述
    3. 如何抽样节点:
      1. 随机抽样:快,但常不是最优的(可能会抽样到很多“不重要的”节点)
      2. random walk with restarts4: 自然世界中的图是scale free5 的,即绝大多数节点度数很低,少量节点度数很高。对这种图随机抽样,会抽样出很多低度数的叶节点。 抽样重要节点的策略:  1. 计算各节点自所求节点开始的random walk with restarts分值 RiR_i  2. 每一层抽样 HHRiR_i 最高(与原节点相关性最高的节点)的邻居节点 ii 在实践中,这种策略效果更好。 在这里插入图片描述
  8. neighbor sampling总结
    1. 计算图由每个mini-batch中的每个点构建。
    2. 在neighbor sampling中,计算图为计算有效性而被剪枝/sub-sampled。此外也有增加模型鲁棒性的效果(因为提升了模型的随机性,有些类似于dropout)。
    3. 我们用被剪枝的计算图来生成节点嵌入。
    4. 尽管有了剪枝工作,计算图还是可能会很大,尤其在GNN的message-passing层增多时。这就需要batch size进一步减小(即剪枝更多),这使得结果variance更大、更不可靠。 在这里插入图片描述

3. Cluster-GCN: Scaling up GNNs

  1. neighbor sampling的问题:

    1. 计算图的尺寸依GNN层数指数级增长。
    2. 计算是冗余的,尤其在mini-batch中的节点有很多共享邻居时:如图所示,A节点和B节点具有同样的邻居C和D,在不考虑抽样的情况下这两个节点将会具有相同的计算图、即相同的节点,但在neighbor sampling的运算中需要分别各计算一次,就做了重复的事。 老师在课上提到HAGs6 这一篇是讲如何不用计算这些冗余嵌入的。当然这篇我也没看,列出来仅供有兴趣的读者参考。 在这里插入图片描述
  2. 在full-batch GNN中,所有节点嵌入都是根据前一层嵌入同时计算出的: 对所有 vVv\in Vhv(l)=COMBINE(hv(l1),AGGR({hu(l)}uN(v)))h_v^{(\mathcal{l})}=COMBINE\bigg(h_v^{(\mathcal{l}-1)},AGGR\big(\{h_u^{(\mathcal{l})}\}_{u\in N(v)}\big)\bigg) (其中 hu(l)h_u^{(\mathcal{l})} 是message环节)
    如图所示,对每一层来说,只需要计算2×边数次message(与邻居互相传递一次信息)7;对K层GNN来说,只需要计算2K×边数次message。 GNN整体计算代价依边数和层数线性增长,这是很快的。 在这里插入图片描述

  3. 从full-batch GNN中,我们可以发现,layer-wise的节点嵌入更新可以复用前一层的嵌入,这样就显著减少了neighbor sampling中产生的计算冗余问题。但是,由于GPU memory所限,这种layer-wise的更新方式不适用于大型图。在这里插入图片描述

  4. subgraph sampling 核心思想:从整个大型图中抽样出一个小子图,在子图上用GPU运行有效的layer-wise节点嵌入更新。如图所示: 在这里插入图片描述 核心问题:什么子图适用于训练GNNs? 我们知道GNN通过边来传递信息,从而更新节点嵌入。因此,子图需要尽量多地保持原图中的边连接结构。通过这种方式,子图上的GNN就可以生成更接近于原图GNN的节点嵌入。 在这里插入图片描述

  5. subgraph sampling: case study 举例来说,下图中右边的两种子图,左边的子图更适用于训练GNN:保持了必要的社区结构8、边连接模式,没有产生孤立点。 在这里插入图片描述

  6. 利用社区结构 现实世界的图会呈现出社区结构,一个大型图可以被解构为多个小社区。 将一个社区抽样为一个子图,每个子图就能保持必要的原图局部connectivity模式。 在这里插入图片描述

  7. Cluster-GCN

    1. overview 我们首先介绍 vanilla9 Cluster-GCN。 Cluster-GCN分为两步:
      1. pre-processing: 给定一个大型图,将其分割为多个node group(如子图)。
      2. mini-batch training: 每次抽样一个node group,对其induced subgraph10应用GNN的message passing。 如图所示: 在这里插入图片描述
    2. pre-processing 给定一个大型图 G=(V,E)G=(V,E),将其节点 VV 分割到 CC 个组中:V1,,VCV_1,\dots,V_C 我们可以使用任何scalable的社区发现方法,如Louvain8 或METIS11 方法。 V1,,VCV_1,\dots,V_C induces CC 个子图:G1,,GCG_1,\dots,G_C (注意:group之间的边不被包含在这些子图中) 在这里插入图片描述
    3. mini-batching training 对每个mini-batch,随机抽样一个node group VCV_C,构建induced subgraph GC=(VC,EC)G_C=\big(V_C,E_C\big) 如图所示: 在这里插入图片描述GCG_C 上应用GNN的layer-wise节点更新,获取所有节点 vVCv\in V_C 的嵌入 hv\mathbf{h}_v。 对每个节点求损失函数,对所有节点的损失函数求平均:lsub(θ)=1VCvVClv(θ)\mathcal{l}_{sub}(\mathbf{\theta})=\dfrac{1}{|V_C|}\cdot\sum_{v\in V_C}\mathcal{l}_{v}(\mathbf{\theta}) 更新参数:θθlsub(θ)\mathbf{\theta}\leftarrow\mathbf{\theta}-\nabla \mathcal{l}_{sub}(\mathbf{\theta}) 在这里插入图片描述
  8. Cluster-GCN的问题 如前文所述得到的induced subgraph移除了组间的链接,这使得其他组对该组的message会在message passing的过程中丢失,这会影响GNN的实现效果。 如图所示: 在这里插入图片描述 图社区检测算法会将相似的节点分到一类中,这样被抽样的node group就会倾向于仅包含整个数据的一个很集中的部分。 在这里插入图片描述 被抽样的节点不够多样化,不够用以表示整个图结构:这样经被抽样节点得到的梯度(1VCvVClv(θ)\dfrac{1}{|V_C|}\cdot\sum_{v\in V_C}\nabla\mathcal{l}_{v}(\mathbf{\theta}))就会变得不可靠,会在不同node group上波动剧烈,即variance高。这会让SGD收敛变慢。 在这里插入图片描述

  9. advanced Cluster-GCN: overview 对上述Clutser-GCN问题的解决方案:在每个mini-batch聚合多个node groups. 将图划分为相对来说较小的节点组,在每个mini-batch中:抽样并聚合多个node groups,构建induced subgraph,剩下工作就和vanilla Cluster-GCN相同(计算节点嵌入、计算损失函数、更新参数)。 在这里插入图片描述 为什么这一策略有效: 抽样多个node groups可以让被抽样节点更能代表全图节点,在梯度估算时variance更低。 聚合多个node groups的induced subgraph包含了组间的边,message可以在组间流动。 在这里插入图片描述

  10. advanced Cluster-GCN 与vanilla Cluster-GCN相似,advanced Cluster-GCN分成两步: 第一步:pre-processing 给定一个大型图 G=(V,E)G=(V,E),将其节点 VV 分割到 CC 个相对较小的组中:V1,,VCV_1,\dots,V_CV1,,VCV_1,\dots,V_C 需要够小,才能使它们可以多个聚合起来,聚合后的组还是不会过大) 在这里插入图片描述 第二步:mini-batch training 对每个mini-batch,随机抽样一组 qq 个node groups: {Vt1,,Vtq}{V1,,VC}\{V_{t_1},\dots,V_{t_q}\}\subset\{V_1,\dots,V_C\} 聚合所有被抽样node groups中的节点:Vaggr=Vt1VtqV_{aggr}=V_{t_1}\cup\cdots\cup V_{t_q} 提取induced subgraph Gaggr=(Vaggr,Eaggr)G_{aggr}=\big(V_{aggr},E_{aggr}\big)(其中 Eaggr={(u,v)u,vVaggr}E_{aggr}=\{(u,v)|u,v\in V_{aggr}\}) 这样 EaggrE_{aggr} 就包含了组间的边。 在这里插入图片描述

  11. 时间复杂度对比 对于用K层GNN生成 MM (<<N)(<<N) (NN 是节点数)个节点嵌入: neighbor sampling(每层抽样 HH 个节点):每个节点的K层计算图的尺寸是 HKH^K,M个节点的计算代价就是 MHKM\cdot H^K 在这里插入图片描述 Cluster-GCN: 对M个节点induced的subgraph运行message passing,子图共包含 MDavgM\cdot D_{avg} 条边,对子图运行K层message passing的计算代价最多为 KMDavgK\cdot M\cdot D_{avg} 在这里插入图片描述 总结:用K层GNN生成 MM (<<N)(<<N) (NN 是节点数)个节点嵌入的计算代价为: neighbor-sampling(每层抽样 HH 个节点):MHKM\cdot H^K Cluster-GCN: KMDavgK\cdot M\cdot D_{avg} 假设 H=Davg2H=\dfrac{D_{avg}}{2},即抽样一半邻居。这样的话,Cluster-GCN(计算代价:2MHK2MHK)就会远比neighbor sampling(计算代价:MHKMH^K)更有效,因为Cluster-GCN依K线性增长而非指数增长。 一般我们会让H比 Davg2\dfrac{D_{avg}}{2} 大,可能2-3倍平均度数这样。现实中一般GNN都不深(即K小),所以一般用neighbor sampling的很多。 在这里插入图片描述

  12. Cluster-GCN总结

    1. Cluster-GCN首先将整体节点分割到小node groups中。
    2. 在每个mini-batch,抽样多个node groups然后聚合其节点。
    3. GNN在这些节点的induced subgraph上进行layer-wise的节点嵌入更新。
    4. Cluster-GCN比neighbor sampling计算效率更高,尤其当GNN层数大时。
    5. 但Cluster-GCN会导致梯度估计出现系统偏差(由于缺少社区间的边。以及当GNN层数加深时,在原图中是真的可以加深的(增大感受野),但在子图中就不行,加深了会弹回来,是虚假的加深) 在这里插入图片描述

4. Scaling up by Simplifying GNNs

  1. 本节课讲SGC模型,这个模型是通过去除非线性激活函数简化了GCN12模型。原论文3 证明经简化后在benchmark数据集上效果没有怎么变差。Simplified GCN证明是对模型设计很scalable的。在这里插入图片描述

  2. mean-pool的GCN: 给定图 G=(V,E)G=(V,E) ,输入节点特征 XvX_vvVv\in V),EE 包含自环(即对所有节点 vv,都有(v,v)E(v,v)\in E)。 设置输入节点嵌入为 hv(0)=Xvh_v^{(0)}=X_vk{0,,K1}k\in\{0,\dots,K-1\} 层:对所有节点 vv,以如下公式聚合邻居信息:hv(k+1)=ReLU(Wk1N(v)uN(v)hv(k))h_v^{(k+1)}=\text{ReLU}\big(\textcolor{pink}{W_k}\cdot\textcolor{blue}{\dfrac{1}{|N(v)|}\sum_{u\in N(v)}h_v^{(k)}}\big)(其中粉色字为经训练得到的参数矩阵,蓝色字部分为mean-pooling) 最终得到节点嵌入:zv=hv(K)z_v=h_v^{(K)} 在这里插入图片描述

  3. GCN的矩阵格式 这一张图的解释可以参考我之前写的笔记:cs224w(图机器学习)2021冬季课程学习笔记7 Graph Neural Networks 1: GNN Model_诸神缄默不语的博客-CSDN博客 第三部分序号13。 在这里插入图片描述 以下给出了将GCN从向量形式(邻居聚合形式)转换为矩阵形式的公式: 注意GCN用的是re-normalized版本 A~=D1/2AD1/2\tilde{A}=D^{-1/2}AD^{-1/2}(这个版本在实证上比 D1/2AD^{-1/2}A 效果更好) 在这里插入图片描述 上图中,第一个公式就是GCN以邻居聚合形式进行的定义,第二个公式就是GCN的矩阵形式,其中 WW 参数从左边移到右边可以考虑一下就因为 HHhTh^T 的堆叠,所以矩阵形式要乘 WW 的参数的话就要倒到右边并取转置……就,这个把 WW 脑内拆解一下应该就可以理解。

  4. Simplifying GCN 移除掉GCN中的ReLU非线性激活函数,以简化GCN:H(k+1)=A~H(k)WkTH^{(k+1)}=\tilde{A}H^{(k)}W_k^T 经如下图所示(应该还挺直观的)的迭代推理,易知 H(K)H^{(K)} 可以表示为 A~KXWT\tilde{A}^KXW^T 的形式。 在这里插入图片描述 其中 A~KX\tilde{A}^KX 不含有任何需要训练得到的参数,因此可以被pre-compute。这可以通过一系列稀疏矩阵向量乘法来加速计算过程,即用 A~\tilde{A} 左乘 XX K次。 在这里插入图片描述X~=A~KX\tilde{X}=\tilde{A}^KX,为一个pre-computed matrix,则simplifie GCN的最终嵌入就是:H(K)=X~WTH^{(K)}=\tilde{X}W^T 这就是一个对pre-computed matrix的线性转换。 将矩阵形式转换回节点嵌入形式,即得到 hv(K)=WX~vh_v^{(K)}=W\tilde{X}_v(其中 X~v\tilde{X}_v 是pre-computed节点 vv 的特征向量),即节点 vv 的嵌入仅依赖于它自己的pre-processed特征。 在这里插入图片描述 X~\tilde{X} 计算完成后,MM 个节点的嵌入就可以以依 MM 线性增长的时间复杂度来生成: hv1(K)=WX~v1h_{v_1}^{(K)}=W\tilde{X}_{v_1} hv2(K)=WX~v2h_{v_2}^{(K)}=W\tilde{X}_{v_2} \dots hvM(K)=WX~vMh_{v_M}^{(K)}=W\tilde{X}_{v_M} 在这里插入图片描述

  5. Simplified GCN: Summary Simplified GCN分成两步:

    1. pre-processing step: precompute X~=A~KX\tilde{X}=\tilde{A}^KX(可以在CPU上做)
    2. mini-batch training step: 对每个mini-batch,随机抽样M个节点 {v1,v2,,vM}\{v_1,v_2,\dots,v_M\} 计算其嵌入:hv1(K)=WX~v1,hv2(K)=WX~v2,,hvM(K)=WX~vMh_{v_1}^{(K)}=W\tilde{X}_{v_1},h_{v_2}^{(K)}=W\tilde{X}_{v_2},\dots,h_{v_M}^{(K)}=W\tilde{X}_{v_M} 用该嵌入进行预测,计算M个数据点上的平均损失函数。 应用SGD参数更新。 在这里插入图片描述
  6. SGC与其他方法的比较

    1. 与neighbor sampling相比:SGC生成节点嵌入的效率更高(不需要对每个节点构建大计算图)
    2. 与Cluster-GCN相比:SGC的mini-batch节点可以从整体节点中完全随机地抽样,不需要从几个groups里面抽样。 这样就可以减少训练过程中的SGD variance13
    3. 但这个模型的表现力也更低,因为生成节点嵌入的过程中没有非线性。 在这里插入图片描述 在这里插入图片描述
  7. 但事实上,在半监督学习节点分类benchmark上,simplified GCN和原始GNNs的表现力几乎相当,这是由于graph homophily14 的存在: 很多节点分类任务的图数据都表现出homophily结构,即有边相连的节点对之间倾向于具有相同的标签。 举例来说,在文献引用网络中的文献分类任务,引用文献往往是同类;在社交网络中给用户推荐电影的任务,社交网络中是朋友关系的用户往往倾向于喜欢相同的电影。 在simplified GCN中,preprocessing阶段是用 A~\tilde{A} 左乘 XX K次,即pre-processed特征是迭代求其邻居节点特征平均值而得到的(如下图三),因此有边相连的节点倾向于有相似的pre-processed特征,这样模型就倾向于将有边相连的节点预测为同一标签,从而很好地对齐了很多节点分类benchmark数据集中的graph homophily性质。 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

  8. simplified GCN: summary

    1. simplified GCN去除了GCN中的非线性,并将其简化为对节点特征进行的简单pre-processing。
    2. 得到pre-processed特征后,就可以直接应用scalable mini-batch SGD直接优化参数。
    3. simplified GCN在节点分类benchmark中表现很好,这是因为特征pre-processing很好地对齐了现实世界预测任务中的graph homophily现象。 在这里插入图片描述

Footnotes

  1. 可参考我之前写的笔记。 原论文: Inductive Representation Learning on Large Graphs Hamilton et al. (2017) 2

  2. Cluster-GCN: An Efficient Algorithm for Training Deep and Large Graph Convolutional Networks Chiang et al. KDD 2019 2

  3. Simplifying Graph Convolutional Networks Wu et al. ICML 2019 2 3

  4. 可参考我之前写的笔记:cs224w(图机器学习)2021冬季课程学习笔记4 Link Analysis: PageRank (Graph as Matrix)_诸神缄默不语的博客-CSDN博客 具体的关于这个RWR的relevance score感觉可以参考这两篇文:Fast Random Walk with Restart and Its ApplicationsSupervised and extended restart in random walks for ranking and link prediction in networks。我是没有看的啦,我感觉暂时还无此需要。

  5. scale free 无尺度网络 其典型特征是在网络中的大部分节点只和很少节点连接,而有极少的节点与非常多的节点连接。 可参考:无尺度网络 - 维基百科,自由的百科全书

  6. Redundancy-Free Computation Graphs for Graph Neural Networks

  7. 这种按照边来计算message的信息的逻辑好像就是PyG那种计算方式的逻辑……但是实话实说我没太搞懂,就是,我能理解吧,差不多能理解,但是具体的还不懂。以后再慢慢看吧。如果读者诸位能搞懂请告诉我一声。

  8. 关于社区发现问题,可参考我之前写的博文:cs224w(图机器学习)2021冬季课程学习笔记16 Community Detection in Networks_诸神缄默不语的博客-CSDN博客 2

  9. vanilla有香子兰香味的; 香草味的; 普通的; 寻常的; 毫无特色的;

  10. subgraph, induced subgraph等概念可参考我之前写的笔记:cs224w(图机器学习)2021冬季课程学习笔记15 Frequent Subgraph Mining with GNNs_诸神缄默不语的博客-CSDN博客

  11. A Fast and High Quality Multilevel Scheme for Partitioning Irregular Graphs Karypis et al. SIAM 1998

  12. 可参考我之前写的笔记。 原论文: Semi-Supervised Classification with Graph Convolutional Networks Kipf & Welling ICLR 2017

  13. 就这个直观上可以理解为SGD每个mini-batch之间如果差异比较小、就每个mini-batch都能代表整体数据的话,应该就说SGD variance比较低。但是具体来说这个SGD variance是什么,我谷歌了一下感觉还是个比较复杂的话题,还有论文啥的……一时之间搞不懂,以后有缘再看吧。

  14. homophily:据我简单谷歌,homophily应该是一种同类相聚的倾向,一种理论。 其他可以参考我之前写的这篇笔记: cs224w(图机器学习)2021冬季课程学习笔记6 Message Passing and Node Classification_诸神缄默不语的博客-CSDN博客