md_files/科研/动态图神经网络.md

12 KiB
Raw Blame History

动态图神经网络

如何对GAT的权重$W$)和注意力参数($a$)进行增量更新(邻居偶尔变化)

1. 核心思想

  • 局部更新:邻居变化的节点及其直接邻域的权重和注意力参数需要调整,其他部分冻结。
  • 梯度隔离:反向传播时,仅计算受影响节点的梯度,避免全局参数震荡。

2. 数学实现步骤

(1) 识别受影响的节点

设邻居变化后的新邻接矩阵为 $\tilde{A}$,原邻接矩阵为 $A$,受影响节点集合 \mathcal{V}_{\text{affected}} 包括:

  • 新增或删除边的两端节点(直接受影响)。
  • 这些节点的1-hop邻居间接受影响根据GAT层数决定

(2) 损失函数局部化

仅对 \mathcal{V}_{\text{affected}} 中的节点计算损失:


\mathcal{L}_{\text{incremental}} = \sum_{i \in \mathcal{V}_{\text{affected}}} \ell(y_i, \hat{y}_i)

其中 \ell 为交叉熵损失,y_i 为标签,\hat{y}_i 为模型输出。

(3) 梯度计算与参数更新

  • 梯度掩码
    反向传播时,非受影响节点的梯度强制置零:

    
    \nabla_{W,a} \mathcal{L}_{\text{incremental}} = \left\{ 
    \begin{array}{ll}
    \nabla_{W,a} \ell(y_i, \hat{y}_i) & \text{if } i \in \mathcal{V}_{\text{affected}} \\
    0 & \text{otherwise}
    \end{array} \right.
    
  • 参数更新
    使用优化器如Adam仅更新有梯度的参数

    
    W \leftarrow W - \eta \nabla_W \mathcal{L}_{\text{incremental}}, \quad a \leftarrow a - \eta \nabla_a \mathcal{L}_{\text{incremental}}
    

    其中 \eta 为较小的学习率(防止过拟合)。

(4) 注意力权重的动态适应

GAT的注意力机制会自动适应新邻居


\alpha_{ij} = \text{softmax}\left(\text{LeakyReLU}\left(a^T [W h_i \| W h_j]\right)\right)

由于 Wa 已局部更新,新邻居 j \in \tilde{\mathcal{N}}(i) 的权重 \alpha_{ij} 会重新计算。

3. 适用场景

  • 低频变化:如社交网络每天新增少量边、论文引用网络月度更新。
  • 局部变化:每次变化仅影响图中少量节点(<10%)。

若邻居高频变化如秒级更新需改用动态GNN如TGAT或时间序列建模。

EvolveGCN

EvolveGCN-H

1. EvolveGCN-H核心思想

EvolveGCN-H 通过 GRU门控循环单元 动态更新 GCN 每一层的权重矩阵 $W_t^{(l)}$,将权重矩阵视为 GRU 的 隐藏状态,并利用当前时间步的 节点嵌入(特征) 作为输入来驱动演化。
关键特点

  • 输入依赖:利用节点嵌入 H_t^{(l)} 指导权重更新。
  • 时序建模:通过 GRU 隐式捕捉参数演化的长期依赖。

2. 动态更新流程(以第 l 层为例)

输入

  1. 当前节点嵌入矩阵 $H_t^{(l)} \in \mathbb{R}^{n \times d}$
  2. 上一时间步的权重矩阵 $W_{t-1}^{(l)} \in \mathbb{R}^{d \times d'}$
  3. 邻接矩阵 $A_t \in \mathbb{R}^{n \times n}$

输出

  1. 更新后的权重矩阵 $W_t^{(l)} \in \mathbb{R}^{d \times d'}$。
  2. 下一层节点嵌入 $H_t^{(l+1)} \in \mathbb{R}^{n \times d'}$。

3. 动态更新示意图

Time Step t-1                          Time Step t
+-------------------+                 +-------------------+
|  Weight Matrix    |                 |  Weight Matrix    |
|    W_{t-1}^{(l)}  |  --(GRU更新)--> |    W_t^{(l)}      |
+-------------------+                 +-------------------+
         ^                                      ^
         |                                      |
+-------------------+                 +-------------------+
|  Node Embeddings  |                 |  Node Embeddings |
|    H_t^{(l)}      |  --(GCN计算)--> |    H_t^{(l+1)}    |
+-------------------+                 +-------------------+
         ^                                      ^
         |                                      |
+-------------------+                 +-------------------+
|  邻接矩阵 A_t     |                 |  邻接矩阵 A_{t+1} |
| (显式输入)        |                 | (下一时间步输入)  |
+-------------------+                 +-------------------+

\begin{align*}
W_t^{(l)} &<= H_t^{(l)} + W_{t-1}^{(l)} \\
H_t^{(l+1)} &<= A_t + H_t^{(l)} + W_t^{(l)}
\end{align*}

4. 具体步骤分解

步骤 1节点嵌入聚合Summarize

由于 GRU 的输入需与隐藏状态 W_{t-1}^{(l)} 的列维度匹配(即 $d'$),需将 H_t^{(l)}n \times d 压缩为 d' \times d


Z_t = \text{Summarize}(H_t^{(l)}, d')

实现方式(论文方案):

  1. 计算得分:

    
    y_t = H_t^{(l)} p / \|p\| \quad (p \in \mathbb{R}^d \text{为可学习参数})
    

    学一个“打分器”参数 $p$$H_t^{(l)} p$相当于对每个节点的嵌入向量和 $p$做点积,得到一个分数。比如在社交网络中,p 可能代表“活跃度”,得分高的用户更活跃。

  2. 选取 Top-d' 个节点(按 y_t 排序),加权求和:

    
    Z_t = [H_t^{(l)} \circ \tanh(y_t)]_{\text{top-}d'} \quad (\circ \text{为逐元素乘})
    
    • 输出 $Z_t \in \mathbb{R}^{d' \times d}$。

举个例子

假设:

  • 有3个节点$n=3$),嵌入维度 $d=2$选Top-2个节点$d'=2$)。
  • 节点嵌入: H_t^{(l)} = \begin{bmatrix} 1 & 0.5 \\ 0.3 & 2 \\ -1 & 1 \end{bmatrix}, \quad p = [1, 0] p 只关注嵌入的第一维,比如“用户发帖数量”)
  1. 计算分数

    y_t = H_t^{(l)} p = [1 \cdot 1 + 0.5 \cdot 0, \ 0.3 \cdot 1 + 2 \cdot 0, \ -1 \cdot 1 + 1 \cdot 0] = [1, 0.3, -1]

    Top-2节点是第1、第2个节点分数1和0.3)。

  2. 加权聚合

    Z_t = \begin{bmatrix} [1, 0.5] \circ \tanh(1) \\ [0.3, 2] \circ \tanh(0.3) \end{bmatrix} = \begin{bmatrix} 0.76 & 0.38 \\ 0.09 & 0.58 \end{bmatrix}

    (假设 \tanh(1) \approx 0.76, $\tanh(0.3) \approx 0.29$

  3. 输出Z_t2 \times 2 矩阵可以直接喂给GRU。

步骤 2GRU 更新权重矩阵

W_t^{(l)} = \text{GRU}(Z_t^T, W_{t-1}^{(l)})

标准GRU输入隐藏输出都是向量这里都是矩阵

当前时间步的输入:Z_t^T

上一时间步的隐藏状态:W_{t-1}^{(l)}

更新隐藏状态: W_t^{(l)}

标准GRU 论文中的矩阵GRU 作用
W_{xz} (输入→更新门) W_Z 将当前输入 Z_t^T 映射到更新门。
W_{hz} (隐藏→更新门) U_Z 将上一隐藏状态 W_{t-1}^{(l)} 映射到更新门。
b_z (更新门偏置) B_Z 更新门的偏置项。
W_{xh} (输入→候选状态) W_H 将当前输入 Z_t^T 映射到候选状态。
W_{hh} (隐藏→候选状态) U_H 将调制后的隐藏状态 (R_t \circ W_{t-1}^{(l)}) 映射到候选状态。
b_h (候选状态偏置) B_H 候选状态的偏置项。

GRU 的矩阵形式计算

  1. 重置门 $R_t$:控制历史信息的遗忘程度

    
    R_t = \sigma(Z_t^T W_Z + W_{t-1}^{(l)} U_Z + B_Z)
    
  2. 更新门 $Z_t$:控制新旧状态混合比例

    
    U_t = \sigma(Z_t^T W_U + W_{t-1}^{(l)} U_U + B_U)
    
  3. 候选状态 $\widetilde{W}_t$

    
    \widetilde{W}_t = \tanh(Z_t^T W_H + (R_t \circ W_{t-1}^{(l)}) U_H + B_H)
    
  4. 最终权重更新

    
    W_t^{(l)} = (1 - U_t) \circ W_{t-1}^{(l)} + U_t \circ \widetilde{W}_t
    
    • 输出 $W_t^{(l)} \in \mathbb{R}^{d \times d'}$。
步骤 3GCN 生成下一层嵌入

使用更新的 W_t^{(l)} 执行标准 GCN 操作:


H_t^{(l+1)} = \sigma\left(\widehat{A}_t H_t^{(l)} W_t^{(l)}\right)
  • \widehat{A}_t 为归一化邻接矩阵(含自环)。

5. 关键设计细节

  1. 权重共享
    • 所有时间步共享同一 GRU 的参数($W_, U_, B_*$),确保模型尺寸不随时间增长。
  2. 层独立性
    • 每一层 GCN 的权重矩阵独立演化(不同层有各自的 GRU
  3. 特征与结构的协同
    • 节点嵌入 H_t^{(l)} 既包含特征信息,也隐含历史结构信息(通过多层 GCN 传播),因此 GRU 能间接感知结构变化。

6. 所需提前训练的权重

参数类型 符号 维度 作用
GCN 初始权重 W_0^{(l)} \mathbb{R}^{d \times d'} 初始时刻各层 GCN 的初始参数
GRU 输入变换矩阵 W_Z, W_R, W_H \mathbb{R}^{d \times d'} 将输入 Z_t^T 映射到门控
GRU 隐藏变换矩阵 U_Z, U_R, U_H \mathbb{R}^{d' \times d'} W_{t-1}^{(l)} 映射到门控
GRU 偏置项 B_Z, B_R, B_H \mathbb{R}^{d'} 门控和候选状态的偏置
Summarize 参数 p \mathbb{R}^d 动态选择重要节点
任务相关参数 例如 MLP 权重 任务相关 链接预测、节点分类等输出层

EvolveGCN-O

1. 核心思想

EvolveGCN-O 通过 LSTM 直接演化 GCN 的权重矩阵 $W_t^{(l)}$,将权重矩阵视为 LSTM的输出(下一时间步的输入),不依赖节点嵌入
关键特点

  • 结构驱动:仅通过历史权重 W_{t-1}^{(l)} 预测当前权重,完全基于图结构的动态变化。
  • 轻量化:无需处理节点嵌入,计算效率更高。

2. 动态更新流程(第$l$层)

输入

  1. 上一时间步权重 W_{t-1}^{(l)} \in \mathbb{R}^{d \times d'}
  2. 邻接矩阵 $A_t \in \mathbb{R}^{n \times n}$仅用于GCN计算

输出

  1. 更新后权重 W_t^{(l)} \in \mathbb{R}^{d \times d'}
  2. 下一层节点嵌入 H_t^{(l+1)} \in \mathbb{R}^{n \times d'}

3.具体步骤分解

步骤1LSTM更新权重矩阵

矩阵版LSTM计算

  1. 遗忘门:
    F_t = \sigma(W_F W_{t-1}^{(l)} + U_F C_{t-1} + B_F)
  2. 输入门:
    I_t = \sigma(W_I W_{t-1}^{(l)} + U_I C_{t-1} + B_I)
  3. 候选状态:
    \widetilde{C}_t = \tanh(W_C W_{t-1}^{(l)} + U_C C_{t-1} + B_C)
  4. 细胞状态更新:
    C_t = F_t \circ C_{t-1} + I_t \circ \widetilde{C}_t
  5. 输出门:
    O_t = \sigma(W_O W_{t-1}^{(l)} + U_O C_{t-1} + B_O)
  6. 最终权重输出:
    W_t^{(l)} = O_t \circ \tanh(C_t)
步骤2GCN生成下一层嵌入

H_t^{(l+1)} = \sigma(\widehat{A}_t H_t^{(l)} W_t^{(l)})

4. 与EvolveGCN-H对比

特性 EvolveGCN-H EvolveGCN-O
RNN类型 GRU LSTM
演化依据 节点嵌入+历史权重 仅历史权重
计算复杂度 需Summarize
适用场景 特征动态性强(如社交网络) 结构变化主导(如路由器拓扑)

TGAT