0Pricing
Learn AI with Python · 课时

图卷积网络(GCN)

消息传递框架、GCNConv、节点特征聚合和 PyTorch Geometric 设置。

图卷积网络(GCN) 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

从卷积神经网络到 GCN

卷积神经网络利用图像中的网格结构。图卷积网络(GCN)将卷积推广到不规则图,使每个节点都能利用邻居的信息更新自身表示。这种方法可以处理没有固定网格的数据。

消息传递

GCN 遵循消息传递框架:在每一层中,每个节点都会(1)从邻居收集消息,(2)聚合这些消息,(3)更新自己的嵌入表示。叠加多层后,信息就能在图中传播。

邻居聚合

核心操作是聚合邻居特征。一个简单的 GCN 层会对某个节点的邻居(以及节点自身)的特征向量取平均,然后应用学习得到的线性变换和非线性函数。

# For each node v:
#   h_v = activation( W * mean(features of v and its neighbors) )

为何要对邻接矩阵进行归一化

如果直接对邻居求和,高度节点就会占据主导地位。GCN 使用归一化邻接矩阵来缩放各项贡献,使不同度数节点的嵌入表示保持稳定的幅度。

归一化公式

对称归一化会先添加自环,然后根据节点的度进行缩放,写作 D^(-1/2) (A + I) D^(-1/2)。加入单位矩阵 I 后,节点在聚合过程中就能保留自身特征。

# A_hat = A + I  (add self-loops)
# D_hat = degree matrix of A_hat
# A_norm = D_hat^(-1/2) * A_hat * D_hat^(-1/2)

PyTorch Geometric

PyTorch Geometric(PyG)是 PyTorch 中用于 GNN 的标准库。它提供了 GCNConv 等现成层,为您实现归一化的消息传递卷积。

import torch
import torch.nn.functional as F
from torch_geometric.nn import GCNConv

单个 GCNConv 层

GCNConv(in_channels, out_channels)创建一个图卷积层。它接收节点特征矩阵 x 和 edge_index(COO 格式的图连接关系),并返回更新后的节点嵌入表示。

conv = GCNConv(in_channels=16, out_channels=32)
# x: [num_nodes, 16], edge_index: [2, num_edges]
h = conv(x, edge_index)  # -> [num_nodes, 32]

两层 GCN

典型的 GCN 会叠加两层:第一层投影特征并聚合一跳邻居的信息,第二层再聚合二跳邻居的信息,从而使每个节点拥有二跳感受野。

class GCN(torch.nn.Module):
    def __init__(self, in_dim, hid, out):
        super().__init__()
        self.conv1 = GCNConv(in_dim, hid)
        self.conv2 = GCNConv(hid, out)

    def forward(self, x, edge_index):
        x = F.relu(self.conv1(x, edge_index))
        x = F.dropout(x, training=self.training)
        return self.conv2(x, edge_index)

感受野随深度扩大

每个 GCN 层都会使节点的感受野扩大一跳。两层可以看到二跳邻域,三层可以看到三跳邻域,以此类推。增加深度可以让远处的信息到达某个节点。

过平滑

但是,叠加过多层会导致过平滑:反复对邻居求平均会使所有节点嵌入表示收敛到几乎相同的向量,从而破坏分类所需的差异。这就是大多数 GCN 只使用 2 层或 3 层的原因。

缓解过平滑

应对过平滑的技术包括残差/跳跃连接、结合各层输出的跳跃知识网络,以及简单地保持网络较浅。在标准基准数据集上,浅层 GCN 往往优于深层 GCN。

快速检查

测试您的 GCN 知识。

回顾

您学习了图卷积网络:

  • GCN 遵循消息传递框架:聚合邻居特征,然后进行更新
  • 带有自环的归一化邻接矩阵可以保持嵌入表示稳定
  • PyTorch Geometric 中的 GCNConv 实现了一个卷积层
  • 常见架构是两层 GCN
  • 深度过大会导致过平滑

常见问题解答

「图卷积网络(GCN)」课时是免费的吗?

是的 — 「图卷积网络(GCN)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「图卷积网络(GCN)」这节课中我会学到什么?

消息传递框架、GCNConv、节点特征聚合和 PyTorch Geometric 设置。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「图卷积网络(GCN)」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 机器学习的图论基础
  2. 图卷积网络(GCN)
  3. 使用 GNN 进行节点分类
  4. 链接预测与图分类
← 返回 Learn AI with Python