第12章 · 图神经网络 · 阶段测试题答案¶
一 · 单选 (8 题)¶
1.1 B - GCN 是图卷积网络。
1.2 A - GAT 用注意力聚合邻居。
1.3 C - GraphSAGE 邻居采样。
1.4 B - 节点嵌入维度可设置。
1.5 A - 过平滑是深层 GNN 的问题。
1.6 C - TransE 是知识图谱嵌入。
1.7 B - 分子是常见的图数据。
1.8 A - 归纳式学习支持新节点。
二 · 多选 (4 题)¶
2.1 ABCD - 都是 GNN 任务。
2.2 ABD - C 错: GraphSAGE 邻居采样。
2.3 ABC - 都是图嵌入方法。
2.4 ABD - 都是 GNN 应用场景。
三 · 简答 (5 题)¶
3.1 GCN 公式¶
核心: H^(l+1) = σ(D^(-1/2) A D^(-1/2) H^(l) W^(l)) - A: 邻接矩阵 + 自环 - D: 度矩阵 - W: 可学习权重 - 含义: 聚合邻居特征
3.2 GAT 注意力¶
优势: - 不同邻居不同权重 - 不需要度归一化 - 归纳式学习
公式: α_{ij} = softmax(LeakyReLU(a^T [Wh_i || Wh_j])) 多头: 拼接多组注意力
3.3 TransE¶
核心: h + r ≈ t (头实体 + 关系 ≈ 尾实体) 损失: margin-based (正样本 < 负样本 - margin) 应用: 知识图谱补全
3.4 异质图¶
类型: 不同节点/边类型 (作者-论文-会议) 方法: HAN / HGT / MAGNN 应用: 学术网络 / 推荐系统
3.5 GNN 应用¶
| 领域 | 应用 |
|---|---|
| 推荐 | 社交网络 / 知识图谱 |
| 化学 | 分子性质 / 药物 |
| 交通 | 路网预测 |
| 风控 | 反欺诈团伙 |
| 知识图谱 | 补全 / 推理 |
四 · 编程 (2 题)¶
4.1 GCN 层¶
import torch
import torch.nn as nn
import torch.nn.functional as F
class GCNLayer(nn.Module):
def __init__(self, in_features, out_features):
super().__init__()
self.linear = nn.Linear(in_features, out_features)
def forward(self, H, A_hat, D_hat):
# A_hat: 邻接 + 自环
# D_hat: 度矩阵
H = D_hat.pow(-0.5) @ A_hat @ D_hat.pow(-0.5) @ H
H = self.linear(H)
return F.relu(H)
4.2 GAT 层¶
class GATLayer(nn.Module):
def __init__(self, in_features, out_features, n_heads=4):
super().__init__()
self.n_heads = n_heads
self.W = nn.Linear(in_features, out_features * n_heads)
self.a = nn.Parameter(torch.zeros(size=(2 * out_features, 1)))
self.leaky = nn.LeakyReLU(0.2)
def forward(self, H, adj):
B, N, _ = H.shape
H = self.W(H).view(B, N, self.n_heads, -1) # (B, N, heads, out)
# 注意力
a_input = torch.cat([H, H], dim=-1) # 简化
e = self.leaky(a_input @ self.a).squeeze(-1)
# mask
mask = -1e9 * (1.0 - adj)
attention = F.softmax(e + mask.unsqueeze(-1), dim=1)
return (attention.unsqueeze(-1) * H).sum(dim=1)