GNN 与 Transformer 融合 2025-2026 新视角

引言

图神经网络 (GNN) 和 Transformer 是当今最具影响力的两类深度学习架构。2024-2026 年间,二者的融合成为最重要的研究方向之一:

  • 图 Transformer (Graph Transformer, GT):在图数据上用注意力
  • 图扩散 Transformer:用扩散 + 注意力生成图
  • 图状态空间模型 (Graph Mamba):用 SSM 替代注意力,实现 复杂度
  • GNN + LLM:用 LLM 处理图数据
  • 图基础模型 (Graph Foundation Model, GFM):跨图、跨任务零样本迁移

本文系统梳理这五大方向,建立从基础到前沿的完整图-注意力统一视角。1


一、图视角的统一

1.1 三种图的对应

重要观察

数据类型静态图动态图软图
序列链状图-注意力
图像网格图-局部注意力
文本句子图-全局注意力
通用图邻接矩阵时间演化学习

关键统一所有这些数据都可以视为”图”,区别仅在于邻接关系

1.2 注意力 = 动态全连接图

Transformer 注意力矩阵 软的全连接邻接矩阵

  • 节点:每个 token
  • 边权重: = 注意力分数

与 GNN 的对应

概念GNNTransformer
图结构输入给定注意力构建
消息传递沿边沿注意力权重
深度多层消息传递多层注意力

1.3 GNN = 静态图上的可微消息传递

import torch
import torch.nn as nn
import torch.nn.functional as F
 
class GNNLayer(nn.Module):
    """GNN 消息传递层"""
    def __init__(self, d_in, d_out):
        super().__init__()
        self.msg_net = nn.Linear(2 * d_in, d_out)
        self.update_net = nn.Linear(2 * d_in, d_out)
    
    def forward(self, h, adj):
        """
        h: (N, d_in) 节点特征
        adj: (N, N) 邻接矩阵
        """
        N = h.size(0)
        # 构建边 (i, j)
        messages = []
        for i in range(N):
            for j in range(N):
                if adj[i, j] > 0:
                    msg = self.msg_net(torch.cat([h[i], h[j]]))
                    messages.append((i, msg))
        
        # 聚合
        h_new = torch.zeros(N, self.update_net.out_features, device=h.device)
        for src, msg in messages:
            h_new[src] += msg
        
        # 更新
        h_new = self.update_net(torch.cat([h, h_new], dim=-1))
        return F.relu(h_new)

二、图 Transformer 架构

2.1 GraphGPS:通用 GT 框架

Rampášek et al. NeurIPS 2022 提出的 GraphGPS 是目前最广泛使用的 GT 架构:2

三层组合

  • MPNN:捕获局部结构
  • Self-Attention:捕获全局依赖
  • 位置编码:LapPE、RWSE、SignNet

结论:GT 性能高度依赖位置编码(PE)。

2.2 位置编码(PE)的关键作用

Black et al. (2024) 系统比较各类 PE:

PE 类型来源表达能力
Laplacian PE图拉普拉斯局部-全局
Random Walk PE随机游走局部-全局
SignNet特征值符号中等
结构编码子图结构
LapPE + Spectral 组合多模态最佳

2.3 2024-2026 新 GT 架构

VCR-Graphormer (2024):虚拟连接实现 mini-batch GT, 复杂度

Subgraphormer (2024):用图乘积统一 Subgraph GNN 和 GT

Primphormer (ICML 2025):基于原始表示的线性复杂度 GT,避免显式 PE

Relational Graph Transformer (RGT) (2025):面向关系型/多表数据,建模异构时序图

Hierarchical Mask Framework (2025):统一并增强 GT 的层级掩码框架

class GraphGPSLayer(nn.Module):
    """GraphGPS 层:MPNN + Self-Attention"""
    def __init__(self, d_model, n_heads, d_ff, dropout=0.1):
        super().__init__()
        # 局部 MPNN
        self.mpnn = nn.Linear(d_model, d_model)
        # 全局注意力
        self.attn = nn.MultiheadAttention(d_model, n_heads, batch_first=True)
        # FFN
        self.ffn = nn.Sequential(
            nn.Linear(d_model, d_ff),
            nn.GELU(),
            nn.Linear(d_ff, d_model)
        )
        # 归一化
        self.ln1 = nn.LayerNorm(d_model)
        self.ln2 = nn.LayerNorm(d_model)
        self.ln3 = nn.LayerNorm(d_model)
        self.dropout = nn.Dropout(dropout)
    
    def forward(self, x, adj, mask=None):
        B, N, d = x.shape
        # MPNN 分支
        # adj: (B, N, N)
        mpnn_out = torch.bmm(adj, self.mpnn(x)) / (adj.sum(dim=-1, keepdim=True) + 1e-8)
        x = x + self.dropout(self.ln1(mpnn_out))
        
        # Self-Attention 分支
        attn_out, _ = self.attn(self.ln2(x), self.ln2(x), self.ln2(x), 
                                key_padding_mask=mask)
        x = x + self.dropout(attn_out)
        
        # FFN
        x = x + self.dropout(self.ln3(self.ffn(x)))
        return x

三、图谱 Transformer

3.1 Specformer:谱域注意力

Bo, Shi, Wang, Liao (ICLR 2023) 提出 Specformer3

把标量-标量谱滤波器升级为集合-集合函数(spectral token Transformer):

洞察:谱域注意力捕捉全局频率模式,弥补传统谱 GNN 仅用 的标量滤波局限。

3.2 Graph Spectral Token (2024)

Pengmei & Li (2024) 把图谱信息作为”token”注入任意 GT,作为轻量插件。

3.3 表达能力

Zhang, Zhao, Maron (2024) 证明:

谱不变 GNN 的 1-WL 上界,并刻画与子图 GNN 的表达能力关系。

谱方法与子图方法有等价性。


四、图扩散 Transformer

4.1 扩散模型 + 图

Liu, Xu, Luo, Jiang (Notre Dame, 2024) 在扩散模型的去噪网络中用 GT 替代 GNN,支持多属性条件分子生成。

4.2 平流扩散注意力

Wu, Yang, Zeng, Bronstein (2024-2025) 引入平流扩散算子作为 GT 的全局混合器:4

作为软注意力偏置,提升拓扑偏移下的泛化性。

4.3 分子生成:JTreeformer

Shi, Xie, Zhang et al. (HIT Shenzhen 2025) 用潜扩散 + GT 生成分子图树结构。

4.4 扩散-注意力统一视角

扩散过程可以视为连续图上的扩散

注意力机制可以视为离散图扩散

关键联系:二者都是图上的扩散过程。


五、图状态空间模型(Graph Mamba)

5.1 Mamba 在图上的挑战

将 SSM 应用于图的核心挑战:

  1. 节点顺序:Mamba 假设序列顺序,但图节点无自然顺序
  2. 稀疏性:图通常是稀疏的, 注意力浪费
  3. 结构信息:如何编码图拓扑

5.2 Graph-Mamba (Wang et al. 2024)

首次将选择性 SSM 应用于长程图序列建模,复杂度 5

其中 是选择性参数。

5.3 Graph Mamba (Behrouz & Hashemi 2024)

节点级 SSM + 图感知扫描顺序,缓解 over-squashing

5.4 DyG-Mamba (2024)

连续 SSM 建模动态图,捕捉时间连续性。

5.5 扩展到异构图与时空图

  • STG-Mamba (2024):时空图
  • HeteGraph-Mamba (2024):异构图
  • MP-SSM (2025):消息传递 SSM
class GraphMambaBlock(nn.Module):
    """图 Mamba 块"""
    def __init__(self, d_model, d_state, d_conv=4, expand=2):
        super().__init__()
        self.d_model = d_model
        self.d_state = d_state
        
        # SSM 参数
        self.A_log = nn.Parameter(torch.log(torch.arange(1, d_state + 1).float()))
        self.D = nn.Parameter(torch.ones(d_model))
        
        # 选择性投影
        self.x_proj = nn.Linear(d_model, d_state * 2 + d_model, bias=False)
        self.dt_proj = nn.Linear(d_state, d_model, bias=True)
        
        # 局部卷积
        self.conv = nn.Conv1d(d_model, d_model, d_conv, padding=d_conv-1, groups=d_model)
        
        # 图感知位置编码
        self.graph_pos = nn.Linear(1, d_model)
    
    def forward(self, x, adj):
        """
        x: (B, N, d_model) 节点特征
        adj: (B, N, N) 邻接矩阵
        """
        B, N, d = x.shape
        
        # 1. 局部卷积
        x_conv = self.conv(x.transpose(1, 2))[..., :N].transpose(1, 2)
        x = x * F.silu(x_conv)
        
        # 2. 选择性扫描
        x_proj = self.x_proj(x)  # (B, N, 2*d_state + d)
        delta, B_ssm, C_ssm = torch.split(
            x_proj, [d, self.d_state, self.d_state], dim=-1
        )
        delta = F.softplus(self.dt_proj(delta))  # (B, N, d)
        
        # 3. 离散化
        A = -torch.exp(self.A_log)  # (d_state,)
        # 这里简化实现:实际是 selective_scan
        h = self.selective_scan(x, delta, A, B_ssm, C_ssm, self.D)
        
        return h
    
    def selective_scan(self, u, delta, A, B, C, D):
        """简化版 selective scan"""
        # 实际 PyTorch 实现需要自定义 CUDA kernel
        # 这里用循环示意
        B_dim, N, d = u.shape
        d_state = A.size(0)
        h = torch.zeros(B_dim, d, d_state, device=u.device)
        outputs = []
        for t in range(N):
            # 离散化
            dA = torch.exp(delta[:, t, :] @ torch.diag(A))  # (B, d, d_state)
            dB_u = delta[:, t, :] * B[:, t, :] * u[:, t, :]  # 简化
            h = dA * h + dB_u.unsqueeze(-1) @ B[:, t, :].unsqueeze(-2)
            y = (h @ C[:, t, :].unsqueeze(-1)).squeeze(-1)
            outputs.append(y)
        return torch.stack(outputs, dim=1) + D * u

六、GNN + LLM 融合

6.1 两大范式

Graph-as-Text(图作为文本):

  • 用 prompt engineering 将图序列化为文本
  • 让 LLM 直接处理图数据
  • 代表:LLaGA

Graph-as-Token(图作为 token):

  • 用图 tokenizer 把图编码为 LLM 可理解的 token
  • 指令微调 LLM 处理图 token
  • 代表:Graph2Token、G-Tokenizer

6.2 LLaGA (ICML 2024)

Ruan et al. (2024) 用模板将图序列化为 token:6

def graph_to_text(graph, features):
    """图序列化为文本"""
    text = []
    for i, (neighbors, feat) in enumerate(zip(graph.adj, features)):
        # 节点 i 的描述
        desc = f"Node {i}: {feat}. Neighbors: {','.join(map(str, neighbors))}."
        text.append(desc)
    return " ".join(text)
 
# 提示模板
prompt = f"""Given the following graph: {graph_to_text(graph, features)}
Question: What is the class of node {target}?
Answer:"""

6.3 Graph Tokenization

Graph Tokenization for Bridging Graphs and Transformers (2025):

  • 把图结构编码为 LLM 可理解的 token
  • 是 Graph2text vs Graph2token 路线之争的核心

Graph2text or Graph2token (2025):

  • 系统比较两条路线
  • 发现 Graph2token 在结构推理任务上更优

6.4 综述与未来

A Survey of LLMs for Graphs (Ren et al. 2024):

  • 系统总结 LLM + GNN 的方法
  • 三大任务:节点、边、图级别
  • 三大挑战:图结构编码、跨图迁移、可解释性

七、图基础模型(GFM)

7.1 跨图零样本迁移

核心问题:能否训练一个模型,不需在目标图上训练就能预测?

7.2 GraphAny (2024-2025)

Zhao, Mostafa, Galkin, Bronstein, Zhu, Tang (2024, v5 2025-04) 提出 GraphAny7

首个支持任意图节点分类的基础模型,无需在目标图上训练。

关键公式

基于半监督传播的元学习预测器。

7.3 PRODIGY (Stanford SNAP)

Qian et al. 预训练 GT 支持 prompt-based ICL 跨图迁移

7.4 GFM-RAG / 关系型 GFM

GFM-RAG (Luo et al. 2025):把 GFM 用于 RAG 任务。

Relation-Aware GFM (Yu et al. 2025):关系感知的图基础模型,统一多关系任务。

AutoGFM (ICML 2025):自动化架构搜索的 GFM。

Google Relational GFM (2025-07):将关系数据库视作异构图,构建通用 GFM。

class GraphAny(nn.Module):
    """GraphAny:图基础模型"""
    def __init__(self, d_input, d_hidden, n_classes):
        super().__init__()
        # 节点编码器
        self.node_encoder = nn.Sequential(
            nn.Linear(d_input, d_hidden),
            nn.ReLU(),
            nn.Linear(d_hidden, d_hidden)
        )
        # 元学习预测器
        self.predictor = nn.Sequential(
            nn.Linear(d_hidden * 2, d_hidden),
            nn.ReLU(),
            nn.Linear(d_hidden, n_classes)
        )
    
    def forward(self, x, adj, prompt=None):
        """
        x: (N, d_input) 节点特征
        adj: (N, N) 邻接矩阵
        prompt: 可选 prompt(任务描述)
        """
        h = self.node_encoder(x)  # (N, d_hidden)
        
        # 半监督传播
        for _ in range(3):
            h = torch.sparse.mm(adj, h)
        
        # 节点-全局表示
        global_feat = h.mean(dim=0, keepdim=True).expand_as(h)
        features = torch.cat([h, global_feat], dim=-1)
        
        # 预测
        logits = self.predictor(features)
        return logits

八、图谱与图扩散的数学统一

8.1 统一视角

三大数学对象

  1. 图结构:邻接矩阵 、拉普拉斯
  2. 谱方法:图傅里叶变换 ,其中
  3. 扩散过程(热扩散)

统一公式

8.2 Transformer 与扩散的对应

概念Transformer图扩散
状态Token 表示节点特征
演化注意力 + FFN拉普拉斯 + 漂移
平衡残差 + LN谱分解 + 平衡分布
信息流全连接局部 + 全局(取决于

8.3 SSM 与 GNN 的统一

SSM

GNN 消息传递

统一 类比 类比


九、2024-2026 关键进展总结

9.1 三大趋势

  1. 架构融合多元化:GT + PE 系统化;SSM 替代注意力;扩散统治图生成
  2. 基础模型化:GraphAny、PRODIGY、GFM-RNA 等追求跨图零样本
  3. LLM 化路径分化:Graph-as-Text vs Graph-as-Token

9.2 三大开放问题

  1. 大规模 GFM:大多数 GFM 仍局限于中小图(<10K 节点)
  2. 表达力 vs 可扩展性:图 Transformer 的二次复杂度
  3. Mamba + 图:如何把 Mamba 的成功经验注入到 GFM

9.3 三大实践建议

  1. 位置编码:优先使用 LapPE + Spectral 组合
  2. 架构选择:中小图用 GT,大图用 Mamba
  3. 图 LLM:结构推理任务用 Graph2token

十、完整实现:现代图 Transformer

import torch
import torch.nn as nn
import torch.nn.functional as F
import math
 
class LaplacianPE(nn.Module):
    """Laplacian 位置编码"""
    def __init__(self, d_pe, n_eigenvectors=8):
        super().__init__()
        self.n_eig = n_eigenvectors
        self.d_pe = d_pe
        self.linear = nn.Linear(2 * n_eigenvectors, d_pe)
    
    def forward(self, adj):
        """
        adj: (N, N) 邻接矩阵
        """
        N = adj.size(0)
        # 计算拉普拉斯
        D = torch.diag(adj.sum(dim=-1))
        L = D - adj
        
        # 特征值分解
        eigvals, eigvecs = torch.linalg.eigh(L)
        # 取最小的 k 个特征向量(不含 0 特征值)
        pe = eigvecs[:, 1:self.n_eig + 1]  # (N, n_eig)
        # 添加特征值信息
        eigval_info = torch.log(eigvals[1:self.n_eig + 1].unsqueeze(0) + 1e-8)
        pe = torch.cat([pe, eigval_info.expand(N, -1)], dim=-1)
        return self.linear(pe)  # (N, d_pe)
 
 
class ModernGraphTransformer(nn.Module):
    """现代图 Transformer"""
    def __init__(self, d_input, d_model, n_heads, d_ff, n_layers, 
                 d_pe, n_classes, dropout=0.1):
        super().__init__()
        self.d_model = d_model
        
        # 输入投影
        self.input_proj = nn.Linear(d_input, d_model)
        # 位置编码
        self.lap_pe = LaplacianPE(d_pe)
        self.pe_proj = nn.Linear(d_model + d_pe, d_model)
        
        # GT 层
        self.layers = nn.ModuleList([
            GraphGPSLayer(d_model, n_heads, d_ff, dropout)
            for _ in range(n_layers)
        ])
        
        # 输出
        self.norm = nn.LayerNorm(d_model)
        self.head = nn.Linear(d_model, n_classes)
    
    def forward(self, x, adj):
        """
        x: (N, d_input) 节点特征
        adj: (N, N) 邻接矩阵
        """
        h = self.input_proj(x)  # (N, d_model)
        pe = self.lap_pe(adj)   # (N, d_pe)
        h = self.pe_proj(torch.cat([h, pe], dim=-1))
        
        for layer in self.layers:
            h = layer(h.unsqueeze(0), adj.unsqueeze(0)).squeeze(0)
        
        h = self.norm(h)
        return self.head(h)  # (N, n_classes)
 
 
# === 训练示例 ===
def train_graph_transformer():
    # 模拟图数据
    N = 100  # 节点数
    d_input = 32
    n_classes = 7
    
    # 随机图
    adj = (torch.rand(N, N) > 0.7).float()
    adj = (adj + adj.T) > 0
    adj = adj.float()
    adj.fill_diagonal_(0)
    x = torch.randn(N, d_input)
    y = torch.randint(0, n_classes, (N,))
    
    # 模型
    model = ModernGraphTransformer(
        d_input=d_input, d_model=64, n_heads=4, d_ff=128,
        n_layers=4, d_pe=16, n_classes=n_classes
    )
    optimizer = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.1)
    
    for epoch in range(50):
        logits = model(x, adj)
        loss = F.cross_entropy(logits, y)
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        if epoch % 10 == 0:
            acc = (logits.argmax(dim=-1) == y).float().mean()
            print(f"Epoch {epoch}, Loss {loss.item():.4f}, Acc {acc.item():.4f}")

十一、与其他专题的连接

  • GNN 理论:过平滑、表达能力、泛化界
  • 图基础模型:跨图零样本迁移
  • Transformer 数学:注意力 = 软全连接图
  • 图 Mamba:SSM 在图上的应用
  • 几何深度学习:Erlangen 纲领

参考资料

其他 2024-2026 关键论文

  • Min, E. et al. (2024). Graph Transformers: A Survey. arXiv:2407.09777
  • Ren, J. et al. (2024). A Survey of LLMs for Graphs. arXiv:2405.08011
  • Black, M. et al. (2024). A Comprehensive Study on Graph Neural Networks and Graph Transformers. arXiv:2402.14202
  • Behrouz, A. & Hashemi, F. (2024). Graph Mamba: Towards Learning on Graphs with State Space Models. arXiv:2402.08678
  • Li, D. et al. (2024). DyG-Mamba: Continuous State Space Modeling on Dynamic Graphs. arXiv:2408.06966
  • Zhang, B. et al. (2024). On the Expressive Power of Spectral Invariant GNNs. arXiv:2406.04336
  • Liu, G. et al. (2024). Graph Diffusion Transformers for Multi-Conditional Molecular Generation. arXiv:2401.13858
  • Zhou, C. et al. (2024). Latent Graph Diffusion. arXiv:2402.02518
  • Luo, Z. et al. (2025). GFM-RAG: Graph Foundation Model for RAG. arXiv:2502.01113
  • Stoll, M. et al. (2025). Generalizable Insights for Graph Transformers. arXiv:2511.08028
  • He, Y. et al. (ICML 2025). Primphormer: A Linear Complexity Graph Transformer. PMLR v267
  • Dwivedi, V.P. et al. (2025). Relational Graph Transformer. arXiv:2505.10960

最后更新:2026-06-22

Footnotes

  1. Wu, Z. et al. (2019). A Comprehensive Survey on Graph Neural Networks. IEEE TNNLS. arXiv:1901.00596

  2. Rampášek, L. et al. (2022). Recipe for a General, Powerful, Scalable Graph Transformer. NeurIPS 2022. arXiv:2205.12454

  3. Bo, D. et al. (2023). Specformer: Spectral Graph Neural Networks Meet Transformers. ICLR 2023. arXiv:2303.01028

  4. Wu, Q. et al. (2024-2025). Supercharging Graph Transformers with Advective Diffusion. arXiv:2310.06417

  5. Wang, C. et al. (2024). Graph-Mamba: Towards Long-Range Graph Sequence Modeling with Selective State Space Models. arXiv:2402.00789

  6. Ruan, Y. et al. (2024). LLaGA: Large Language and Graph Assistant. ICML 2024. arXiv:2402.08170

  7. Zhao, J. et al. (2024). GraphAny: A Foundation Model for Node Classification on Any Graph. arXiv:2405.20445