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

文章目录

  • 1. 介绍scale up GNN问题
  • 2. GraphSAGE Neighbor Sampling: Scaling up GNNs
  • 3. Cluster-GCN: Scaling up GNNs
  • 4. Scaling up by Simplifying GNNs

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(θ)=1N∑i=1N−1li(θ)\mathcal{l}(\mathbf{\theta})=\dfrac{1}{N}\sum\limits_{i=1}^{N-1}\mathcal{l}_i(\mathbf{\theta})l(θ)=N1​i=1∑N−1​li​(θ)(其中 θ\mathbf{\theta}θ 是模型参数,li(θ)\mathcal{l}_i(\mathbf{\theta})li​(θ) 是第 iii 个数据点的损失函数)。
    我们使用随机梯度下降stochastic gradient descent(SGD)方法:随机抽样 MMM (<<N)(<<N)(<<N) 个数据(mini-batches),计算 MMM 个节点上的 lsub(θ)\mathcal{l}_{sub}(\mathbf{\theta})lsub​(θ),用SGD更新模型:θ←θ−∇lsub(θ)\mathbf{\theta}\leftarrow\mathbf{\theta}-\nabla \mathcal{l}_{sub}(\mathbf{\theta})θ←θ−∇lsub​(θ)

    如果我们想直接将标准SGD应用于GNN的话,我们就会遇到问题:
    在mini-batch时,我们独立随机抽样 MMM (<<N)(<<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. 随机抽样 MMM (<<N)(<<N)(<<N) 个节点
    2. 对每个被抽样的节点 vvv,获取其K跳邻居,构建计算图,用以生成 vvv 的嵌入。
    3. 计算 MMM 个节点上的平均损失函数 lsub(θ)\mathcal{l}_{sub}(\mathbf{\theta})lsub​(θ)。
    4. 用SGD更新模型:θ←θ−∇lsub(θ)\mathbf{\theta}\leftarrow\mathbf{\theta}-\nabla \mathcal{l}_{sub}(\mathbf{\theta})θ←θ−∇lsub​(θ)
  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_kHk​ 个节点,构成计算图。如图所示。
    K层GNN一个计算图最多有 ∏k=1KHk\prod^K_{k=1}H_k∏k=1K​Hk​ 个叶节点(每一层都抽满)。
  7. neighbor sampling注意事项
    1. 对sampling number HHH 的权衡:小 HHH 会使邻居聚合过程效率更高,但训练过程也会更不稳定(由于邻居聚合过程中variance会更大)。
    2. 计算用时:即使有了neighbor sampling,计算图的尺寸还是跟GNN层数K呈指数增长。
    3. 如何抽样节点:
      1. 随机抽样:快,但常不是最优的(可能会抽样到很多“不重要的”节点)
      2. random walk with restarts4:
        自然世界中的图是scale free5 的,即绝大多数节点度数很低,少量节点度数很高。对这种图随机抽样,会抽样出很多低度数的叶节点。
        抽样重要节点的策略:
         1. 计算各节点自所求节点开始的random walk with restarts分值 RiR_iRi​
         2. 每一层抽样 HHH 个 RiR_iRi​ 最高(与原节点相关性最高的节点)的邻居节点 iii
        在实践中,这种策略效果更好。
  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中,所有节点嵌入都是根据前一层嵌入同时计算出的:
    对所有 v∈Vv\in Vv∈V:hv(l)=COMBINE(hv(l−1),AGGR({hu(l)}u∈N(v)))h_v^{(\mathcal{l})}=COMBINE\bigg(h_v^{(\mathcal{l}-1)},AGGR\big(\{h_u^{(\mathcal{l})}\}_{u\in N(v)}\big)\bigg)hv(l)​=COMBINE(hv(l−1)​,AGGR({hu(l)​}u∈N(v)​))
    (其中 hu(l)h_u^{(\mathcal{l})}hu(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)G=(V,E),将其节点 VVV 分割到 CCC 个组中:V1,…,VCV_1,\dots,V_CV1​,…,VC​
      我们可以使用任何scalable的社区发现方法,如Louvain8 或METIS11 方法。
      V1,…,VCV_1,\dots,V_CV1​,…,VC​ induces CCC 个子图:G1,…,GCG_1,\dots,G_CG1​,…,GC​
      (注意:group之间的边不被包含在这些子图中)
    3. mini-batching training
      对每个mini-batch,随机抽样一个node group VCV_CVC​,构建induced subgraph GC=(VC,EC)G_C=\big(V_C,E_C\big)GC​=(VC​,EC​)
      如图所示:

      在 GCG_CGC​ 上应用GNN的layer-wise节点更新,获取所有节点 v∈VCv\in V_Cv∈VC​ 的嵌入 hv\mathbf{h}_vhv​。
      对每个节点求损失函数,对所有节点的损失函数求平均:lsub(θ)=1∣VC∣⋅∑v∈VClv(θ)\mathcal{l}_{sub}(\mathbf{\theta})=\dfrac{1}{|V_C|}\cdot\sum_{v\in V_C}\mathcal{l}_{v}(\mathbf{\theta})lsub​(θ)=∣VC​∣1​⋅∑v∈VC​​lv​(θ)
      更新参数:θ←θ−∇lsub(θ)\mathbf{\theta}\leftarrow\mathbf{\theta}-\nabla \mathcal{l}_{sub}(\mathbf{\theta})θ←θ−∇lsub​(θ)
  8. Cluster-GCN的问题
    如前文所述得到的induced subgraph移除了组间的链接,这使得其他组对该组的message会在message passing的过程中丢失,这会影响GNN的实现效果。
    如图所示:

    图社区检测算法会将相似的节点分到一类中,这样被抽样的node group就会倾向于仅包含整个数据的一个很集中的部分。

    被抽样的节点不够多样化,不够用以表示整个图结构:这样经被抽样节点得到的梯度(1∣VC∣⋅∑v∈VC∇lv(θ)\dfrac{1}{|V_C|}\cdot\sum_{v\in V_C}\nabla\mathcal{l}_{v}(\mathbf{\theta})∣VC​∣1​⋅∑v∈VC​​∇lv​(θ))就会变得不可靠,会在不同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)G=(V,E),将其节点 VVV 分割到 CCC 个相对较小的组中:V1,…,VCV_1,\dots,V_CV1​,…,VC​(V1,…,VCV_1,\dots,V_CV1​,…,VC​ 需要够小,才能使它们可以多个聚合起来,聚合后的组还是不会过大)

    第二步:mini-batch training
    对每个mini-batch,随机抽样一组 qqq 个node groups: {Vt1,…,Vtq}⊂{V1,…,VC}\{V_{t_1},\dots,V_{t_q}\}\subset\{V_1,\dots,V_C\}{Vt1​​,…,Vtq​​}⊂{V1​,…,VC​}
    聚合所有被抽样node groups中的节点:Vaggr=Vt1∪⋯∪VtqV_{aggr}=V_{t_1}\cup\cdots\cup V_{t_q}Vaggr​=Vt1​​∪⋯∪Vtq​​
    提取induced subgraph Gaggr=(Vaggr,Eaggr)G_{aggr}=\big(V_{aggr},E_{aggr}\big)Gaggr​=(Vaggr​,Eaggr​)(其中 Eaggr={(u,v)∣u,v∈Vaggr}E_{aggr}=\{(u,v)|u,v\in V_{aggr}\}Eaggr​={(u,v)∣u,v∈Vaggr​})
    这样 EaggrE_{aggr}Eaggr​ 就包含了组间的边。

  11. 时间复杂度对比
    对于用K层GNN生成 MMM (<<N)(<<N)(<<N) (NNN 是节点数)个节点嵌入:
    neighbor sampling(每层抽样 HHH 个节点):每个节点的K层计算图的尺寸是 HKH^KHK,M个节点的计算代价就是 M⋅HKM\cdot H^KM⋅HK

    Cluster-GCN: 对M个节点induced的subgraph运行message passing,子图共包含 M⋅DavgM\cdot D_{avg}M⋅Davg​ 条边,对子图运行K层message passing的计算代价最多为 K⋅M⋅DavgK\cdot M\cdot D_{avg}K⋅M⋅Davg​

    总结:用K层GNN生成 MMM (<<N)(<<N)(<<N) (NNN 是节点数)个节点嵌入的计算代价为:
    neighbor-sampling(每层抽样 HHH 个节点):M⋅HKM\cdot H^KM⋅HK
    Cluster-GCN: K⋅M⋅DavgK\cdot M\cdot D_{avg}K⋅M⋅Davg​
    假设 H=Davg2H=\dfrac{D_{avg}}{2}H=2Davg​​,即抽样一半邻居。这样的话,Cluster-GCN(计算代价:2MHK2MHK2MHK)就会远比neighbor sampling(计算代价:MHKMH^KMHK)更有效,因为Cluster-GCN依K线性增长而非指数增长。
    一般我们会让H比 Davg2\dfrac{D_{avg}}{2}2Davg​​ 大,可能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)G=(V,E) ,输入节点特征 XvX_vXv​(v∈Vv\in Vv∈V),EEE 包含自环(即对所有节点 vvv,都有(v,v)∈E(v,v)\in E(v,v)∈E)。
    设置输入节点嵌入为 hv(0)=Xvh_v^{(0)}=X_vhv(0)​=Xv​
    对 k∈{0,…,K−1}k\in\{0,\dots,K-1\}k∈{0,…,K−1} 层:对所有节点 vvv,以如下公式聚合邻居信息:hv(k+1)=ReLU(Wk⋅1∣N(v)∣∑u∈N(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)hv(k+1)​=ReLU(Wk​⋅∣N(v)∣1​∑u∈N(v)​hv(k)​)(其中粉色字为经训练得到的参数矩阵,蓝色字部分为mean-pooling)
    最终得到节点嵌入:zv=hv(K)z_v=h_v^{(K)}zv​=hv(K)​

  3. GCN的矩阵格式
    这一张图的解释可以参考我之前写的笔记:cs224w(图机器学习)2021冬季课程学习笔记7 Graph Neural Networks 1: GNN Model_诸神缄默不语的博客-CSDN博客 第三部分序号13。

    以下给出了将GCN从向量形式(邻居聚合形式)转换为矩阵形式的公式:
    注意GCN用的是re-normalized版本 A~=D−1/2AD−1/2\tilde{A}=D^{-1/2}AD^{-1/2}A~=D−1/2AD−1/2(这个版本在实证上比 D−1/2AD^{-1/2}AD−1/2A 效果更好)

    上图中,第一个公式就是GCN以邻居聚合形式进行的定义,第二个公式就是GCN的矩阵形式,其中 WWW 参数从左边移到右边可以考虑一下就因为 HHH 是 hTh^ThT 的堆叠,所以矩阵形式要乘 WWW 的参数的话就要倒到右边并取转置……就,这个把 WWW 脑内拆解一下应该就可以理解。

  4. Simplifying GCN
    移除掉GCN中的ReLU非线性激活函数,以简化GCN:H(k+1)=A~H(k)WkTH^{(k+1)}=\tilde{A}H^{(k)}W_k^TH(k+1)=A~H(k)WkT​
    经如下图所示(应该还挺直观的)的迭代推理,易知 H(K)H^{(K)}H(K) 可以表示为 A~KXWT\tilde{A}^KXW^TA~KXWT 的形式。

    其中 A~KX\tilde{A}^KXA~KX 不含有任何需要训练得到的参数,因此可以被pre-compute。这可以通过一系列稀疏矩阵向量乘法来加速计算过程,即用 A~\tilde{A}A~ 左乘 XXX K次。

    设 X~=A~KX\tilde{X}=\tilde{A}^KXX~=A~KX,为一个pre-computed matrix,则simplifie GCN的最终嵌入就是:H(K)=X~WTH^{(K)}=\tilde{X}W^TH(K)=X~WT
    这就是一个对pre-computed matrix的线性转换。
    将矩阵形式转换回节点嵌入形式,即得到 hv(K)=WX~vh_v^{(K)}=W\tilde{X}_vhv(K)​=WX~v​(其中 X~v\tilde{X}_vX~v​ 是pre-computed节点 vvv 的特征向量),即节点 vvv 的嵌入仅依赖于它自己的pre-processed特征。

    X~\tilde{X}X~ 计算完成后,MMM 个节点的嵌入就可以以依 MMM 线性增长的时间复杂度来生成:
    hv1(K)=WX~v1h_{v_1}^{(K)}=W\tilde{X}_{v_1}hv1​(K)​=WX~v1​​
    hv2(K)=WX~v2h_{v_2}^{(K)}=W\tilde{X}_{v_2}hv2​(K)​=WX~v2​​
    …\dots…
    hvM(K)=WX~vMh_{v_M}^{(K)}=W\tilde{X}_{v_M}hvM​(K)​=WX~vM​​

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

    1. pre-processing step: precompute X~=A~KX\tilde{X}=\tilde{A}^KXX~=A~KX(可以在CPU上做)
    2. mini-batch training step:
      对每个mini-batch,随机抽样M个节点 {v1,v2,…,vM}\{v_1,v_2,\dots,v_M\}{v1​,v2​,…,vM​}
      计算其嵌入: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}hv1​(K)​=WX~v1​​,hv2​(K)​=WX~v2​​,…,hvM​(K)​=WX~vM​​
      用该嵌入进行预测,计算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}A~ 左乘 XXX 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现象。

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

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

  3. Simplifying Graph Convolutional Networks
    Wu et al. ICML 2019 ↩︎ ↩︎ ↩︎

  4. 可参考我之前写的笔记:cs224w(图机器学习)2021冬季课程学习笔记4 Link Analysis: PageRank (Graph as Matrix)_诸神缄默不语的博客-CSDN博客
    具体的关于这个RWR的relevance score感觉可以参考这两篇文:Fast Random Walk with Restart and Its Applications 和 Supervised 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博客 ↩︎ ↩︎

  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博客 ↩︎

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

  1. cs224w(图机器学习)2021冬季课程学习笔记2: Traditional Methods for ML on Graphs

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. 章节前言 2. Traditional Feature-based Methods: Nod ...

  2. cs224w(图机器学习)2021冬季课程学习笔记10 Applications of Graph Neural Networks

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. Graph Augmentation for GNNs 1.1 图特征增强Feature A ...

  3. cs224w(图机器学习)2021冬季课程学习笔记11 Theory of Graph Neural Networks

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. How Expressive are Graph Neural Networks? 2. D ...

  4. cs224w(图机器学习)2021冬季课程学习笔记16 Community Detection in Networks

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. Community Detection in Networks 2. Network Com ...

  5. cs224w(图机器学习)2021冬季课程学习笔记8 Colab 2

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 VX号"PolarisRisingWar"可直接搜索添加作者好友讨论. 更新日志: 20 ...

  6. cs224w(图机器学习)2021冬季课程学习笔记12 Knowledge Graph Embeddings

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. Heterogeneous Graphs and Relational GCN (RGCN) ...

  7. cs224w(图机器学习)2021冬季课程学习笔记4 Link Analysis: PageRank (Graph as Matrix)

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. Graph as Matrix 2. PageRank / the Google Algor ...

  8. cs224w(图机器学习)2021冬季课程学习笔记20 Advanced Topics on GNNs

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. Advanced Topics on GNNs 2. Limitations of Grap ...

  9. cs224w(图机器学习)2021冬季课程学习笔记18 Colab 4:异质图

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 Question 1. DeepSNAP异质图简介 1.1 Question 1.1:分配Node ...

最新文章

  1. 小森林顺序_英桥镇彩虹幼儿园趣味亲子活动—森林运动会
  2. mysql8.0远程linux_【Linux】【mysql】mysql8.0开启远程访问及常见问题
  3. 设计模式-Observer模式
  4. 如何去掉手机php,dedecms怎么关闭手机版
  5. 使用Picasso实现图片圆角和图片圆形
  6. 分享AI有道干货 | 126 篇 AI 原创文章精选(ML、DL、资源、教程)
  7. python with语句_python中的with语句
  8. 调度算法为何被阿里如此重视?
  9. Mozilla正修复Firefox遗留8年的漏洞
  10. 大白菜u启动盘安装linux,大白菜U盘启动pe装系统教程
  11. Burp Suite CA证书下载及导入教程
  12. java短信平台开源_Java通过SMS短信平台实现发短信功能
  13. 解决chrome 浏览器不能看视频
  14. Stata实现结构方程模型
  15. DbVisualizer 9 解决中文乱码问题(win7,win10)
  16. openFeign夺命连环9问,这谁受得了?
  17. 网络协议分析(3):FTP
  18. 2010年高考作文题目大全
  19. 多态的摸索之路( 甲 )
  20. python使用urllib发送post请求_python使用urllib2提交http post请求的方法

热门文章

  1. vue 设置el-table 某一列点击出现输入框可以编辑
  2. 【Gitee简单入门】
  3. Web移动端学习第二天
  4. solidworks下载资源
  5. 2010年公务员(想考公务员的同学注意了,一定要看哦,很棒的)不断更新编辑中...
  6. 电机一启动或负载电流瞬间增大,电源输出电压就下降,欠压,随后又恢复正常
  7. JAVA语法三:继承和多态
  8. coreldraw做倒影总会让人发现有意想不到的效果呈现出来
  9. 极客日报:人人影视字幕组因侵权被查;GitHub 评论区支持上传视频;
  10. 写给小白的接入网科普