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

308 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 动态图神经网络
## 如何对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)
$$
由于 $W$ 和 $a$ 已局部更新,新邻居 $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. 动态更新示意图**
```plaintext
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_t$ $2 \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