异构图网络 HGNN:多类型节点与边的关系建模

FreeGuideOnline 最新 2026-06-14

异构图网络 HGNN:多类型节点与边的关系建模

异构图在真实世界中无处不在:学术网络中,作者、论文、会议是不同的节点类型;电商场景中,用户、商品、店铺通过购买、收藏、评论等不同类型的边相互连接。传统的同构图神经网络(GNN)将所有节点和边视为同一种类,丢失了宝贵的语义信息。异构图神经网络(Heterogeneous Graph Neural Network,HGNN)正是为解决此类“多类型节点与边的关系建模”而生。


1. 异构图的基本定义

异构图可以形式化地表示为 $G = (V, E, \phi, \psi)$,其中:

  • $V$:节点集合
  • $E$:边集合
  • $\phi: V \rightarrow \mathcal{A}$:节点类型映射函数,$\mathcal{A}$ 为节点类型集合
  • $\psi: E \rightarrow \mathcal{R}$:边类型映射函数,$\mathcal{R}$ 为边类型集合

关键特性:$|\mathcal{A}| + |\mathcal{R}| > 2$,即至少存在两种节点类型或两种边类型。每条边可以表示成一个三元组 $(u, r, v)$,其中 $u, v \in V$,$r \in \mathcal{R}$ 表示从节点 $u$ 到 $v$ 的关系类型。

2. 核心挑战

将同构图GNN直接应用于异构图会遇到三个根本困难:

  1. 特征空间异构:不同类型的节点通常具有不同维度、不同含义的特征向量。例如,电影节点可能有剧情摘要的词袋特征,演员节点则用人口统计特征表示。
  2. 关系语义差异:不同类型边承载的语义完全不同。“出演”和“导演”这两种关系对目标节点的贡献不能使用相同的聚合函数。
  3. 结构模式多样性:异构图中的局部结构模式远比同构图复杂,需要捕捉由多跳路径构成的元结构(如“演员→电影→导演”)。

3. 关键技术一:元路径(Meta-path)

元路径是异构图分析中最基本的概念,它定义了连接两个节点的复合关系序列。

定义:一条元路径 $P$ 是在节点类型层面定义的路径,形式为 $A_1 \xrightarrow{R_1} A_2 \xrightarrow{R_2} \cdots \xrightarrow{R_l} A_{l+1}$,其中 $A_i \in \mathcal{A}$,$R_i \in \mathcal{R}$。它描述了从类型 $A_1$ 到 $A_{l+1}$ 的语义关联模式。

示例

  • 学术图中:论文-作者-论文(PAP)表示两篇论文共享同一作者,可用于挖掘共同作者关系。
  • 电影图中:演员-电影-导演-电影(AMDM)表示一位演员和导演通过电影产生的间接合作关系。

基于元路径的邻居定义不再是图上的直接一跳邻居,而是遵循特定元路径实例能够抵达的节点集合。

4. 经典模型:HAN(Heterogeneous Graph Attention Network)

HAN 是异构图神经网络的里程碑式工作,其核心思想是分层注意力机制:先在节点层面基于元路径聚合邻居特征,再在语义层面融合多条元路径的信息。

节点级注意力

对于某一条元路径 $P$,给定目标节点 $i$,其沿 $P$ 的邻居集合记为 $\mathcal{N}_i^P$。首先将不同类型节点的特征通过类型投影矩阵映射到统一空间:

$$ h_i' = W_{\phi(i)} \cdot h_i $$

然后计算邻居 $j$ 对 $i$ 的注意力系数(注意:这里的注意力与元路径 $P$ 绑定):

$$ e_{ij}^P = \text{LeakyReLU}\left(a_P^\top [h_i' \Vert h_j']\right) $$ $$ \alpha_{ij}^P = \text{softmax}j(e{ij}^P) $$

节点 $i$ 基于元路径 $P$ 的聚合表示为:

$$ z_i^P = \sigma\left(\sum_{j \in \mathcal{N}i^P} \alpha{ij}^P h_j'\right) $$

语义级注意力

不同的元路径反映不同的语义,其重要性因下游任务而异。假设我们选取了 $M$ 条元路径,得到了 $M$ 组节点表示 ${z^{P_1}, z^{P_2}, \dots, z^{P_M}}$。语义级注意力为每条元路径学习一个权重:

$$ w_{P_k} = \frac{1}{|V|} \sum_{i \in V} q^\top \cdot \tanh(W z_i^{P_k} + b) $$ $$ \beta_{P_k} = \frac{\exp(w_{P_k})}{\sum_{m=1}^M \exp(w_{P_m})} $$

最终节点嵌入为语义加权和:

$$ z_i = \sum_{k=1}^{M} \beta_{P_k} \cdot z_i^{P_k} $$

该嵌入可直接用于节点分类等下游任务。整个模型通过半监督分类损失进行端到端训练。

5. 关系图卷积网络(R-GCN):基于关系类型的建模

另一种思路是为每种边类型学习独立的转换矩阵。R-GCN 是处理多关系图(可视为边类型丰富的异构图)的经典方法。

节点 $v$ 的第 $l+1$ 层更新规则为:

$$ h_v^{(l+1)} = \sigma\left(\sum_{r \in \mathcal{R}} \sum_{u \in \mathcal{N}v^r} \frac{1}{c{v,r}} W_r^{(l)} h_u^{(l)} + W_0^{(l)} h_v^{(l)}\right) $$

其中 $\mathcal{N}v^r$ 表示节点 $v$ 在关系 $r$ 下的邻居集合,$c{v,r}$ 为归一化常数(如 $|\mathcal{N}_v^r|$)。这种设计让不同关系拥有独立的参数矩阵 $W_r$,天然适合异构图。为防止关系数量过多导致参数量爆炸,常采用基分解或块对角分解来共享参数。

6. 实践入门:构建一个简单的 HGNN

以下是一个基于 PyTorch 和 dgl 库实现异构图消息传递的简化流程。

步骤 1:定义异构图

import dgl
import torch

# 创建异构图:两种节点(user, game),两种边(buy, click)
graph_data = {
    ('user', 'buy', 'game'): (torch.tensor([0, 1]), torch.tensor([0, 1])),
    ('user', 'click', 'game'): (torch.tensor([0, 1]), torch.tensor([1, 2])),
}
g = dgl.heterograph(graph_data)

步骤 2:为不同类型节点分配特征

g.nodes['user'].data['feat'] = torch.randn(2, 8)   # 2个用户,8维特征
g.nodes['game'].data['feat'] = torch.randn(3, 10)  # 3个游戏,10维特征

步骤 3:编写异构图卷积层

import dgl.function as fn
from torch import nn

class HeteroConvLayer(nn.Module):
    def __init__(self, in_feats, out_feats):
        super().__init__()
        # 为每种边类型学习独立的线性变换
        self.linear_buy = nn.Linear(in_feats['game'], out_feats)
        self.linear_click = nn.Linear(in_feats['game'], out_feats)
        self.linear_self = nn.Linear(in_feats['user'], out_feats)

    def forward(self, g, h_user, h_game):
        with g.local_scope():
            g.nodes['user'].data['h'] = h_user
            g.nodes['game'].data['h'] = h_game
            # 按关系分别聚合
            g['buy'].update_all(fn.copy_u('h', 'm'), fn.mean('m', 'buy_neigh'))
            g['click'].update_all(fn.copy_u('h', 'm'), fn.mean('m', 'click_neigh'))
            # 读取聚合结果
            h_buy = g.nodes['user'].data['buy_neigh']
            h_click = g.nodes['user'].data['click_neigh']
            # 线性变换后求和,加上自环
            out = self.linear_buy(h_buy) + self.linear_click(h_click) + self.linear_self(h_user)
            return torch.relu(out)

该简单模型对用户节点的购买邻居和点击邻居分别聚合并使用不同的线性层,体现了异构关系分别建模的思想。

7. 应用场景

  • 推荐系统:用户、商品、品牌等异质节点交互,通过元路径挖掘用户兴趣,如“用户-点击-商品-属于-类目”路径。
  • 知识图谱推理:实体和关系天然构成异构图,HGNN可进行链接预测、实体分类。
  • 网络安全:主机、进程、文件等异质节点,不同系统调用构成多种边,检测异常行为。
  • 生物医药:药物、靶点、疾病异构图,预测药物副作用或新适应症。

8. 进阶方向

  • 异构图 Transformer(HGT):将 Transformer 架构迁移到异构图,设计节点与边类型感知的注意力,无需预定义元路径,更具灵活性。
  • 动态异构图:节点和边随时间出现或消失,需要捕捉时序演化模式,如 TGN 在异构图上的扩展。
  • 大规模训练:采用邻居采样、节点分层等策略处理工业级十亿规模的异构图。
  • 自动化元路径选择:通过可微分搜索或策略梯度自动发现最优元路径组合,替代人工设计。

异构图网络的核心思想在于尊重差异、保留语义:对不同的节点类型、不同的边关系,使用与之匹配的参数化和聚合机制,并借助元路径或注意力机制来捕捉高阶、多义的连接模式。掌握了这些基础,你便能灵活构建适用于复杂异构场景的图模型。