【神经网络学习日记(8)】一些图神经网络的简单介绍(GCN、GAT、rGCN)

本文是笔者进行神经网络学习的个人学习日记

图片和链接均源自网络,侵删

1 图卷积网络(Graph Convolutional Network, GCN)

通过在图上的卷积操作来聚合节点的邻居信息。

1.1 图和节点表示

  • 图通常表示为 G = ( V , E ) G = (V, E) G=(V,E)
  • 图的结构通过邻接矩阵表示, A i j = 1 A_{ij} = 1 Aij=1表示节点 i i i和节点 j j j之间有边。
  • 每个节点 i i i具有一个特征向量 x i x_i xi,所有节点的特征向量组成特征矩阵 X X X,其维度为 N × F N \times F N×F,其中 N N N是节点数量, F F F是特征维度。

1.2 GCN的卷积操作

GCN通过在图上定义的卷积操作来更新节点的特征。这个卷积操作的核心是聚合每个节点及其邻居节点的信息,以生成新的节点表示。具体来说,GCN的卷积操作可以分为以下几步:

  • 邻接矩阵归一化

    通常使用对称归一化的邻接矩阵:
    A ~ = A + I D ~ i i = ∑ j A ~ i j A ^ = D ~ − 1 / 2 A ~ D ~ − 1 / 2 \tilde{A} = A + I\\ \tilde{D}_{ii} = \sum_j \tilde{A}_{ij}\\ \hat{A} = \tilde{D}^{-1/2} \tilde{A} \tilde{D}^{-1/2} A~=A+ID~ii=jA~ijA^=D~1/2A~D~1/2
    其中 I I I是单位矩阵, D ~ \tilde{D} D~ A ~ \tilde{A} A~的度矩阵。

  • 节点特征聚合和变换

    在每一层卷积中,节点特征通过与归一化的邻接矩阵 A ^ \hat{A} A^和权重矩阵 W W W的乘积进行更新:
    H ( l + 1 ) = σ ( A ^ H ( l ) W ( l ) ) H^{(l+1)} = \sigma(\hat{A} H^{(l)} W^{(l)}) H(l+1)=σ(A^H(l)W(l))
    其中, H ( l ) H^{(l)} H(l) 是第 l l l层的节点特征矩阵, W ( l ) W^{(l)} W(l)是第 l l l层的权重矩阵, σ \sigma σ是激活函数(如ReLU)。在初始层, H ( 0 ) = X H^{(0)} = X H(0)=X

  • 多层卷积

    通过堆叠多层卷积,GCN能够逐层聚合更远的邻居信息,从而捕捉图的全局结构。典型的GCN包含两到三层卷积层。

2 图注意力模型(Graph Attention Networks, GAT)

GAT旨在通过引入注意力机制,来解决传统GCN中对邻居节点特征进行简单平均或加权求和时缺乏灵活性的问题。通过注意力机制,GAT能够为每个节点的每个邻居分配不同的权重,允许模型在训练过程中学习到更有效的特征表示。

2.1 注意力机制

GAT中的注意力机制通过对每个节点及其邻居节点进行注意力计算,来动态分配权重。具体步骤如下:

  • 线性变换:对每个节点的特征向量 h i h_i hi进行线性变换 h i ′ = W h i h_i'=Wh_i hi=Whi,其中, W W W是一个可学习的权重矩阵。

  • 注意力计算:对每个节点 i i i和其邻居节点 j j j,计算注意力得分 e i j = LeakyReLU ( a T [ h i ′ ∣ ∣ h j ′ ] ) e_{ij}=\text{LeakyReLU}(a^T[h_i'||h_j']) eij=LeakyReLU(aT[hi∣∣hj]),其中, a a a是一个可学习的注意力权重向量, ∣ ∣ || ∣∣表示向量拼接操作。

  • 归一化得分:对每个节点 i i i的所有邻居节点注意力得分进行归一,得到注意力权重:
    α i j = exp ⁡ ( e i j ) ∑ k ∈ N ( i ) exp ⁡ ( e i k ) \alpha_{ij}=\frac{\exp(e_{ij})}{\sum_{k\in\mathcal{N}(i)}\exp(e_{ik})} αij=kN(i)exp(eik)exp(eij)
    其中, N ( i ) \mathcal{N}(i) N(i)表示节点 i i i的邻居节点集合。

  • 特征聚合:使用注意力权重对邻居节点的特征进行加权求和,得到新的节点表示:
    h i ( l + 1 ) = σ ( ∑ j ∈ N ( i ) α i j h j ′ ) \mathbf{h}_i^{(l+1)} = \sigma \left( \sum_{j \in \mathcal{N}(i)} \alpha_{ij} \mathbf{h}_j' \right) hi(l+1)=σ jN(i)αijhj

2.2 多头注意力机制

为了提高模型的稳定性和表现力,GAT通常使用多头注意力机制(Multi-Head Attention)。在这种机制下,多个独立的注意力头并行计算,并将它们的输出进行拼接或平均:

  • 拼接(用于中间层):
    h i ( l + 1 ) = ∣ ∣ k = 1 K σ ( ∑ j ∈ N ( i ) α i j ( k ) W ( k ) h j ) \mathbf{h}_i^{(l+1)} = \big|\big|_{k=1}^K \sigma \left( \sum_{j \in \mathcal{N}(i)} \alpha_{ij}^{(k)} \mathbf{W}^{(k)} \mathbf{h}_j \right) hi(l+1)= k=1Kσ jN(i)αij(k)W(k)hj
    其中, ∣ ∣ \big|\big| 表示拼接操作, K K K是注意力头的数量。

  • 平均(用于最终层):
    h i ( l + 1 ) = σ ( 1 K ∑ k = 1 K ∑ j ∈ N ( i ) α i j ( k ) W ( k ) h j ) \mathbf{h}_i^{(l+1)} = \sigma \left( \frac{1}{K} \sum_{k=1}^K \sum_{j \in \mathcal{N}(i)} \alpha_{ij}^{(k)} \mathbf{W}^{(k)} \mathbf{h}_j \right) hi(l+1)=σ K1k=1KjN(i)αij(k)W(k)hj

3 关系图卷积网络(Relational Graph Convolutional Network, rGCN)

rGCN是一种专门用于处理多关系图(multi-relational graph)的图神经网络模型。例如,在知识图谱中,不同的边可以表示“是朋友”、“工作于”等不同类型的关系。rGCN通过引入关系类型的卷积操作,有效地处理这种复杂的图结构。

3.1 多关系图和节点特征

多关系图由节点集合 V V V 和多关系边集合 R R R 组成, R R R 包含多种不同类型的关系。每种关系类型 r r r 都有其对应的邻接矩阵 A r A^r Ar

每个节点 v i v_i vi 有一个特征向量 h i h_i hi。所有节点的特征向量组成特征矩阵 H H H

3.2 邻居特征聚合

对于每个节点 v i v_i vi,聚合其所有邻居节点在不同关系下的特征表示:
h i ( l + 1 ) , r = W r ( l ) h i ( l ) h i ( l + 1 ) = σ ( ∑ r ∈ R ∑ j ∈ N r ( i ) 1 c i , r W r ( l ) h j ( l ) + W 0 ( l ) h i ( l ) ) h_i^{(l+1), r} = W_r^{(l)} h_i^{(l)}\\ h_i^{(l+1)} = \sigma \left( \sum_{r \in R} \sum_{j \in \mathcal{N}_r(i)} \frac{1}{c_{i,r}} W_r^{(l)} h_j^{(l)} + W_0^{(l)} h_i^{(l)} \right) hi(l+1),r=Wr(l)hi(l)hi(l+1)=σ rRjNr(i)ci,r1Wr(l)hj(l)+W0(l)hi(l)
其中:

  • N r ( i ) \mathcal{N}_r(i) Nr(i) 表示节点 i i i 在关系 r r r 下的邻居节点集合。
  • c i , r c_{i,r} ci,r 是节点 i i i 在关系 r r r 下的归一化系数,可以是节点度或其他归一化因子。
  • W r ( l ) W_r^{(l)} Wr(l) 是第 l l l 层中对应关系类型 r r r 的权重矩阵。
  • W 0 ( l ) W_0^{(l)} W0(l) 是第 l l l 层中的自环权重矩阵,用于保持节点自身特征。

个人神经网络学习日记:
【神经网络学习日记(1)】神经网络基本概念
【神经网络学习日记(2)】全连接神经网络(FCNN)及Pytorch代码实现
【神经网络学习日记(3)】卷积神经网络(CNN)
【神经网络学习日记(4)】循环神经网络(RNN、LSTM、BiLSTM、GRU)
【神经网络学习日记(5)】数据加载器(DataLoader)的调用
【神经网络学习日记(6)】Transformer结构详解
【神经网络学习日记(7)】Transformer的应用(BERT、Longformer、LLM)
【神经网络学习日记(8)】一些图神经网络的简单介绍(GCN、GAT、rGCN)

文中引用部分都尽可能写出了,如果有侵犯其他人文章版权的问题,请务必联系我,谢谢!

### 关系图卷积网络 (R-GCN) 的原理 关系图卷积网络(R-GCN)扩展了传统的图卷积网络(GCN),以处理具有不同类型边的关系图。在传统 GCN 中,节点聚合来自邻居的信息而不区分这些连接的具体性质;而在 R-GCN 中,则考虑到了不同类型的边所代表的不同关系。 具体来说,在每层传播过程中,R-GCN 对于每一个特定类型 \(r\) 的关系都定义了一个单独的权重矩阵 \(\mathbf{W}_r^{(l)}\)[^1]。这意味着当更新某个节点表示时,会根据不同种类的关系分别计算加权求和后的特征向量,并最终通过某种方式组合起来形成新的节点嵌入: \[h_i^{(l+1)}=\sigma\left(\sum_{r \in \mathcal{R}} \sum_{j \in N_r(i)} \frac{1}{c_{i, r}} \mathbf{W}_{r}^{(l)} h_j^{(l)}+\mathbf{b}\right)\] 其中,\(N_r(i)\) 表示与节点 i 有第 r 类型关系相连的所有邻接点集合;而常数项 \(\frac{1}{c_{i,r}}\) 则用来防止梯度爆炸或者消失的问题[^2]。 ### 实现细节 为了有效地训练大规模稀疏图上的 R-GCN 模型,通常采用如下策略来简化上述公式: - **参数共享**:对于某些任务可以假设相同方向上的所有关系拥有相似的重要性,因此可以在不同的关系间共享同一个权重矩阵。 - **基滤波器方法**:利用一组基础变换矩阵去近似任意数量的关系转换操作,减少所需学习参数的数量。 此外,还可能涉及到其他技术如批标准化(batch normalization),dropout 正则化等以提高泛化能力[^3]。 ```python import dgl.nn.pytorch as dglnn import torch.nn.functional as F class RGNNLayer(nn.Module): def __init__(self, in_feat, out_feat, num_rels): super(RGNNLayer, self).__init__() self.conv = dglnn.RelGraphConv(in_feat, out_feat, num_rels) def forward(self, g, feat, etypes): return F.relu(self.conv(g, feat, etypes)) ``` 这段代码展示了如何使用 DGL 库构建一个简单的单层 R-GCN 层。`dglnn.RelGraphConv` 是专门为实现 R-GCN 设计的一个模块,它接受输入特征 `feat`, 边类型 `etypes` 和图结构 `g` 来执行消息传递过程。 ### 应用场景 R-GCN 已经被成功应用于多个领域内的实际问题解决当中,尤其是在涉及复杂关联模式的数据集上表现优异。例如,在知识库补全任务中,R-GCN 可帮助识别并填补已知事实间的空白部分——即所谓的“链接预测”。另一个典型应用场景是在实体分类方面,这里的目标是从给定的一系列属性描述中推断出未知类别标签。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值