图神经网络基础
什么是图神经网络
在学会神经网络[4]——图神经网络中我们实现了GCN和GAT两种网络,但是我们在此之前从未详细叙述过图神经网络,所以我们本期就要填上这个坑
在以前我们学过的神经网络都是传统MP结构,按照某种特定的顺序进行组合,比如全连接神经网络和卷积神经网络,那么我们不得不好奇一点,为什么神经网络可以学会知识呢?我们可以大致分为以下几点:
非线性转换:
- 激活函数引入非线性,使神经网络能够学习和表示复杂的非线性关系。如果没有激活函数,神经网络的每一层都只是简单的线性变换,最终整个网络只是一个线性变换,无论有多少层。
增加表达能力:
- 激活函数使网络能够处理复杂的数据,捕捉更细致的特征。例如,ReLU(Rectified Linear Unit)函数能够有效地处理稀疏数据和高维特征。
分段学习:
- 激活函数允许网络在不同区域应用不同的线性函数,从而在整个输入空间中实现分段线性近似。这意味着网络可以在不同输入区域中学习不同的特征。
梯度传播:
- 激活函数对梯度传播至关重要。某些激活函数(如ReLU)在计算梯度时具有简单而有效的特性,使得反向传播算法更高效,并且可以缓解梯度消失问题。
数据标准化:
- 某些激活函数(如Sigmoid和Tanh)有助于将输入标准化到某个范围内(如[0, 1]或[-1, 1]),这可以帮助稳定训练过程并提高收敛速度。
启用复杂决策边界:
- 通过引入非线性,神经网络可以形成复杂的决策边界,从而在分类任务中实现更高的准确性。简单的线性模型无法在高维空间中实现复杂的分割,而非线性激活函数使得这种复杂性成为可能。
那么我们不得不好奇,图神经网络与传统神经网络的区别是什么,我们对比以下两者的数据结构、层结构、应用场景来分析一下:
数据结构:
- 传统神经网络通常处理固定形状的结构化数据,如表格数据(前馈神经网络)或图像数据(卷积神经网络)。
- 输入数据一般是固定大小的矩阵或向量。
层结构:
- 传统神经网络由一系列全连接层、卷积层、池化层等组成。
- 层之间的连接通常是固定的,不依赖于数据的结构。
应用场景:
- 主要用于图像分类、自然语言处理、时间序列预测等任务。
- 适用于数据维度和结构固定的情况。
感受野:
- 卷积神经网络(CNN)通过卷积核在局部区域进行操作,有效捕捉局部特征。
与之不同的图神经网络确是:
数据结构:
- 图神经网络专门处理图结构数据,其中数据由节点(vertices)和边(edges)组成。
- 输入数据是一个图,其中节点可以有特征向量,边可以有权重。
层结构:
- GNN中的层是基于图的结构进行设计的,常见的层包括图卷积层、图注意力层等。
- 层之间的连接依赖于图的结构,通过邻居节点的信息聚合来更新节点表示。
应用场景:
- 广泛应用于社交网络分析、推荐系统、分子图建模、交通网络等任务。
- 适用于数据结构灵活多变且具有复杂关系的情况。
信息传递:
- GNN通过节点之间的信息传递来更新节点的表示,通常采用消息传递机制(message passing)。
- 每一层通过聚合节点及其邻居节点的信息来更新节点特征。
既然如此我们来说一下图神经网络的传递过程,图神经网络的前向传播主要有两步:
消息传递(Message Passing):
- 每个节点从其邻居节点接收信息(消息)。
- 这些消息通常是邻居节点的特征,通过某种聚合函数进行聚合。
信息聚合(Aggregation):
聚合函数将邻居节点的信息聚合成一个表示,常用的聚合函数包括求和、平均或最大值等。
例如,对于节点 ( v ) 和其邻居节点集 $\mathcal{N}(v) $,聚合函数可以表示为:
其中,$h_u^{(k-1)} $表示第 k-1 层中邻居节点 u 的特征,$ h_{\mathcal{N}(v)}^{(k)} $是聚合后的邻居节点特征。
而在顺利传递出参数后就需要自身进行节点的更新,他需要:
使用聚合后的邻居节点特征和当前节点的特征来更新节点的表示。
更新函数通常是一个可微函数。一般表示为:
其中,$ W^{(k)} $是第k层的权重矩阵,$b^{(k)}$ 是偏置向量,$\sigma$ 是激活函数。
前向传播这个过程需要反复执行,这样我们就可以获得稳定输出的序列了,而反向传播过程我们通过BP网络反向推导一下就有:
假设损失函数为$ \mathcal{L}$,它可以是负对数似然损失(nll_loss)也可以是其他的比如L1或者多标签边界损失(收敛性相对来讲比MSE好的多)
反向传播(Backpropagation):
- 计算损失函数对每个参数的梯度。
- 对于每一层的权重矩阵 $ W^{(k)}$,梯度计算公式为:
其中,$ \mathcal{V} $ 是图的节点集合。
参数更新(Parameter Update):
- 使用梯度下降或其变种(如Adam优化器)更新参数。
- 更新公式为:其中,$ \eta $ 是学习率。
最后在基础板块说一下在使用图神经网络时应该注意的事项:
- 使用自己的数据集时应该对节点特征和边进行归一化,可以加速收敛
- 图尽量是个连通图,不能过于稀疏或者密集,可以使用数据结构的相关算法比如剪枝或者图采样
- 如果图过大一定要采样处理
- 使用跳跃连接和层归一化来缓解梯度消失和过平滑问题。
图卷积神经网络
图神经网络通过邻居节点的表征和节点自身的表征完成更新,我们可以将图写作一整个邻接矩阵用于表示一个图,在图神经网络里面的图都是自环的,所以邻接矩阵的副对角线都是1。我们叫邻接矩阵为A,那么自环邻接矩阵为:
假设每个节点的表征我们可以用一个向量表达,整个图的节点间存在权重,那么整个图就是一个非0的权重矩阵,我们叫他H。最开始的H等于输入X,那么我们可以把图神经网络的更新看作两步:
- 汇总:从各个节点的信息汇总到一起
- 聚合:将信息表征到新的节点上
对于我们的GCN也是一样的道理。GCN是在做卷积,傅里叶变换是特殊的拉普拉斯变换,所以我们求卷积可以求矩阵的拉普拉斯变换。下面给出传递公式:
也可以写作节点式:
其中矩阵D也叫做角度矩阵,它的主对角线元素为A矩阵行的和,其他位置都是0,可以写作:
更新节点数据也显得尤为重要,我们可以写作:
提出最后的i项可以得到:
这就是节点更新公式。那么我们为什么需要D这个奇怪的矩阵呢?很简单卷积就是傅里叶变换,而傅里叶是特殊的拉普拉斯,所以我们这个D就是起到拉普拉斯算子的近似值作用,接下来证明一下:
令傅里叶算子F:
数学上有:
其中U代表归一化的图拉普拉斯矩阵的特征线了矩阵,即:
到此我们需要近似计算一下,众所周知,直接计算的代价很大(代码也会很大)所以我们需要使用切比雪夫多项式进行近似计算。
其中的T就是k次展开切比雪夫多项式,我们重新写一下卷积得到:
其中的L为:
我们可以看出每个节点只与K阶邻域内的节点信息有关。我们化简并最终得到:
其中的D特征值很小,我们需要进一步稳定,所以我们需要给节点套上自环以确保不会梯度爆炸:
其中的W是信息矩阵,X为输入信号。到此我们做出了充分的解释。图神经网络拥有较强的扩展性、可解释性和鲁棒性。所以才能受到如此青睐。
接下来说一下GCN的反向传播过程:
我们假定损失函数为交叉熵,写作:
输出梯度为:
我们向前计算,每次都乘以当前层的梯度H即可。
然后利用这个梯度我们就可以更新每一层的参数了。
图注意力网络
图注意力网络也叫GAT,传递过程与之前的很类似大概可以分为:
输入特征:每个节点有一个特征向量 $\mathbf{h}_i $。
线性变换:对每个节点的特征进行线性变换,得到投影特征:
其中,W 是可学习的权重矩阵。
计算注意力分数:对于每对邻居节点 (i) 和 (j),计算它们之间的注意力分数:
其中,a 是可学习的权重向量, || 表示向量连接操作。
归一化注意力分数:使用softmax函数对注意力分数进行归一化,得到注意力权重:
其中,N(i) 表示节点 i 的邻居节点集合。
聚合邻居信息:使用注意力权重对邻居节点的特征进行加权求和,得到更新后的节点特征:
其中,$\sigma$ 是激活函数,如ReLU。
注意力学习方式(Learning Attention Weights)
GAT通过端到端的方式学习注意力权重,这些权重是可学习的参数,通过反向传播进行优化。具体步骤如下:
- 初始化:初始化注意力权重向量a 和线性变换矩阵W。
- 前向传播:
- 计算每对节点的注意力分数。
- 通过softmax对注意力分数进行归一化,得到注意力权重。
- 根据注意力权重对邻居节点的特征进行加权求和。
- 损失计算:
- 计算模型的预测误差,例如使用交叉熵损失。
- 反向传播和参数更新:
- 计算损失函数对注意力权重和线性变换矩阵的梯度。
- 使用优化算法更新注意力权重和其他参数。
图消息网络
图消息网络也叫GMPN,传递过程与一般的GCN一样都是下面的过程:
消息传递(Message Passing):
- 每个节点从其邻居节点接收消息。
- 消息可以是节点的特征向量或通过某种变换后的特征。
消息聚合(Message Aggregation):
- 将接收到的消息进行聚合,例如求和、平均或最大化。
- 聚合函数可以是简单的求和或更复杂的神经网络。
节点更新(Node Update):
- 使用聚合后的消息更新节点的特征表示。
1—WL同构测试
1-WL也叫1维同构测试,WL全名叫:Weisfeiler-Lehman,测试过程如下:
初始化:
- 在图神经网络中,节点特征初始化通常由节点的属性或度决定。
消息传递和聚合:
- 图神经网络在每一层执行类似于1-WL测试的消息传递和聚合操作,每个节点接收来自其邻居节点的特征信息,并更新自身的特征。
特征更新:
- GNN通过可学习的参数(如权重矩阵和激活函数)更新节点特征,类似于1-WL测试中的颜色更新过程。
迭代:
- 图神经网络通常包含多层结构,每层执行一次消息传递和特征更新操作,相当于1-WL测试中的迭代过程。
作业
这里留一个作业,大家阅读一下下面的pdf,我们下期可能会做出解读: