2025-04-29 18:12:50 +08:00
|
|
|
|
### **LSTM+GAT训练过程说明(RWP网络节点移动预测)**
|
|
|
|
|
|
|
|
|
|
#### **1. 数据构造**
|
|
|
|
|
**输入数据**:
|
|
|
|
|
- **节点轨迹数据**:
|
|
|
|
|
- 每个节点在1000个时间单位内的二维坐标 $(x, y)$,形状为 $[N, 1000, 2]$($N$个节点,1000个时间步,2维特征)。
|
|
|
|
|
- **动态邻接矩阵序列**:
|
|
|
|
|
- 每个时间步的节点连接关系(基于距离阈值或其他规则生成),得到1000个邻接矩阵 $[A_1, A_2, \dots, A_{1000}]$,每个 $A_t$ 的形状为 $[2, \text{num\_edges}_t]$(稀疏表示)。
|
|
|
|
|
|
|
|
|
|
**滑动窗口处理**:
|
|
|
|
|
- **窗口大小**:12(用前12个时间步预测第13个时间步)。
|
|
|
|
|
- **滑动步长**:1(每次滑动1个时间步,生成更多训练样本)。
|
|
|
|
|
- **生成样本数量**:
|
|
|
|
|
- 总时间步1000,窗口大小12 → 可生成 $1000 - 12 = 988$ 个样本。
|
|
|
|
|
|
|
|
|
|
**样本格式**:
|
|
|
|
|
- **输入序列** $X^{(i)}$:形状 $[N, 12, 2]$($N$个节点,12个时间步,2维坐标)。
|
|
|
|
|
- **目标输出** $Y^{(i)}$:形状 $[N, 2]$(第13个时间步所有节点的坐标)。
|
|
|
|
|
- **动态邻接矩阵**:每个样本对应12个邻接矩阵 $[A^{(i)}_1, A^{(i)}_2, \dots, A^{(i)}_{12}]$(每个 $A^{(i)}_t$ 形状 $[2, \text{num\_edges}_t]$)。
|
2025-04-26 19:57:55 +08:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2025-04-29 18:12:50 +08:00
|
|
|
|
#### **2. 训练过程**
|
|
|
|
|
**模型结构**:
|
|
|
|
|
1. **LSTM层**:
|
|
|
|
|
- 输入:$[N, 12, 2]$($N$个节点的12步历史轨迹)。
|
|
|
|
|
- 输出:每个节点的时序特征 $[N, 12, H]$($H$为LSTM隐藏层维度)。
|
|
|
|
|
- **关键点**:LSTM独立处理每个节点的时序,节点间无交互。
|
|
|
|
|
|
|
|
|
|
2. **GAT层**:
|
|
|
|
|
- 输入:取LSTM最后一个时间步的输出 $[N, H]$(即每个节点的最终时序特征)。
|
|
|
|
|
- 动态图输入:使用第12个时间步的邻接矩阵 $A^{(i)}_{12}$(形状 $[2, \text{num\_edges}]$)。
|
|
|
|
|
- 输出:通过图注意力聚合邻居信息,得到空间增强的特征 $[N, H']$($H'$为GAT输出维度)。
|
|
|
|
|
|
|
|
|
|
3. **预测层**:
|
|
|
|
|
- 全连接层将 $[N, H']$ 映射到 $[N, 2]$,预测下一时刻的坐标。
|
|
|
|
|
|
|
|
|
|
**训练步骤**:
|
|
|
|
|
1. **前向传播**:
|
|
|
|
|
- 输入 $[N, 12, 2]$ → LSTM → $[N, 12, H]$ → 取最后时间步 $[N, H]$ → GAT → $[N, H']$ → 预测 $[N, 2]$。
|
|
|
|
|
2. **损失计算**:
|
|
|
|
|
- 均方误差(MSE)损失:比较预测坐标 $[N, 2]$ 和真实坐标 $[N, 2]$。
|
|
|
|
|
3. **反向传播**:
|
|
|
|
|
- 梯度从预测层回传到GAT和LSTM,更新所有参数。
|
2025-04-26 19:57:55 +08:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2025-04-29 18:12:50 +08:00
|
|
|
|
#### **3. 数据维度变化总结**
|
|
|
|
|
| **步骤** | **数据形状** | **说明** |
|
|
|
|
|
| --------------------- | -------------- | -------------------------------------- |
|
|
|
|
|
| 原始输入 | $[N, 1000, 2]$ | $N$个节点,1000个时间步的$(x,y)$坐标。 |
|
|
|
|
|
| 滑动窗口样本 | $[N, 12, 2]$ | 每个样本包含12个历史时间步。 |
|
|
|
|
|
| LSTM输入 | $[N, 12, 2]$ | 输入LSTM的节点独立时序数据。 |
|
|
|
|
|
| LSTM输出 | $[N, 12, H]$ | $H$为LSTM隐藏层维度。 |
|
|
|
|
|
| GAT输入(最后时间步) | $[N, H]$ | 提取每个节点的最终时序特征。 |
|
|
|
|
|
| GAT输出 | $[N, H']$ | $H'$为GAT输出维度,含邻居聚合信息。 |
|
|
|
|
|
| 预测输出 | $[N, 2]$ | 下一时刻的$(x,y)$坐标预测。 |
|
2025-04-26 19:57:55 +08:00
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
2025-04-29 18:12:50 +08:00
|
|
|
|
#### **4. 关键注意事项**
|
|
|
|
|
1. **动态图的处理**:
|
|
|
|
|
- 每个滑动窗口样本需匹配对应时间步的邻接矩阵(如第 $i$ 到 $i+11$ 步的 $[A^{(i)}_1, \dots, A^{(i)}_{12}]$),但GAT仅使用最后一步 $A^{(i)}_{12}$。
|
|
|
|
|
- 若图结构变化缓慢,可简化为所有窗口共享 $A^{(i)}_{12}$。
|
2025-04-23 11:37:26 +08:00
|
|
|
|
|
2025-04-29 18:12:50 +08:00
|
|
|
|
2. **数据划分**:
|
|
|
|
|
- 按时间划分训练/验证集(如前800个窗口训练,后188个验证),避免未来信息泄露。
|
2025-04-23 11:37:26 +08:00
|
|
|
|
|
2025-04-29 18:12:50 +08:00
|
|
|
|
3. **模型改进方向**:
|
|
|
|
|
- **多步预测**:输出 $[N, K, 2]$(预测未来$K$步),需调整损失函数。
|
|
|
|
|
- **时空耦合**:改用ST-LSTM或先GAT后LSTM,更早引入交互。
|
2025-04-24 19:00:14 +08:00
|
|
|
|
|
2025-04-26 19:57:55 +08:00
|
|
|
|
---
|
2025-04-24 19:00:14 +08:00
|
|
|
|
|
2025-04-29 18:12:50 +08:00
|
|
|
|
### **总结**
|
|
|
|
|
- **数据流**:滑动窗口切割时序 → LSTM独立编码节点轨迹 → GAT聚合空间信息 → 预测坐标。
|
|
|
|
|
- **节点交互时机**:仅在GAT阶段通过注意力机制融合邻居信息,LSTM阶段节点独立。
|
|
|
|
|
- **适用性**:适合RWP等移动模型预测,兼顾时序动态和空间依赖。
|