文章概述
轨迹相似性计算在许多时空应用中都很重要。传统的相似性度量算法的二次复杂度无法处理大规模数据集,而基于RNN的解决方案在长轨迹上的性能会急剧下降。为此,作者提出了一种新的基于图的方法,即TrajGAT,来显式地建模层次空间结构,提高长轨迹相似度计算的性能。TrajGAT主要包括两个模块:轨迹图构造和轨迹编码。对于图的构造,TrajGAT首先使用PR quadtree构建整个空间区域的层次结构,然后基于原始记录和quadtree的叶节点为每条轨迹构造一个图。对于轨迹编码,作者将Transformer中的自注意替换为图注意力,并设计了一个编码器来表示生成的图轨迹。使用这两个模块,TrajGAT可以捕获轨迹的长期依赖关系,同时减少Transformer的GPU内存使用。最后在两个真实数据集上的实验表明,TrajGAT不仅提高了长轨迹上的性能,而且在混合轨迹上的性能显著优于最先进的方法。
预备知识
给定大小为 N N N的轨迹集 T \mathcal{T} T和轨迹相似性度量 f ( ⋅ , ⋅ ) f(\cdot, \cdot) f(⋅,⋅)。每条轨迹 T ∈ T T \in \mathcal{T} T∈T为二维元组序列,即 T = [ X 1 , … , X t , … ] , X t = ( l a t t , l o n t ) T=\left[X_1, \ldots, X_t, \ldots\right], X_t=(lat_t,lon_t) T=[X1,…,Xt,…],Xt=(latt,lont)。对于任意两条轨迹 T i , T j ∈ T T_i, T_j \in \mathcal{T} Ti,Tj∈T, f ( T i , T j ) f\left(T_i, T_j\right) f(Ti,Tj)度量了轨迹 T i T_i Ti和 T j T_j Tj的相似度。
本文的任务是在相似性函数 f ( ⋅ , ⋅ ) f(\cdot, \cdot) f(⋅,⋅)下计算 T \mathcal{T} T中一对临时轨迹的相似性。然后现有大多数流行的相似度度量计算一对轨迹间的相似度会导致二次时间复杂度。而现有的基于DL的方法在长轨迹上会导致严重的性能下降。
为此,本文希望学得一个相似度近似函数 g ( . , . ) g(.,.) g(.,.),使得其计算高效的同时在长轨迹和短轨迹上的差异 ∣ f ( T i , T j ) − g ( T i , T j ) ∣ \left|f\left(T_i, T_j\right)-g\left(T_i, T_j\right)\right| ∣f(Ti,Tj)−g(Ti,Tj)∣被最小化。
TrajGAT
框架概述
TrajGAT的框架如下图所示,它是一个基于图的度量学习框架。TrajGAT包含三大核心组件:
- 层次化结构建模:基于Point-Region (PR) quadtree来构建区域 A \mathcal{A} A的层次结构 H \mathcal{H} H。
- 基于图的轨迹编码:利用 H \mathcal{H} H的树结构将每条轨迹 T T T转换为图 T g T^g Tg。
- 基于度量学习的优化:利用rank loss来拟合轨迹对之间的相似性,并提出归一化方法使监督信息更容易学习。
度量是指学习一个度量函数(metric function),该函数可用于计算输入数据之间的距离或相似性。该函数可以从训练数据中自动学习,以便在输入空间中更好地捕获数据点之间的语义关系。
层次结构建模
TrajGAT利用PR quadtree来建模层次化的空间信息,具体方法是递归的将区域进行四等分,直至没有区域的叶子节点数超过阈值 δ \delta δ。在下面的示例中 δ = 2 \delta = 2 δ=2,整个区域被分为3层。
为了整合层次信息进行轨迹编码,作者对 H \mathcal{H} H进行了预训练以获取网格单元的嵌入 M H ∈ d h × N h \mathcal{M}_{\mathcal{H}} \in d_h \times N_h MH∈dh×Nh。假定 H \mathcal{H} H中存在 K K K个网格,将 H \mathcal{H} H看作图,在其上进行Node2Vec以获得 M H \mathcal{M}_{\mathcal{H}} MH。
基于图的轨迹编码
对于轨迹编码,首先为每条轨迹构建图,然后利用提出的GAT-based Transformer来生成轨迹图的嵌入。
轨迹图的构造
给定轨迹 T T T,构建其对应的轨迹图 T g = ( N , E ) T^g = (N,E) Tg=(N,E),其中 N N N为节点集, E E E为边集。
T g T^g Tg中的节点是从 T T T的原始记录以及其在 H \mathcal{H} H的不同层所关联的网格单元中提取的,即 N = N r ∪ N h N = N_r \cup N_h N=Nr∪Nh。假定轨迹 T T T的原始记录节点集为 N r N_r Nr,将其作为第0层的节点,TrajGAT递归地将与先前层关联的没有被添加的层次网格单元节点加入 T g T^g Tg, H \mathcal{H} H不同层对应的节点集表示为 N h 1 N_h^1 Nh1。
T g T^g Tg中涉及两种不同的边,第一种称之为跨层边 E c E_c Ec,其连接了不同层的节点。对于轨迹 T T T的原始记录节点集 N r N_r Nr会添加 N r N_r Nr到 H \mathcal{H} H中与其关联的网格单元节点集 N h 1 N_h^1 Nh1间的边,其他层间的边通过 H \mathcal{H} H的树结构来添加。第二种称之为同层边,作者仅构建了 N h N_h Nh的同层边,具体做法是对于每层 N h i N_h^i Nhi,若其节点在更低层中没有连接,则添加相应的边。
轨迹图的构造示意图见下:
T g T^g Tg中的节点特征 f f f由三部分组成:坐标特征 f h f^h fh,区域特征 f r f^r fr和层次结构特征 f h f^h fh,即 f = concat ( f l , f r , f h ) \mathbf{f} = \text{concat}(f^l,f^r,f^h) f=concat(fl,fr,fh),具体获取过程略。
基于GAT的轨迹编码器
下图展示的是该轨迹编码器的结构:
该框架包含两个新奇的设计:
- 位置编码同时保留轨迹的顺序和位置信息
- 基于GAT的Transformer通过图注意力操作来建模长序列
位置编码:需要获取
T
g
T^g
Tg的节点顺序遍历,对于第0层,直接follow轨迹
T
T
T中的轨迹点顺序,对于其他层,按其在
N
i
−
1
h
N_{i-1}^h
Ni−1h中连接节点的出现顺序将其添加到遍历序列
L
L
L中(不重复)。然后,对获取到的
L
L
L采用正弦值来编码位置信息
λ
i
s
\lambda_i^s
λis。此外,为了建模
T
g
T^g
Tg的图关系,作者采用了拉普拉斯位置编码来编码相对距离信息
λ
i
g
\lambda_i^g
λig,即邻近节点位置特征相似,距离较远节点位置特征不同。在获取到两个位置编码后将其凭借起来然后加到节点特征向
f
i
f_i
fi上,即:
λ
i
=
concat
(
λ
i
s
,
λ
i
g
,
)
i
i
=
λ
i
+
f
i
\begin{aligned} \lambda_i & =\operatorname{concat}\left(\lambda_{\mathrm{i}}^{\mathrm{s}}, \lambda_{\mathrm{i}}^{\mathrm{g}},\right) \\ \mathbf{i}_i & =\lambda_i+\mathbf{f}_i \end{aligned}
λiii=concat(λis,λig,)=λi+fi
其中
f
i
\mathbf{f}_i
fi表示节点
i
i
i对应的特征。
基于GAT的Transformer层:对于每个节点
i
i
i,对轨迹图
T
g
T^g
Tg利用GAT层进行图卷积,然后套用Transformer层,具体参加上图。对GAT层,作者对self-attention的计算方式进行了改变,不再使用pair-wise注意力,作者改变后的GAT对应的卷积公式如下:
h
i
′
ℓ
+
1
=
O
h
ℓ
concat
k
=
1
H
(
∑
j
∈
N
i
w
i
j
k
,
ℓ
V
k
,
ℓ
h
j
ℓ
)
where,
w
i
,
j
k
,
ℓ
=
softmax
j
(
Q
k
,
ℓ
h
i
ℓ
⋅
K
k
,
ℓ
h
j
ℓ
d
k
)
\begin{array}{r} \mathbf{h}_i^{\prime \ell+1}=\mathbf{O}_h^{\ell} \operatorname{concat}_{k=1}^H\left(\sum_{j \in \mathcal{N}_i} \mathbf{w}_{i j}^{k, \ell} \mathbf{V}^{k, \ell} \mathbf{h}_j^{\ell}\right) \\ \text { where, } \mathbf{w}_{i, j}^{k, \ell}=\operatorname{softmax}_j\left(\frac{\mathrm{Q}^{k, \ell} \mathbf{h}_i^{\ell} \cdot \mathrm{K}^{k, \ell} \mathbf{h}_j^{\ell}}{\sqrt{d_k}}\right) \end{array}
hi′ℓ+1=Ohℓconcatk=1H(∑j∈Niwijk,ℓVk,ℓhjℓ) where, wi,jk,ℓ=softmaxj(dkQk,ℓhiℓ⋅Kk,ℓhjℓ)
其中
Q
,
K
,
V
Q,K,V
Q,K,V都是可学习的参数矩阵。在经过
P
P
P个基于GAT的Transformer层后,可以获取到的
P
P
P个隐藏层表示
[
h
1
P
,
…
,
h
i
P
,
…
,
h
M
P
]
\left[\mathbf{h}_1^P, \ldots, \mathbf{h}_i^P, \ldots, \mathbf{h}_M^P\right]
[h1P,…,hiP,…,hMP],最终轨迹图的嵌入表示
e
\mathbf{e}
e作者采用的mean readout来计算,即
e
=
∑
i
=
1
M
h
i
P
/
M
\mathbf{e}=\sum_{i=1}^M \mathbf{h}_i^P / M
e=i=1∑MhiP/M
基于图的轨迹编码的输出可以作为轨迹其纳入来计算轨迹相似性。
基于度量学习的优化
TrajGAT采用度量学习的框架来优化模型参数。给定距离矩阵 D \mathcal{D} D ,其中包含 T \mathcal{T} T中轨迹对的逐对距离。作者先将其转换为相似度矩阵 S \mathcal{S} S,即 S i j = exp ( − θ D i , h ) max ( exp ( − θ D ) ) \mathcal{S}_{i j}=\frac{\exp \left(-\theta \mathcal{D}_{i, h}\right)}{\max (\exp (-\theta \mathcal{D}))} Sij=max(exp(−θD))exp(−θDi,h),其中 θ \theta θ是控制相似值分布的可调参数, S \mathcal{S} S 被用作监督信号。
然而上述监督信号中的大部分相似性
T
a
T_a
Ta都聚集在一个很小的区域,这不能提供明确的监督信息,为此作者还对其进行了Gaussian正则化:
μ
a
=
∑
i
∈
[
1
,
…
,
N
]
/
a
S
a
i
N
−
1
;
σ
a
=
∑
i
∈
[
1
,
…
,
N
]
/
a
(
S
a
i
−
μ
a
)
2
N
−
1
f
(
T
a
,
T
j
)
=
(
S
a
j
−
μ
a
)
/
σ
a
\begin{gathered} \mu_a=\frac{\sum_{i \in[1, \ldots, N] / a} \mathcal{S}_{a i}}{N-1} ; \sigma_a=\sqrt{\frac{\sum_{i \in[1, \ldots, N] / a}\left(\mathcal{S}_{a i}-\mu_a\right)^2}{N-1}} \\ f\left(T_a, T_j\right)=\left(\mathcal{S}_{a j}-\mu_a\right) / \sigma_a \end{gathered}
μa=N−1∑i∈[1,…,N]/aSai;σa=N−1∑i∈[1,…,N]/a(Sai−μa)2f(Ta,Tj)=(Saj−μa)/σa
正则化后
T
a
T_a
Ta的相似度分布符合标注高斯分布,然后用它来计算关于
T
a
T_a
Ta是损失:
L
a
=
∑
i
=
1
n
r
i
(
g
(
T
a
,
T
i
)
−
f
(
T
a
,
T
i
)
)
2
L_a=\sum_{i=1}^n r_i\left(g\left(T_a, T_i\right)-f\left(T_a, T_i\right)\right)^2
La=i=1∑nri(g(Ta,Ti)−f(Ta,Ti))2
其中
g
(
T
i
,
T
j
)
=
exp
(
−
Euclidean
(
e
i
,
e
j
)
)
g\left(T_i, T_j\right)=\exp \left(-\operatorname{Euclidean}\left(\mathbf{e}_i, \mathbf{e}_j\right)\right)
g(Ti,Tj)=exp(−Euclidean(ei,ej)) 计算两个轨迹嵌入之间的相似度。
r
r
r 是根据weighted rank loss计算的采样权重。最终轨迹集
T
\mathcal{T}
T上的总损失为:
L
T
=
∑
a
∈
T
L
a
L_{\mathcal{T}}=\sum_{a \in \mathcal{T}} L_a
LT=a∈T∑La