Searching and Mining Trillions of Time Series Subsequences under Dynamic Time Warping 总结

前言: 本篇总结是对Thanawin Rakthanmanon, Bilson Campana, Abdullah Mueen, Gustavo Batista, Brandon Westover, Qiang Zhu, Jesin Zakaria, Eamonn Keogh 等人在2012年发表在ACM的论文 Searching and Mining Trillions of Time Series Subsequences under Dynamic Time Warping 的一个阅读笔记和总结。由于这边文章十分特殊,本文将会分为三个部分进行解读,第一部分是对论文的简单概括和动机阐释,也对应本文的Abstract和section 1: Introduction 部分; 第二部分则是对本文的背景知识做一个简单回顾,对应源文第三。第三部分则是关注文章中的算法部分,对应源文第四部分。最后一部分则是相关研究和实验以及总结的部分,分别对应原文二,五,六部分。如果对于时间序列及子序列搜寻问题有所了解,可以按顺序阅览本总结,如果是对于时间序列没有什么基础可以先阅读第二部分。

—————————————————————————————————————————————————————————

一、 概括与动机

本文的提出旨在解决time series问题中子序列相似度搜索里面的计算瓶颈问题。作者指出在本文作成之前,尚未有任何time series的子序列搜索研究能够拓展到trillion级别的数据。并且传统的time series子序列问题都是用较为易于计算的欧式距离算法来检测相似度,而本文则提出一个反直觉的论点:在大型数据集上,使用DTW算法实际上要比简单的ED(欧氏距离)算法来的要快速。(为什么反直觉会在本总结第二部分阐明),并且在比之前所有实验里用到的数据加起来还有大的数据集上验证了自己的观点。

在该文章第一部分,作者进一步强调了两个问题,一个是DTW算法的重要性以及更加出色的表现,以及自己模型在大型数据集上惊人的速度表现和大数据集本身的重要性。最后又提出和验证了该文章的研究所基于的三个重要猜想。 关于DTW,作者说这个模型在time seires子序列问题上是经过验证的表现最好的算法,但是由于计算能力的局限,很多研究不得不放弃使用DTW而进行一些近似的搜索算法。作者也提到,之前Time series的研究大多数由于计算能力只能局限在几十万或者百万级别的数据集上,而真是世界很多大的企业或者医疗机构存在着大量的Trillion级别的数据集等着更强的算法去探索。所以,提出一个能够在Trillion data上高效执行的算法十分重要。

该文章提出了三个假设,并且模型也是建立在这些假设成立的基础上的。它们分别是:第一,时间序列子序列必须进行normalization(归一化)处理;第二,DTW(dynamic time warping)算法是在执行子序列搜索任务上最好的方法;第三,任意长度的搜索没办法进行标注。这里分别展开说一下。

  1. 时间序列必须进行normalization处理:作者指出,如果要对两个时间序列进行对比,那你必须要将他们进行归一化处理,这很符合直觉。但由于之前的研究里面使用的计算加速方法只适用于没有归一化的数据,所以normalization没有得到足够的重视。作者举了一个例子,在视频图像处理里面,没有经过归一化的数据,会因为缩放或者补偿(offset)的改变而导致模型的准确性大幅度下降。
  2. DTW(dynamic time warping)算法是在执行子序列搜索任务上最好的方法:DTW在很多之气那的研究里面都被验证为是最好的算法,然而由于计算力限制没能采用。但是作者在这篇文章中将会向大家展示,为何DTW实际上能够被优化到超过几乎所有欧式距离算法的速度。
  3. 任意长度的搜索没办法进行标注:这个部分讲得十分抽象,个人的理解是作者指出,如果我们知道query的长度,那我们对这个query进行indexing至少对问题有所帮助。在我们不知道长度的情况下,也可以通过某种插入法算法来进行估计。然而,这么做一来是会增加内存负担(一个subsequence通常能够达到数据集的十分之一的长度),再一个如果是一个没有归一化的数据,通过估计得到其部分长度的距离意义并不大,而如果已经对数据进行归一化处理了,那这个时候index也已经没有了意义(因为这时候index可能是错的)

二、背景知识和核心算法

由于本文的研究领域是时间序列的子序列搜索问题,然而提出的方法却都是算法和动态规划等问题的优化,所以可能吸引不同领域的人由于不同原因去阅读这篇文章,所以作者特意在文章第三部分简单介绍了下一些背景知识帮助各位读者搞清楚所要处理的任务。

首先是三个重要的定义,分别定义了时间序列,时间序列子序列,和欧式距离在搜索上的定义。我们一个个来看:

  1. 时间序列:“ 一个时间序列T是一个有序的数组(list)T=t1,t2,...,tm. 时间序列通常是一个很长的序列,我们最终关注的是比较其较短的的段落--子序列。” 这个定义直接引自原文,我想没有什么太难理解的地方,这里也引出了子序列的定义。
  2. 时间序列的子序列:“一个时间序列T的子序列T_{i,k}是一个从第i个位置开始长度为k的较短的时间序列。正式表达为: T_{i,k} = t_i, t_{i+1}, ... , t_{i+k-1}, 1\leq i \leq m - k +1" 简单来说,一个长度为k的子序列其实就是从原时间序列任意i处开始截取出来的k个数据组成的序列。但这里需要注意的是,在文章里,T_{i,k} 被看作是一个Candidate(候选子序列),用来比对一个Q(搜索) 和它是否相似,而|Q| = n。
  3. 欧式距离:“ 两个长度相等的Q与C之间的欧式距离的计算公式如下:                                      ED(Q, C) = \sqrt{\sum_{i=1}^n (q_i - c_i)^2}     ” 简单来说就是Q,C两个序列第i个点的几何距离。 下面的图表达的更为清晰,可以看到这些点之间是一种一一对应的直线距离。                 

这里作者也顺便介绍了什么是DTW,他指出ED距离是一对一的,可以看作是DTW的一种特殊情况,在DTW里面我们允许一对多的对应。 表达两个序列的DTW距离需要一个n*n大小的矩阵(n是序列长度),第(i,j)个元素的值就是Q的第i个点和C的第j个点的距离 d(q_i, c_j). 而一个warping path P 则是指一系列连续的矩阵元素,这些元素定义了一个Q,C之间的映射关系,P的第t个元素可以写成 p_t = (i, j)_t. 而P的表达式则是: P = p_1, p_2, ... , p_t, ... , p_T \quad n \leq T \leq 2n-1, 这里个人理解是由于P大概对应的还是一个对角线,所以根据三角形的定律,T还是小于2n-1的。P还受到一些限制,诸如:其实和结束都必须是对角点;必须每一步都是和上一步相连;最后,这个path必须在time轴(也就是x轴)上是单调的(每一步只能在x轴上前进或者静止但不能后退?或者说对应线条不能交叉)。 还有一个常见的约束,是将warping path对对角线的偏离局限在一个有限的区域内,使它不至于过度偏离对角线(如果离开对角线太原,一般意味着过多的点映射到了一个点上)。看下图可以更清晰的理解:

此图左上是传统的ED的一一对应关系,下图则是DTW下Q,C之间更加多样的对应关系。右图则是warping path的表达。我们可以看到左下的距离表示从简单的一一垂直表示变成了更为复杂的一对多的关系甚至可以表达平移距离。并且,一个出现这warping path(右)里的连续横断可以看作对应关系里面的一个q点对应多个c点,而连续的竖直则是一个c点对应多个q点。通过这种一对多的关系,我们就能使后续的距离表达的不仅仅是垂直距离。

三、算法

这个部分可以简单的分成两大部分,一个是介绍一下现有的优化算法,另一个则是介绍在此基础上提出来的该文章特有的优化算法。

已知的优化算法:

平方距离的运用: 这一个部分比较容易理解,在我们计算欧氏距离的适合我们需要计算一个平方根,为了方便计算以及后面的优化算法的理解,我们将不使用这个平方根。去掉这个平方根,直接保留平方形式也不会影响距离的排列顺序(平方根不会改变原来值的比较关系)。

Early Abandoning(及早停止):这里将原文里的三个小节揉在一起介绍,因为它们互相之间关联性很强。个人也认为,理解这个新算法的一大核心就是理解Early Abandoning的核心理念,所以这部分的重要性不言而喻。首先,在大多数相似度检索任务里面,设定一个易于计算的lower bound(下确界)来过滤一些不靠谱的candidate是一个重要的优化手段,可以省掉很多不必要的计算。比如我们有一个query Q,限制假设只有两个candidates, C1和C2,假设我们先计算出C1和Q的距离为d1,并且我们在计算了C2和Q的时候,只是检查了其中一部分点的距离就发现当前的距离和d2已经大于d1,这个时候我们就不用再继续计算剩下的C2的点了。这一点在实践中十分重要,甚至可以帮你省掉大部分的计算,因为相似的序列大抵相同,但不想死的序列则各有各的不同,如果运气好一开始就能找到相似的段落,很多从一开始就形状十分不相似的序列就可以被过滤掉。作者首先提出了对一个传统下确界 LB_{kim} 的优化,这个LB的原理是找到两个序列的最大值和最小值的距离来做下确界,看起来很粗糙却在一些场景中很有效。这个复杂度是O(n),来自于对极大值和极小值的寻找,而归一化后的数据甚至不需要去寻找极大极小值(因为归一化后数据被压缩在一个固定的区间),从而将复杂度变为了常数时间。另外一种下确界是 LB_{Keogh} , 这种下确界相比于上一种更为精确。限于篇幅,作者没有对其做详细叙述,而是介绍大家去阅读其他的文献来详细了解。在下由于时间限制并没有精力去阅读所有的文献,所以也只能大致描述下对LB_{Keogh}的理解。 这种LB可以看成计算出两个贴合在Q附近的轮廓U和L,U可以看作Q的上确界而L可以看作是Q的下确界。可以看下图得到一个直观认识:

总而言之,LB_{Keogh} 就是可以表达为{U,L}里面较小的那一个。

在理解了常用的LB之后我们来看一下ED算法里面怎样使用LB来进行Early abandoning。方法其实跟我之前的差不多,只不过由于这里欧式距离是一对一的算法,所以很简单。就假设你已经有一个通过和其它candidate比对计算出来的最小距离b(best-so-far)值,当你开始新的一轮Q和C的比较,如果当你计算了前面k(k<n, n = length of Q,C)个点之间的距离以后得到的和sk >= b,那你就已经可以得出结论C不可能是最好的candidate,并停止计算。因为距离都是整数,距离之和只会单调渐增下去,s(k+1) > = sk。

然而当我们对动态规划进行early abandoning的时候情况则有点不一样。这样个人的理解是这一点,由于动态规划是比较灵活的优化,可以把点对应到不同的位置,从而优化距离(平移)。因此,很可能前一部分点的距离和远小于整个序列加起来之后的距离和b(best-so-far),从而无法及早的停止。为此,作者特地设定了一种算法,使得不用完整计算每个点,也能提早发现一些DTW不太靠谱。方法很简单,假设从0点开始计算,一共有n个点需要计算。比如我们现在计算到了某一时刻k,k<n,得到距离和DTW(Q_{1:k}, C_{1:k}), 这时我们可以确定我们找到了k时刻的最优解(动态规划的每一个子任务都是最优解),如果我们再把当前剩下的LB值和当前的DTW值相加,我们就可以确立一个对于DTW(Qn, Cn)的lower bound。当这个相加的值,DTW(Q_{1:k}, C_{1:k}) + LB_{Keogh}(Q_{K+1:n}, C_{K+1:n}) 大于best-so-far值b的时候我们就可以停止计算。

新的优化算法:

Early Abandoning Z-Normalization: 这个部分的主要就是在计算LB_{Keogh}的时候顺便计算Z-normalization。 Z-normalization的公式就是: z = \frac{x - \mu}{\sigma}, 所以我们只要计算出平均值和标准差就可以了。 如果我们计算的LB能够abandon一些C,我们也能够省掉Normalization的计算(因为是并行进行的)。

首先是计算平均值和方差的公式

\mu = \frac{1}{m} \sum x_i^2 - \mu^2,     \sigma^2 = \frac{1}{m} \sum x_i^2 - \mu^2  这里variance的公式是原公式的一个变种,推导如下:

在这里,由于我们想要计算的是每一个m长度的子序列的平均值和标准差,而不是仍由长度m随着k(当前的时刻)扩展下去。所以我们通过计算两个序列的均值和方差来得出我们想要的值,这两个序列就分别是T1:k,T1:k-m。这两个序列的差就正好是中间的m个元素。我们也可以证明怎么计算得到这m个元素的均值和方差

我自己也手推了下部分公式便于理解。

另外附上算法:

#####TO DO

Reordering Early Abandoning: 之前我们举的关于及早停止的例子都是从左向右按顺序计算distance,那这样是不是最优的呢?其实不一定,这取决于数据的分布情况,比如说从左往右前n个数据的距离和sn 小于 从中间选取m个点(m<n)的距离和。那是不是从中间开始计算可以更早的判断出是否需要及早停止呢。下图有个更直观的阐释:

但是我们没有办法提前知道什么样的排序是最理想的,于是作者总结出了一个经验,平均而言,Query当中那些偏离均值位置较远的将会是最容易贡献大部分距离的点。作者也用实验验证了这一点。

Reversing the Query/Data Role in LB_keogh: 之前我们介绍LB_{Keogh}的时候说到,该LB是围绕Query计算的上下确界,将一个query给几何上包裹住。这么做的好处在于我们的计算只针对每一个query,相比于计算整个time series的所有子序列显然简单得多。但是作者这里提出,在一些情况下,由于对于query的LB会较为松散(比对于candidate计算的大一半),所以我们如果在某些情况下对candidate进行LB计算,可以过滤掉不少没必要的DTW,从而总得节省了计算这个LB的开销。

Cascading Lower Bounds: 这部分也是我觉得作者最聪明的一个trick,相比于用一个固定的LB来过滤所有不同的情况,作者使用了一种由宽到松的方式渐进的改变LB。比如说,在一开始,先用最简单计算但也相对宽松的LB_kim来过滤大部分一眼就能排除的candidate,当我们发现LB_kim表现不好的时候,又开始替换为更紧的LB_{Keogh}_EQ,在到最后使用LB_{Keogh}_EC。最后开始通过DTW early abandoning来排除。

四、背景、结果和总结

作者在这篇论文里反复的强调自己的模型拥有最快的速度,并且可以用在比现今发表的所有论文的数据集加起来还大的数据集上运行。终于到了验证这些加速算法是否管用的时候了。作者分别使用了四种不同的模型进行对比:简单的ED或者DTW模型,这种模型没有任何normalization,没有任何的加速算法;第二种是State of the art,这种最近提出来的最先进的算法,使用了普通的Z-normalization,及早停止和LB_keough.;第三种是作者的模型;第四种则是最快速的只是用mean和标准差的O(1)算法,其实就是你能够达到的对任意长度query进行search的理论最快的速度。

然后作者发现在较长的子序列搜索当中,作者的ED模型(UCR-ED)和DTW模型(UCR-DTW)的速度比打开时1:1.18,换句话说两个算法的速度基本持平,这和以往人们印象里面DTW是拖慢速度的根源的看法有很大不同。

作者还在不同的任务场景中使用了大量数据来进行挖掘,比如脑电图数据,DNA数据,手势识别数据。以及帮现有的data mining任务进行加速。都取得了显著的成功。

在论文的第六部分,作者对模型成功的原因进行了高度的总结。首先是为什么自己的DTW模型能够跑的比别人的ED模型还快呢,原因就在于他们的online normalization相比较于前置的单独normalization省了不少时间(至少O(n))。另外一个加速的关键则是之前提到过的cascading算法,渐次的使用更紧但是更计算代加昂贵的LB。由于大部分的不靠谱的candidate都被最简单的LBkim给清掉了(O(1))所以节省了很多时间,使得平均的计算量甚至低于O(n)。最后,作者讲了个挺重要的看法,即使是动态规划这样看似复杂的算法,只要能进行很好的加速手段,仍然是能让他超过当前很多最优模型的。

以上就是这次的阅读笔记了

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值