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

文章目录

  • 1. Graph Augmentation for GNNs
    • 1.1 图特征增强Feature Augmentation
    • 1.2 图结构增强Structure Augmentation
  • 2. Learning Objective
    • 2.1 Prediction Head
    • 2.2 Predictions & Labels
    • 2.3 损失函数Loss Function
    • 2.4 评估指标Evaluation Metrics
    • 2.5 切分数据集
    • 2.6 GNN Training Pipeline
  • 3. GNN design space 总结

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


本章主要内容
本章继续上一章1内容,讲design space剩下的两部分:图增强,如何训练一个GNN模型(GNN训练全流程)。

在图增强方面:
首先介绍图增强的原因和分类。
然后分别介绍:
graph feature augmentation的方法:使用常数特征、独热编码、图结构信息
graph structure augmentation的方法:
 对稀疏图:增加虚拟边或虚拟节点
 对稠密图:节点邻居抽样

接下来讲GNN模型训练的学习目标。
首先介绍不同粒度任务下的prediction head(将节点嵌入转换为最终预测向量):节点级别的任务可以直接进行线性转换。链接级别的任务可以将节点对的嵌入进行concatenation或点积后进行线性转换。图级别的任务是将图中所有节点嵌入作池化操作,可以通过hierarchical global pooling方法来进行优化(实际应用:DiffPool)。
接下来介绍了预测值和标签的问题:有监督/无监督学习情况下的标签来源。
然后介绍损失函数:分类常用交叉熵2,回归任务常用MSE(L2 loss)。
接下来介绍评估指标:回归任务常用RMSE和MAE,分类任务常用accuracy和ROC AUC。
最后讲了设置GNN预测任务(将图数据拆分为训练/验证/测试集)的方法,分为transductive和inductive两种。


1. Graph Augmentation for GNNs

这一部分在 Lecture 71 的slides中写过,但是在 Lecture 8(本章)课程中讲的,所以我笔记也放在这一部分来做。

  1. 回顾一遍在 Lecture 71 第一节中讲过的GNN图增强部分:
  2. 为什么要进行图增强?
    我们在之前的学习过程中都假设原始数据和应用于GNN的计算图一致,但很多情况下原始数据可能不适宜于GNN:

    1. 特征层面:输入图可能缺少特征(也可能是特征很难编码)→特征增强
    2. 结构层面:
      1. 图可能过度稀疏→导致message passing效率低(边不够嘛)
      2. 图可能过度稠密→导致message passing代价太高(每次做message passing都需要对好几个节点做运算)
      3. 图可能太大→GPU装不下
    3. 事实上输入图很难恰好是适宜于GNN(图数据嵌入)的最优计算图
  3. 图增强方法
    1. 图特征:输入图缺少特征→特征增强
    2. 图结构:
      1. 过于稀疏→增加虚拟节点/边
      2. 过于稠密→在message passing时抽样邻居
      3. 太大→在计算嵌入时抽样子图(在后续课程中会专门介绍如何将GNN方法泛化到大型数据上scale up)

1.1 图特征增强Feature Augmentation

  1. 应对图上缺少特征的问题(比如只有邻接矩阵),标准方法:

    1. constant:给每个节点赋常数特征
    2. one-hot:给每个节点赋唯一ID,将ID转换为独热编码向量的形式(即ID对应索引的元素为1,其他元素都为0)
    3. 两种方法的比较:
constant node feature one-hot node feature
表示能力 中等:所有节点都一样,但是GNN仍然可以学到图结构信息 高:每个节点ID唯一,所以可以储存节点特有的信息
inductive能力 高:对新节点再赋这个常数就行 低:无法泛化到新节点上,因为对新节点再赋ID的话,GNN无法嵌入这个新ID
计算力代价 低:只有一维特征 高: O ( ∣ V ∣ ) O(|V|) O(V) 维特征,无法应用到大型图上
适用情况 所有图,inductive 小图,transductive
  1. 应对GNN很难学到特定图结构的问题(如果不用特征专门加以区分,GNN就学不到这些特征):

    1. 举例:节点所处环上节点数cycle count这一属性
      问题:因为度数相同(都是2),所以无论环上有多少个节点,GNN都会得到相同的计算图(二叉树),无法分别。
      解决方法:加上cycle count这一特征(独热编码向量,节点数对应索引的元素为1,其他元素为0)。
    2. 其他常用于数据增强的特征:clustering coefficient,centrality(及任何 Lecture 23 中讲过的特征),PageRank4

1.2 图结构增强Structure Augmentation

  1. 对稀疏图:增加虚拟边virtual nodes或虚拟节点virtual edges

    1. 虚拟边:在2-hop邻居之间增加虚拟边
      直觉:在GNN计算时不用邻接矩阵 A A A,而用 A + A 2 A+A^2 A+A2A 2 A^2 A2 的每个元素是对应节点对之间长度为2的路径数量35
      适用范例:bipartite graphs6
       如作者-论文组成的bipartite graph,增加虚拟边可以在合作作者或者同作者论文之间增加链接。
      这样GNN可以浅一些,训练也会更快一些(因为在同类节点之间可以直接交互了)
      但如果添的边太多了也会增加复杂性
    2. 虚拟节点:增加一个虚拟节点,这个虚拟节点与图(或者一个从图中选出的子图)上的所有节点相连
      这会导致所有节点最长距离变成2(节点A-虚拟节点-节点B)
      优点:稀疏图上message passing大幅提升
  2. 对稠密图:节点邻居抽样node neighborhood sampling7
    在message passing的过程中,不使用一个节点的全部邻居,而改为抽样一部分邻居。

    举例来说,对每一层,在传播信息时随机选2个邻居,计算图就会从上图变成下图:

    优点:计算图变小
    缺点:可能会损失重要信息(因为有的邻居直接不用了嘛)

    可以每次抽样不同的邻居,以增加模型鲁棒性:

  3. 节点邻居抽样示例8
    我们希望经抽样后,结果跟应用所有邻居的结果类似,但还能高效减少计算代价(在后续课程中会专门介绍如何将GNN方法泛化到大型数据上scale up)。
    实践证明效果很好。

2. Learning Objective

  1. 回顾一遍在 Lecture 71 第一节中讲过的学习目标部分:我们如何训练一个GNN模型?
  2. GNN训练pipeline
    输入数据→用GNN训练数据→得到节点嵌入→prediction head(在不同粒度的任务下,将节点嵌入转换为最终需要的预测向量)→得到预测向量和标签→选取损失函数→选取评估指标
    (前三部分已经在本章及上章前文讲述过)

2.1 Prediction Head

  1. 不同粒度下的prediction head:节点级别,边级别,图级别
  2. 节点级别:直接用节点嵌入做预测
    GNN得到的节点嵌入 h v ( L ) \mathbf{h}_v^{(L)} hv(L):d维
    预测目标向量:k维(k-way prediction)
      分类任务:在k个类别之间做分类
      回归任务:在k个目标target / characteristic 上做回归
    y ^ v = Head node ( h v ( L ) ) = W ( H ) h v ( L ) \hat{\mathbf{y}}_v=\text{Head}_{\text{node}}(\mathbf{h}_v^{(L)})=\mathbf{W}^{(H)}\mathbf{h}_v^{(L)} y^v=Headnode(hv(L))=W(H)hv(L)
    W ( H ) ∈ R k ∗ d \mathbf{W}^{(H)}\in\mathbb{R}^{k*d} W(H)Rkd,将d维嵌入映射到k维输出
  3. 边级别:用节点嵌入对来做预测
    k-way prediction
    y ^ u v = Head edge ( h u ( L ) , h v ( L ) ) \hat{\mathbf{y}}_{uv}=\text{Head}_{\text{edge}}(\mathbf{h}_u^{(L)},\mathbf{h}_v^{(L)}) y^uv=Headedge(hu(L),hv(L))
    Head edge ( h u ( L ) , h v ( L ) ) \text{Head}_{\text{edge}}(\mathbf{h}_u^{(L)},\mathbf{h}_v^{(L)}) Headedge(hu(L),hv(L)) 的可选方法:

    1. concatenation+linear
      这种方法在讲GAT1的时候介绍过,注意力机制 a a a 可以用这种方法将节点对信息转换为注意力系数 e e e
      y ^ u v = Linear ( Concat ( h u ( L ) , h v ( L ) ) ) \hat{\mathbf{y}}_{uv}=\text{Linear}(\text{Concat}(\mathbf{h}_u^{(L)},\mathbf{h}_v^{(L)})) y^uv=Linear(Concat(hu(L),hv(L)))
      Linear ( ⋅ ) \text{Linear}(\cdot) Linear() 将2d维嵌入映射到k维输出
    2. 点积: y ^ u v = ( h u ( L ) ) T h v ( L ) \hat{\mathbf{y}}_{uv}=(\mathbf{h}_u^{(L)})^T\mathbf{h}_v^{(L)} y^uv=(hu(L))Thv(L)
      这种方法只能应用于1-way prediction(因为点积输出结果就一维嘛),例如链接预测任务(预测边是否存在)

      应用到k-way prediction上:跟GAT中的多头注意力机制1类似,多算几组然后合并(公式中的 W ( 1 ) , . . . , W ( k ) \mathbf{W}^{(1)},...,\mathbf{W}^{(k)} W(1),...,W(k) 是可学习的参数):
      y ^ u v ( 1 ) = ( h u ( L ) ) T W ( 1 ) h v ( L ) . . . y ^ u v ( k ) = ( h u ( L ) ) T W ( k ) h v ( L ) y ^ u v = C o n c a t ( y ^ u v ( 1 ) , . . . , y ^ u v ( k ) ) ∈ R k \textcolor{brown}{\hat{\mathbf{y}}_{uv}^{(1)}}=(\mathbf{h}_u^{(L)})^T\textcolor{red}{\mathbf{W}^{(1)}}\mathbf{h}_v^{(L)} \\ ... \\ \textcolor{brown}{\hat{\mathbf{y}}_{uv}^{(k)}}=(\mathbf{h}_u^{(L)})^T\textcolor{red}{\mathbf{W}^{(k)}}\mathbf{h}_v^{(L)} \\ \hat{\mathbf{y}}_{uv}=Concat(\textcolor{brown}{\hat{\mathbf{y}}_{uv}^{(1)}},...,\textcolor{brown}{\hat{\mathbf{y}}_{uv}^{(k)}})\textcolor{blue}{\in\mathbb{R}^k} y^uv(1)=(hu(L))TW(1)hv(L)...y^uv(k)=(hu(L))TW(k)hv(L)y^uv=Concat(y^uv(1),...,y^uv(k))Rk

  4. 图级别:用图中所有节点的嵌入向量来做预测
    k-way prediction
    y ^ G = Head graph ( { h v ( L ) ∈ R d , ∀ v ∈ G } ) \hat{\mathbf{y}}_G=\text{Head}_{\text{graph}}(\{\mathbf{h}_v^{(L)}\in\mathbb{R}^d,\forall v\in G\}) y^G=Headgraph({hv(L)Rd,vG})
    Head graph ( ⋅ ) \text{Head}_{\text{graph}}(\cdot) Headgraph() 与GNN单层中的 AGG ( ⋅ ) \text{AGG}(\cdot) AGG()1 类似,都是将若干嵌入聚合为一个嵌入。

    Head graph ( { h v ( L ) ∈ R d , ∀ v ∈ G ) \text{Head}_{\text{graph}}(\{\mathbf{h}_v^{(L)}\in\mathbb{R}^d,\forall v\in G) Headgraph({hv(L)Rd,vG) 的可选方法9

    1. global mean pooling: y ^ G = Mean ( { h v ( L ) ∈ R d , ∀ v ∈ G } ) \hat{\mathbf{y}}_G=\textcolor{red}{\text{Mean}}(\{\mathbf{h}_v^{(L)}\in\mathbb{R}^d,\forall v\in G\}) y^G=Mean({hv(L)Rd,vG})
    2. global max pooling: y ^ G = Max ( { h v ( L ) ∈ R d , ∀ v ∈ G } ) \hat{\mathbf{y}}_G=\textcolor{red}{\text{Max}}(\{\mathbf{h}_v^{(L)}\in\mathbb{R}^d,\forall v\in G\}) y^G=Max({hv(L)Rd,vG})
    3. global sum pooling: y ^ G = Sum ( { h v ( L ) ∈ R d , ∀ v ∈ G } ) \hat{\mathbf{y}}_G=\textcolor{red}{\text{Sum}}(\{\mathbf{h}_v^{(L)}\in\mathbb{R}^d,\forall v\in G\}) y^G=Sum({hv(L)Rd,vG})
    4. 如果想比较不同大小的图,mean方法可能比较好(因为结果不受节点数量的影响);如果关心图的大小等信息,sum方法可能比较好。
      这些方法都在小图上表现很好。
      但是在大图上的global pooling方法可能会面临丢失信息的问题。

      举例:使用一维节点嵌入。
      G 1 G_1 G1 的节点嵌入为 { − 1 , − 2 , 0 , 1 , 2 } \{-1,-2,0,1,2\} {1,2,0,1,2}G 2 G_2 G2 的节点嵌入为 { − 10 , − 20 , 0 , 10 , 20 } \{-10,-20,0,10,20\} {10,20,0,10,20},显然两个图的节点嵌入差别很大,图结构很不相同。
      但是经过global sum pooling后:
      y ^ G 1 = Sum ( { − 1 , − 2 , 0 , 1 , 2 } ) = 0 \hat{\mathbf{y}}_{G_1}=\text{Sum}(\{-1,-2,0,1,2\})=0 y^G1=Sum({1,2,0,1,2})=0
      y ^ G 2 = Sum ( { − 10 , − 20 , 0 , 10 , 20 } ) = 0 \hat{\mathbf{y}}_{G_2}=\text{Sum}(\{-10,-20,0,10,20\})=0 y^G2=Sum({10,20,0,10,20})=0
      就这两个图的表示向量一样了,无法做出区分,这是不行的。
      为了解决这一问题,解决方法是hierarchical global pooling:分层聚合节点嵌入。
      举例:使用 ReLU ( Sum ( ⋅ ) ) \text{ReLU}(\text{Sum}(\cdot)) ReLU(Sum()) 做聚合,先分别聚合前两个节点和后三个节点的嵌入,然后再聚合这两个嵌入。
      G 1 G_1 G1
      第一轮: y a ^ = ReLU ( Sum ( { − 1 , − 2 } ) ) = 0 , y b ^ = ReLU ( Sum ( { 0 , 1 , 2 } ) ) = 3 \textcolor{blue}{\hat{\mathbf{y}_a}=\text{ReLU}(\text{Sum}(\{-1,-2\}))=0},\textcolor{orange}{\hat{\mathbf{y}_b}=\text{ReLU}(\text{Sum}(\{0,1,2\}))=3} ya^=ReLU(Sum({1,2}))=0,yb^=ReLU(Sum({0,1,2}))=3
      第二轮: y G ^ = ReLU ( Sum ( { y a , y b } ) ) = 3 \textcolor{red}{\hat{\mathbf{y}_G}=\text{ReLU}(\text{Sum}(\{\mathbf{y}_a,\mathbf{y}_b\}))=3} yG^=ReLU(Sum({ya,yb}))=3
      G 2 G_2 G2
      第一轮: y a ^ = ReLU ( Sum ( { − 10 , − 20 } ) ) = 0 , y b ^ = ReLU ( Sum ( { 0 , 10 , 20 } ) ) = 30 \textcolor{blue}{\hat{\mathbf{y}_a}=\text{ReLU}(\text{Sum}(\{-10,-20\}))=0},\textcolor{orange}{\hat{\mathbf{y}_b}=\text{ReLU}(\text{Sum}(\{0,10,20\}))=30} ya^=ReLU(Sum({10,20}))=0,yb^=ReLU(Sum({0,10,20}))=30
      第二轮: y G ^ = ReLU ( Sum ( { y a , y b } ) ) = 30 \textcolor{brown}{\hat{\mathbf{y}_G}=\text{ReLU}(\text{Sum}(\{\mathbf{y}_a,\mathbf{y}_b\}))=30} yG^=ReLU(Sum({ya,yb}))=30
      这样我们就可以将 G 1 G_1 G1G 2 G_2 G2 作出区分了
      一个hierarchical pooling的实际应用:DiffPool10(惯例,我又没咋看懂)
      大致来说,就是每一次先用一个GNN计算节点嵌入,然后用另一个GNN(这两个GNN可以同步运算)(两个GNN联合训练jointly train)计算节点属于哪一类,然后按照每一类对图进行池化。每一类得到一个表示向量,保留类间的链接,产生一个新的图。重复这一过程,直至得到最终的表示向量。
      将图池化问题与社区发现问题相结合,用节点嵌入识别社区→聚合社区内的节点得到community embeddings→用community embeddings识别supercommunity→聚合supercommunity内的节点得到supercommunity embeddings……

2.2 Predictions & Labels

  1. 有监督问题的标签 & 无监督问题的信号
  2. 有监督学习supervise learning:直接给出标签(如一个分子图是药的概率)
    无监督学习unsupervised learning / self-supervised learning:使用图自身的信号(如链接预测:预测两节点间是否有边)
    有时这两种情况下的分别比较模糊,在无监督学习任务中也可能有“有监督任务”,如训练GNN以预测节点clustering coefficient3
  3. 有监督学习的标签:按照实际情况而来
    举例:
    节点级别——引用网络中,节点(论文)属于哪一学科
    边级别——交易网络中,边(交易)是否有欺诈行为
    图级别——图(分子)是药的概率

    建议将无监督学习任务规约到三种粒度下的标签预测任务,因为这种预测任务有很多已做过的工作可资参考,会好做些。
    例如聚类任务可视为节点属于某一类的预测任务。

  4. 无监督学习的信号:
    在没有外部标签时,可以使用图自身的信号来作为有监督学习的标签。举例来说,GNN可以预测:
    节点级别:节点统计量(如clustering coefficient3, PageRank4 等)
    边级别:链接预测(隐藏两节点间的边,预测此处是否存在链接)
    图级别:图统计量(如预测两个图是否同构)
    这些都是不需要外部标签的

2.3 损失函数Loss Function

  1. 分类任务常用交叉熵,回归任务常用MSE
  2. 我们用 y ^ ( i ) \mathbf{\hat{y}}^{(i)} y^(i)y ( i ) \mathbf{y}^{(i)} y(i) 来统一指代各级别的预测值和标签( i i i 是观测编号)
  3. 分类任务的标签 y ( i ) \mathbf{y}^{(i)} y(i) 是离散数值,如节点分类任务的标签是节点属于哪一类。
    回归任务的标签 y ( i ) \mathbf{y}^{(i)} y(i) 是连续数值,如预测分子图是药的概率。
    两种任务都能用GNN。其区别主要在于损失函数和评估指标。
  4. 分类任务的损失函数交叉熵
    CE ( y ( i ) , y ^ ( i ) ) = − ∑ j = 1 K ( y j ( i ) log ⁡ y ^ j ( i ) ) \text{CE}\left(\mathbf{y}^{(i)},\mathbf{\hat{y}}^{(i)}\right)=-\sum_{j=1}^K\left(\mathbf{y}^{(i)}_j\log{\mathbf{\hat y}^{(i)}_j}\right) CE(y(i),y^(i))=j=1K(yj(i)logy^j(i))i i i 是观测序号, j j j 是类别对应的维度索引)
    Loss = ∑ i = 1 N CE ( y ( i ) , y ^ ( i ) ) \text{Loss}=\sum_{i=1}^N\text{CE}\left(\mathbf{y}^{(i)},\mathbf{\hat y}^{(i)}\right) Loss=i=1NCE(y(i),y^(i))
  5. 回归任务的损失函数MSE / L2 loss
    MSE ( y ( i ) , y ^ ( i ) ) = ∑ j = 1 K ( y j ( i ) − y ^ j ( i ) ) 2 \text{MSE}\left(\mathbf{y}^{(i)},\mathbf{\hat y}^{(i)}\right)=\sum_{j=1}^K\left(\mathbf{y}^{(i)}_j-\mathbf{\hat y}_j^{(i)}\right)^2 MSE(y(i),y^(i))=j=1K(yj(i)y^j(i))2i i i 是观测序号, j j j 是类别对应的维度索引)
    Loss = ∑ i = 1 N MSE ( y ( i ) , y ^ ( i ) ) \text{Loss}=\sum\limits_{i=1}^N\text{MSE}\left(\mathbf{y}^{(i)},\mathbf{\hat y}^{(i)}\right) Loss=i=1NMSE(y(i),y^(i))
    MSE的优点:连续、易于微分……等
  6. 此外还有其他损失函数,如maximum margin loss,适用于我们关心节点顺序、不关心具体数值而关心其排行的情况11

2.4 评估指标Evaluation Metrics

  1. evaluation metrics12:Accuracy和ROC AUC
  2. 回归任务
    root mean square error (RMSE): ∑ i = 1 N ( y ( i ) − y ^ ( i ) ) 2 N \sqrt{\sum^N_{i=1}\dfrac{\left(\mathbf{y}^{(i)}-\mathbf{\hat y}^{(i)}\right)^2}{N}} i=1NN(y(i)y^(i))2


    mean absolute error (MAE): ∑ i = 1 N ∣ y ( i ) − y ^ ( i ) ∣ N \dfrac{\sum^N_{i=1}\left|\mathbf{y}^{(i)}-\mathbf{\hat y}^{(i)}\right|}{N} Ni=1Ny(i)y^(i)
  3. 分类任务
    1. 多分类任务
      accuracy: 1 [ arg max ⁡ ( y ^ ( i ) ) = y ( i ) ] N \dfrac{1\left[\argmax(\mathbf{\hat y}^{(i)})=\mathbf{y}^{(i)}\right]}{N} N1[argmax(y^(i))=y(i)]
    2. 二分类任务
      对分类阈值敏感的评估指标:
      (如果输出范围为 [ 0 , 1 ] [0,1] [0,1],我们用0.5作为阈值)
      accuracy
      precision / recall
      (因为数据不平衡时可能会出现accuracy虚高的情况。比如99%的样本都是负样本,那么分类器只要预测所有样本为负就可以获得99%的accuracy,但这没有意义。所以需要其他评估指标来解决这一问题)

      对分类阈值不敏感的评估指标:ROC AUC
      二元分类的评估指标(可参考 sklearn.metrics.classification_report — scikit-learn 0.24.2 documentation):
      accuracy(分类正确的观测占所有观测的比例)
      precision(预测为正的样本中真的为正(预测正确)的样本所占比例)
      recall(真的为正的样本中预测为正(预测正确)的样本所占比例)
      F1-Score(precision和recall的调和平均值,信息抽取、文本挖掘等领域常用)
      混淆矩阵

      ROC曲线:TPR(recall)和FPR之间的权衡(对角斜线说明是随机分类器)
      ROC AUC
      ROC曲线下面积。越高越好,0.5是随机分类器,1是完美分类器。
      随机抽取一个正样本和一个负样本,正样本被识别为正样本的概率比负样本被识别为正样本的概率高的概率。

2.5 切分数据集

  1. 将数据集切分为训练集、验证集、测试集
  2. fixed / random split
    fixed split:只切分一次数据集,此后一直使用这种切分方式
    random split:随机切分数据集,应用多次随机切分后计算结果的平均值
  3. 我们希望三部分数据之间没有交叉,即留出法hold-out data13
    但由于图结构的特殊性,如果直接像普通数据一样切分图数据集,我们可能不能保证测试集隔绝于训练集:就是说,测试集里面的数据可能与训练集里面的数据有边相连,在message passing的过程中就会互相影响,导致信息泄露。
  4. 解决方式1:transductive setting
    输入全图在所有split中可见。仅切分(节点)标签。
  5. 解决方式2:inductive setting
    去掉各split之间的链接,得到多个互相无关的图。这样不同split之间的节点就不会互相影响。
  6. transductive setting / inductive setting
    transductive setting:
    ①测试集、验证集、训练集在同一个图上,整个数据集由一张图构成
    ②全图在所有split中可见。
    ③仅适用于节点/边预测任务。

    inductive setting:
    ①测试集、验证集、训练集分别在不同图上,整个数据集由多个图构成。
    ②每个split只能看到split内的图。成功的模型应该可以泛化到没见过的图上。
    ③适用于节点/边/图预测任务。

  7. 示例:节点分类任务
    transductive:各split可见全图结构,但只能观察到所属节点的标签
    inductive:切分多个图,如果没有多个图就将一个图切分成3部分、并去除各部分之间连接的边
  8. 示例:图预测任务
    只适用inductive setting,将不同的图划分到不同的split中。
  9. 示例:链接预测任务
    任务目标:预测出缺失的边。
    这是个 unsupervised / self-supervised 任务,需要自行建立标签、自主切分数据集。
    需要隐藏一些边,然后让GNN预测边是否存在。

    在切分数据集时,我们需要切分两次。
    第一步:在原图中将边分为message edges(用于GNN message passing)和supervision edges(作为GNN的预测目标)。只留下message edges,不将supervision edges传入GNN。
    第二步:切分数据集
     方法1:inductive link prediction split
     划分出3个不同的图组成的split,每个split里的边按照第一步分成message edges和supervision edges
     方法2:transductive link prediction split(链接预测任务的默认设置方式)
     在一张图中进行切分:在训练时要留出验证集/测试集的边,而且注意边既是图结构又是标签,所以还要留出supervision edges(要不然还搞啥呢……)
     具体来说:
      训练:用 training message edges 预测 training supervision edges
      验证:用 training message edges 和 training supervision edges 预测 validation edges
      测试:用 training message edges 和 training supervision edges 和 validation edges 预测 test edges
     是个链接越来越多,图变得越来越稠密的过程。这是因为在训练过程之后,supervision edges就被GNN获知了,所以在验证时就要应用 supervision edges 来进行 message passing(测试过程逻辑类似)不同论文中链接预测的数据集切分方式可能不同。

2.6 GNN Training Pipeline

3. GNN design space 总结


  1. 可参考我撰写的笔记:cs224w(图机器学习)2021冬季课程学习笔记9 Graph Neural Networks 2: Design Space ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎

  2. 可参考我撰写的笔记:cs224w(图机器学习)2021冬季课程学习笔记7 Graph Neural Networks 1: GNN Model ↩︎

  3. 可参考我撰写的笔记:cs224w(图机器学习)2021冬季课程学习笔记2: Traditional Methods for ML on Graphs ↩︎ ↩︎ ↩︎ ↩︎

  4. 可参考我撰写的笔记:cs224w(图机器学习)2021冬季课程学习笔记4 Link Analysis: PageRank (Graph as Matrix) ↩︎ ↩︎

  5. 老师在课上讲,如果邻接矩阵不是方阵,就用 A A T AA^T AATA T A A^TA ATA
    ……我妹搞懂,邻接矩阵还能不是方阵??? ↩︎

  6. 可参考我撰写的笔记:cs224w(图机器学习)2021冬季课程学习笔记1 Introduction; Machine Learning for Graphs ↩︎

  7. Hamilton et al. Inductive Representation Learning on Large Graphs, NeurIPS 2017 ↩︎

  8. Ying et al. Graph Convolutional Neural Networks for Web-Scale Recommender Systems, KDD 2018
    ACM网址
    论文下载地址 ↩︎

  9. K. Xu*, W. Hu*, J. Leskovec, S. Jegelka. How Powerful Are Graph Neural Networks, ICLR 2019 ↩︎

  10. Ying et al. Hierarchical Graph Representation Learning with Differentiable Pooling, NeurIPS 2018
    其他参考资料:
    ①[DIFFPOOL] - Hierarchical Graph Representation Learning with Differentiable Pooling 图分类 NeurIPS 2018_知行合一,止于至善-CSDN博客_diffpool ↩︎

  11. 这个我查了一下,好像专门有个ranking loss,还有hinge loss什么的,我简单看了一下感觉有点难,因为在这里没用到所以我还没看。以后看。 ↩︎

  12. 可参考sklearn官方文档:3.3. Metrics and scoring: quantifying the quality of predictions — scikit-learn 0.24.2 documentation ↩︎

  13. 可参考:模型评估方法之held-out data(留出法)_上帝是个娘们的博客-CSDN博客_held-out ↩︎

cs224w(图机器学习)2021冬季课程学习笔记10 Applications of Graph Neural Networks相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  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冬季课程学习笔记18 Colab 4:异质图

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

  9. cs224w(图机器学习)2021冬季课程学习笔记5 Colab 1:Node Embeddings

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 0. Python包导入 1. NetworkX数据获取.可视化 2. 探索NetworkX数据的 ...

最新文章

  1. 我的世界java版袭击图片_我的世界:你mc“中毒”有多深?这8张图都能看懂,绝对是真爱粉...
  2. 用循环队列模拟银行窗口排队_银行告诉你什么是无锁队列
  3. outdated: 29.Blitter Function, RAW Texture Loading
  4. 制造机器人的现状和发展趋势
  5. pca 主成分分析_超越普通PCA:非线性主成分分析
  6. iOS开发之Quartz2D 二:绘制直线,曲线,圆弧,矩形,椭圆,圆
  7. 工业大数据发展面临四方面挑战
  8. A complete log of this run can be found in
  9. 苹果发布 iOS 14 Beta 8 iphone 14 GM要来咯
  10. visio业务流程图教学_visio业务流程图怎么画
  11. 现代控制工程(三)状态方程的解
  12. Android recyclerview item获焦时更新UI导致列表自动滚动到获焦处
  13. 基于ESP32的TCP服务器
  14. EVE-NG环境搭建
  15. Web基础与apache讲解
  16. 蓝牙协议分析_BLE广播通信相关的技术分析
  17. 洛谷P2495 [SDOI2011]消耗战(虚树dp)
  18. Profinet转TCP协议转换网关Step7软件配置方法
  19. 「开机自启」macOS如何关闭开机自启动软件?
  20. 计算机颜色对照图,RGB颜色查询对照表

热门文章

  1. 【Windows】无法安装以下功能:.NET Framework 3.5(包括 .NET 2.0 和 3.0)
  2. 使用Python修改windows键位
  3. Android千元机,大牌Android机不足千元 5款实用手机荐
  4. iOS动画一点也不神秘————你是喜欢看幻灯片?还是看高清电影?
  5. 通过EDID信息,获取电脑显示器序列号
  6. GitHub 人脸属性编辑神器横空出世!
  7. java menuitem,Java AWT MenuItem和菜单
  8. 轻芒发布免费内容型小程序解决方案 打造全新互动形式
  9. 【WPF】渲染失败甚至程序崩溃,D3DImage.Lock卡死,报COMException异常和UCEERR_RENDERTHREADFAILURE消息
  10. 用户案例|告别传统金融消息架构:Apache Pulsar 在平安证券的实践