• 论文精读-Semi-Supervised Classification with Graph Convolutional Networks


    Semi-Supervised Classification with Graph Convolutional Networks

    一、摘要

    GCN是一种可扩展的方法,用于图结构数据的半监督学习,GCN在图上进行卷积操作。我们通过谱图卷积的局部一阶近似来激励卷积架构的选择。
    模型在图边的数量上线性扩展,并学习编码局部图结构和节点特征的隐藏层表示。在引文网络和知识图谱数据集上的大量实验中,我们证明了我们的方法在很大程度上优于相关方法。

    介绍

    半监督学习:在图(如引文网络)中对节点(如文档)进行分类的问题,其中标签仅适用于一小部分节点。这个问题可以被框定为基于图的半监督学习。
    其中标签信息通过某种形式的基于图的显式正则化在图上平滑,例如在损失函数中使用图拉普拉斯正则化项:

    图拉普拉斯正则项
    图拉普拉斯正则项是在基于图的半监督学习中常用的一种正则化项。它利用了图结构中节点之间的关系来平滑标签信息,从而提高预测的准确性。
    图拉普拉斯矩阵是一个对称正定的矩阵,其定义与图的邻接矩阵和度矩阵有关。对于一个图中的节点,度矩阵是一个对角矩阵,其中每个对角元素表示该节点的度(即与该节点相连的边的数量)。邻接矩阵则表示节点之间的连接关系,其中非零元素表示节点之间存在连接或边。图拉普拉斯矩阵可以通过度矩阵和邻接矩阵的差来计算得到。
    在半监督学习中,我们希望通过已知的标记数据来预测未标记数据的标签。图拉普拉斯正则项可以用来鼓励相邻节点具有相似的标签。具体而言,在损失函数中引入图拉普拉斯正则项,可以使预测结果在图上的相邻节点上保持一致性。
    常见的图拉普拉斯正则项形式是基于节点的标签和相邻节点的标签之间的差异。例如,可以使用Laplacian regularization term来衡量预测结果与邻居节点标签之间的平滑程度。这样做可以鼓励相邻节点具有相似的标签,从而在未标记数据上推断出更准确的标签。
    总之,图拉普拉斯正则项是在基于图的半监督学习中用于平滑标签信息的一种方法。通过引入图结构和正则化项,可以提高模型的泛化能力和预测准确性。

    平滑标签信息
    在图上平滑标签信息意味着通过图结构的连接关系,将相邻节点的标签进行一定程度的一致化。这是基于一个假设:在图中相邻的节点更有可能具有相似的标签。
    在半监督学习中,我们通常只有一小部分数据点被标记,而大部分数据点是未标记的。为了更好地利用未标记数据来提高模型性能,我们可以通过标记数据和未标记数据之间的图结构来传播和平滑标签信息。
    平滑标签信息的方法可以使用不同的算法或技术。其中,常见的方法之一是标签传播(Label Propagation)。该方法首先使用已标记的节点来初始化标签,然后通过迭代更新未标记节点的标签。更新标签时,会考虑相邻节点的标签,并根据它们的相似性进行调整,使得相邻节点具有相似的标签。
    另一种常见的方法是使用图卷积神经网络(Graph Convolutional Networks,GCN)。GCN 利用图结构的邻接矩阵来定义卷积操作,通过多层卷积层的堆叠,从邻居节点汇聚信息并更新节点的表示。这样的操作可以促使相邻节点的特征表示趋于一致,进而实现标签的平滑
    图拉普拉斯正则项也是一种常用的方法,如前面所提到的。通过在损失函数中引入图拉普拉斯正则化项,可以惩罚预测结果与邻居节点标签之间的差异,从而使得相邻节点具有相似的标签。
    这些方法都旨在利用图结构中的连接关系来传播和平滑标签信息,以提高未标记数据的预测能力。通过在训练过程中结合标记数据和未标记数据,并利用图结构进行信息传播,我们可以更好地利用数据集中的信息,

    在损失函数中使用图拉普拉斯正则化项:
    在这里插入图片描述
    文中指出图正则方法之前被用在传统的半监督节点分类中,通过在模型f(X)中加入正则项,如拉普拉斯正则,来捕捉图结构信息。其基本假设是相邻的节点可能具有相同的标签。然而这个假设可能会限制建模能力,因为图边不一定需要编码节点相似性,但可能包含额外的信息

    如何理解上面这句话?(这个假设可能会限制建模能力,因为图边不一定需要编码节点相似性,但可能包含额外的信息)
    上述话中提到的假设是指在图正则方法中,例如使用图拉普拉斯正则项时,基本假设是相邻节点可能具有相同的标签。这种假设的目的是通过图的连接关系来平滑标签信息,以提高模型的预测能力。
    然而,这个假设可能会对建模能力产生一定的限制,因为图的边并不一定只编码节点的相似性,也可能包含其他类型的信息。这意味着相邻节点之间的连接关系可能不仅仅与它们的标签相似性相关
    当图的边包含额外的信息时,简单地假设相邻节点具有相同标签可能无法充分捕捉到复杂的数据关系。这可能导致模型在处理具有较大差异的相邻节点时出现困难,从而影响了模型的表达能力和预测性能。
    为了解决这个问题,可以考虑更加灵活的图正则方法,如使用自适应权重的图模型或更复杂的图卷积网络(Graph Convolutional Networks,GCN)。这些方法可以通过学习适应性的图结构来考虑节点之间的更多关联性,并在模型中合理地利用边的额外信息。这样可以使模型更好地适应不同节点之间的差异和多样性。
    因此,理解上述话的关键是认识到图正则方法中的基本假设以及其可能存在的限制。同时,我们也应该探索更加灵活和复杂的图模型方法,以实现更好的建模能力和预测性能。

    GCN为了避开上面提到的限制性,

    avoiding explicit graph-based regularization in the loss function.如何理解这句话
    理解这句话的关键是要明确两个概念:显式图形正则化和损失函数。
    首先,显式图形正则化是指在损失函数中明确地使用图结构来平滑标签信息的方法,例如通过引入图拉普拉斯正则项。这种方法将图的连接关系作为额外的正则化项,以鼓励相邻节点具有相似的标签。
    而损失函数是用来衡量模型预测与真实标签之间的差异的函数。它是训练模型时所优化的目标函数,通过最小化损失函数来调整模型参数,使其能够更准确地预测标签。
    因此,“avoiding explicit graph-based regularization in the loss function” 的意思是避免在损失函数中明确使用基于图的正则化方法。
    这可能是因为显式图形正则化方法有时存在一些限制或不足之处。例如,当图的边并不完全代表节点间的相似性时,显式图形正则化可能无法有效地平滑标签信息。此外,引入额外的正则化项可能会增加模型的复杂性和计算成本。
    因此,避免使用显式图形正则化方法,并不意味着完全忽视图结构。相反,可以考虑其他方法来利用图结构,例如使用更灵活的图卷积网络(GCN)或自适应权重的图模型。这些方法可以通过学习适应性的图结构来考虑节点之间的关联性,而无需明确将图正则化作为损失函数的一部分。
    综上所述,“avoiding explicit graph-based regularization in the loss function” 的含义是避免在损失函数中直接使用基于图的正则化方法,而尝试其他利用图结构的方法来平滑标签信息。

    论文的第二部分和第三部分分别讲述了GCN的“图上的快速近似卷积”和“半监督节点分类”

    二、图上的快速近似卷积

    如何理解下面这个公式?
    在这里插入图片描述
    参考文章:https://zhuanlan.zhihu.com/p/71200936
    在这里插入图片描述
    上面的公式看起来像不像这个: H ( l + 1 ) = f ( H ( l ) , A ) H^{(l+1)} = f(H^{(l)}, A) H(l+1)=f(H(l),A),这个不就是前文提到的 f ( X , A ) f(X,A) f(X,A)
    其中输入层 H ( 0 ) = X H^{(0)} = X H(0)=X , 输出层 H ( l ) = Z H^{(l)} = Z H(l)=Z , l l l 是层数。
    在这里插入图片描述

    模型的一种理解是:每一个节点下一层的信息 H ( l + 1 ) H^{(l+1)} H(l+1)是由前一层本身的信息 H ( l ) H^{(l)} H(l)以及相邻的节点的信息 A A A加权加和得到,然后再经过线性变换 W W W 以及非线性变换 σ ( ) \sigma() σ()

    2.1 谱图卷积 (主要参考链接:https://www.jianshu.com/p/35212baf6671

    第一代GCN

    在这里插入图片描述
    对于这里的公式中 x x x,有一点疑问,结合网上的资料 x x x应该是Graph中每个节点特征的表示向量,而不是一个标量,但是文中的括号内又说是每个节点的标量,所以有点困惑,但我还是按照向量来理解。
    这里的 x x x确实是一个N维的向量,这里的N指的是图中节点的个数,这个向量的每个元素代表的并不是每个节点的特征(因为一般特征也是个向量,不是标量),而是看做这个节点的信号。

    在图神经网络(Graph Neural Networks,GNN)中,每个节点的信号标量是指该节点的特征向量中的一个标量值。通常情况下,每个节点都有一个特征向量,其中包含了该节点的各种属性或特征信息。
    在传统的GNN模型中,每个节点的特征向量由多个维度组成,可以表示该节点的不同属性,比如节点的位置、度数、邻居节点的信息等。这些特征向量可以用来描述节点的状态、性质或者其他重要的信息。
    对于每个节点的信号标量,则是从节点的特征向量中提取出来的一个具体的标量值,通常通过将特征向量进行线性变换或应用某种激活函数来得到。这个信号标量可以被视为节点的激活程度或重要程度的度量,它可以用来影响节点的后续计算或传播过程。
    需要注意的是,在图神经网络中,并非所有的模型都需要使用信号标量。一些简单的GNN模型,比如Graph Convolutional Networks(GCN),只考虑节点之间的连接关系,并没有显式地对每个节点生成信号标量。而一些更复杂的GNN模型,比如GraphSAGE和GIN,会在节点上生成具体的信号标量,以便更好地刻画节点的特征和激活程度。
    总结来说,每个节点的信号标量是在GNN模型中对节点特征进行处理得到的一个标量值,用于描述节点的激活程度或重要程度,并参与后续的计算和传播过程。

    疑问与猜测:
    此处公式最右边的 x x x是不是没有实际的含义,在这里出现只是因为原理推导的需要,因为看论文到后面可以看到公式中将此 x x x换成了 N ∗ C N*C NC的矩阵,表示所有节点的特征向量的堆放。
    在这里插入图片描述

    公式中,gθ(Λ)表示函数 gθ 在图拉普拉斯算子的特征值 Λ 上的作用。gθ(Λ)就是卷积核。具体来说,gθ 是一个函数,其输入是图拉普拉斯算子的特征值 Λ,并输出一个新的函数。
    在这种情况下,gθ(Λ) 表示将函数 gθ 应用于图拉普拉斯算子的特征值 Λ。换句话说,对 Λ 中的每个特征值 λ_i,通过函数 gθ 对其进行变换得到新的值 gθ(λ_i)。
    这个函数 gθ 可以是任意定义的,根据具体问题和需要来确定。在图卷积网络(GCN)中,gθ 通常是一个参数化的非线性激活函数,如ReLU或sigmoid函数等。通过将 gθ(Λ) 应用于图拉普拉斯算子的特征值,可以对图中的节点特征进行变换和聚合,以获得更丰富和更具表达力的表示。

    上面为第一代GCN,第一代GCN的缺点也是显而易见的,主要有以下几点:

    1. 需要对拉普拉斯矩阵进行特征分解,每次前向传播的过程中都要计算矩阵乘法,当Graph规模较大时,时间复杂度为 O ( n 2 ) O(n^2) O(n2),非常耗时。
    2. 卷积核的个数为 n n n,就是节点的个数,因此当Graph中节点的个数 n n n很大时,节点特征更新缓慢。
    第二代GCN

    在这里插入图片描述

    第三代GCN

    在这里插入图片描述

    1. 为什么可以用切比雪夫多项式近似图卷积核?

    https://zhuanlan.zhihu.com/p/138420723

    卷积核可以设计成任意形式的函数,当然也可以是Chebyshev多项式。计算复杂有论文说是可以降低

    在这里插入图片描述
    在这里插入图片描述

    2. 如何用切比雪夫多项式近似图卷积核(近似的过程是怎样的)?

    https://zhuanlan.zhihu.com/p/106687580

    3. 用切比雪夫多项式近似图卷积核的好处?

    [1] 卷积核只有 K + 1 K+1 K+1 个可学习的参数,一般来说K是远小于n的,参数的复杂度大大降低了。

    [2] 采用切比雪夫多项式代替谱域卷积核后,经过公式的推导,ChebNet不需要对拉普拉斯矩阵做特征分解了。

    [3] 卷积核具有严格的空间局部性。K 就是卷积核的“感受野半径”。也就是将中心顶点的K阶邻居节点作为邻域节点。

    卷积核的参数从原先一代GCN中的n个减少到k个,从原先的全局卷积变为现在的局部卷积,即将距离中心节点k-hop的节点作为邻居节点。

    印象中不知出处的知识点:

    1. 做卷积操作时,不一定要讲图中所有节点的特征都汇聚到某个节点,类似于人在社会里的关系,一个人最多与周围几十个人关系密切,而对于更远的关系,反而影响不大。对应的图的信息传递中,可以只考虑k跳范围的(邻居)节点,而不用考虑图中所有的节点。
      GCN中切比雪夫多项式迭代的K的值只取了1,有人说最前面的两个已经包含了大部分的信息。

    2.2 分层线性模型

    GCN(Graph Convolutional Network)采用了分层线性模型,这是指GCN模型的每一层都采用线性变换的方式进行特征传播和聚合。
    在GCN中,每一层的输出特征表示是由上一层的输入特征表示经过以下步骤计算得到的:
    线性变换:通过将上一层的输入特征表示与卷积核参数矩阵进行乘法运算,对每个节点的特征进行线性变换。这个线性变换可以表示为 h ( l + 1 ) = σ ( D ^ − 1 / 2 A ^ D ^ − 1 h ( l ) W ( l ) ) h^{(l+1)} = \sigma(\hat{D}^{-1/2}\hat{A}\hat{D}^{-1}h^{(l)}W^{(l)}) h(l+1)=σ(D^1/2A^D^1h(l)W(l)),其中 h ( l ) h^{(l)} h(l) 是第 l 层的输入特征表示, A ^ \hat{A} A^ 是带有自环的邻接矩阵(通常是图的标准化邻接矩阵), D ^ \hat{D} D^ 是度矩阵的归一化形式, W ( l ) W^{(l)} W(l) 是第 l 层的卷积核参数矩阵, σ \sigma σ 是激活函数。
    特征聚合:将每个节点的邻居节点的特征表示进行加权平均,并与当前节点的特征表示进行融合。这个加权平均的过程实际上是通过上一步中的线性变换得到的特征表示与邻接矩阵相乘的结果实现的。
    通过不断堆叠这样的分层线性模型,GCN可以逐渐传播和聚合节点特征,从而获得更高级别的表示。随着层数的增加,GCN模型可以捕捉到更广阔范围的图结构信息,并提高建模能力。
    与传统的非线性神经网络不同,GCN采用的是分层线性模型,这意味着每一层的变换都是线性的,并且每一层都利用了上一层的输入特征进行计算。这种模型形式具有较好的可解释性和计算效率,并在图数据领域取得了良好的效果。

    如何理解线性?

    在GCN的分层线性模型中,"线性"指的是每一层的特征传播和聚合过程是通过线性变换来实现的。
    这个线性变换实际上是一个矩阵乘法操作,它将每个节点的输入特征与卷积核参数相乘,并对邻居节点的特征进行加权平均。这样,每个节点都会根据其邻居节点的信息进行更新和聚合。通过这种线性变换,GCN可以在每一层中引入参数来捕捉节点之间的关系和结构。
    需要注意的是,GCN的线性变换仅限于节点特征的传播和聚合过程。在每一层后面,通常会采用非线性激活函数(如ReLU)来引入非线性变换,并增加模型的表达能力。这些非线性操作允许模型更好地适应复杂的图数据。
    总结起来,GCN的分层线性模型中的线性指的是每一层节点特征的传播和聚合是通过线性变换实现的。这种线性变换利用卷积核参数矩阵对节点特征进行线性组合,并通过邻接矩阵对邻居节点的特征进行加权平均。通过堆叠多个这样的线性变换层,GCN可以逐步传播和聚合节点特征,从而获得丰富的表示能力。

    在这里插入图片描述
    对上面的模型再做一些限制:令K=1, λ m a x ≈ 2 \lambda_{max}\approx 2 λmax2,得到
    在这里插入图片描述

    这里我们只选取了切比雪夫多项式阶数 K = 1 K=1 K=1的情况,因此只能建立起一阶邻居的依赖,所以只能通过堆积多层图卷积网络来建立 K K K阶邻居的感受野,但是这样的好处是我们通过一阶近似建立的线性图卷积模型,在堆叠图卷积层过程中不再受到切比雪夫多项式的限制,而且降低了运算的复杂度。
    又令在这里插入图片描述在这里插入图片描述
    进行renormalization trick(重整化方法)的原因是当GCN有好多层时,多次使用在这里插入图片描述这个算子时会出现数值不稳定和梯度消失/爆炸的问题,使用renormalization trick方法后可以缓解这个问题,实验证明确实如此。
    在这里插入图片描述
    最后将向量 x x x扩展为矩阵 X X X,对应的切比雪夫系数也从标量 θ \theta θ扩展为矩阵 Θ \Theta Θ F F F是滤波器的个数(等于输出层特征图的个数), N N N是节点的个数, C C C是每个节点特征的个数(也可以说是输入通道数),

    在Graph Convolutional Network (GCN) 中,输出层的特征图的个数与GCN模型的层数一般是相关的,但不一定直接相等
    输出层的特征图的个数通常由任务需求和具体问题决定。对于节点分类任务,输出层的特征图的个数通常等于类别的数量,每个特征图对应一个类别,以便进行分类预测。而对于图级别的任务,如图分类或图属性预测,输出层的特征图的个数通常等于任务的标签数量。
    然而,GCN模型的层数并不直接决定输出层特征图的个数。GCN模型中的每一层都可以生成多个特征图,这些特征图可以包含不同抽象级别的特征表达。通过增加GCN的层数,模型可以逐渐学习到更高级别的特征,从而提高对复杂数据的建模能力。但是在输出层之前,可能会使用其他机制(如全局池化、投影操作)来减少特征图的数量,并将其转换为最终所需的输出维度。

    三、半监督节点分类


    回头再看GCN:
    https://www.zhihu.com/question/54504471

  • 相关阅读:
    大模型预训练Pretrain
    服务注册发现之Eureka
    【论文阅读】《Learning Safe Prediction for Semi-Supervised Regression∗》
    Docker Desktop 设置镜像环境变量
    量子笔记:多量子系统、叠加、量子计算并行处理能力
    倒置字符串不改变单词顺序的四种方法
    网易云Android面试拿offer分享:Java多线程+View+flutter+算法题
    qt 通用ui
    Dextran-PEG-HSA 葡聚糖-聚乙二醇-人血清白蛋白简介
    java类的命名规范
  • 原文地址:https://blog.csdn.net/quxuexi/article/details/133747261