文献与代码
时空神经网络的提出来自这篇论文:
Github 上有该模型的源码实现:https://github.com/edouardelasalles/stnn
问题描述
主要考虑的是如下问题:
-
有 n n n 个时间序列,每个序列有 m m m 维特征,每段序列的长度为 T T T。如果用 X X X 来表示所有序列,则 X ∈ R T × n × m X \in R^{T\times n \times m} X∈RT×n×m,是一个 3 维张量;
-
这 n n n 组序列之间有空间上的联系,用矩阵 W ∈ R n × n W \in R^{n \times n} W∈Rn×n 来描述;
-
需要预测所有序列在未来 τ \tau τ 时间内的值;
-
希望学习一个模型 f : R T × n × m × R n × n → R τ × n × m f: R^{T\times n \times m} \times R^{n \times n} \rightarrow R^{\tau \times n \times m} f:RT×n×m×Rn×n→Rτ×n×m.
STNN
当不考虑空间关系时,可以用动态因子图来对时间序列建模。
动态因子图(DFG)
动态因子图是一种隐状态模型,模型包含两个部分:
- 状态转移: Z t + 1 = g ( Z t ) Z_{t+1} = g(Z_t) Zt+1=g(Zt)
- 状态解码: X t = d ( Z t ) X_t = d(Z_t) Xt=d(Zt)
观测序列的动态行为完全由隐状态决定,没有受到任何外部输入的影响,这是和 RNN 不同的地方。
DFG 的学习
比 RNN 更牛的地方在于,不仅解码函数
d
(
⋅
)
d(\cdot)
d(⋅) 和状态转移函数
g
(
⋅
)
g(\cdot)
g(⋅) 是要学的,连隐状态
Z
t
Z_t
Zt 也是直接从数据中学的!
预测模型的使用
当 DFG 训练好时,用如下方式预测:
考虑空间关系
原文讲得挺清楚的,,,
如果不只有 1 种空间关系,而是有
R
R
R 种不同的关系
W
(
r
)
,
r
=
1
,
2
,
…
,
R
W^{(r)}, r=1,2,\ldots, R
W(r),r=1,2,…,R:
STNN-R(efining)
对人为设定的空间关系
W
W
W 进行微调,利用元素乘法调整
W
W
W 内元素的值,
训练时的代价函数改换成:
注意到新增了关于
Γ
\Gamma
Γ 的稀疏性约束条件。
γ
\gamma
γ 这个超参数可以利用验证集来选取:
STNN-D(iscovering)
此时,序列间的空间关系完全从数据中学习,
公式(9) 中的
γ
\gamma
γ 控制了学习到的
Γ
\Gamma
Γ 的分布范围,当
γ
\gamma
γ 越大时,对
Γ
\Gamma
Γ 的稀疏性约束越强,对每个空间点之间的相关性更加约束在局部范围。