DTW 讲解

网上看到的非常好的DTW算法的讲解,转载记录一下。

DTW Dynamic Time Warping 的简称,中文可以翻译成「动态时间扭曲」或是「动态时间规整」,这是一套根基与「动态规划」(DynamicProgramming,简称 DP)的方法,可以有效地将搜寻比对的时间大幅降低。

DTW 的目标就是要找出两个向量之间的最短距离。一般而言,对于两个 n 维空间中的向量 x  y,它们之间的距离可以定义为两点之间的直线距离,称为欧基里得距离(Euclidean Distance):

dist(xy)= |x - y|2

但是如果向量的长度不同,那它们之间的距离,就无法使用上述的数学式来计算。一般而言,假设这两个向量的元素位置都是代表时间,由于我们必须容忍在时间轴的偏差,因此我们并不知道两个向量的元素对应关系,因此我们必须靠着一套有效的运算方法,才可以找到最佳的对应关系。

假设有两个向量 t  r,长度分別是 m n,那么 DTW 的目标,就是要找到一組路径 (p1,q1), (p2, q2), ..., (pk, qk)},使得经由上述路径的「点对点」对应距离和 Si=1k t(pi) -r(qi)为最小,而且,此路径必须滿足下列条件:

  • 端点关系:(p1, q1) = (1, 1), (pk, qk) = (m, n)。此端点关系代表这是「头对头、尾对尾」的比对。
  • 局部关系:假设最佳路径上任一点可以表示成 (i, j),那么其前一点路径只有三种可能:(i-1, j), (i, j-1), (i-1, j-1)。此局部关系定义了路径的连续性,而且也规定了 t 的任一个元素至少对应一个 r 的元素,反之亦然。

但是,我们要如何很快地找到这条最佳路径呢?我们可以根据 DP 的原理,来将 DTW 描述成下列四大步骤:

  1. 目标函数之定义:定义 D(i, j) 是 t(1:i) 和 r(1:j) 之间的 DTW 距离,对应的最佳路径是由 (1, 1) 走到 (i, j)。
  2. 目标函数之遞迴关系:D(i, j) = ∣t(i) - r(j)∣ + min{D(i-1, j), D(i-1, j-1), D(i, j-1)}
  3. 端点条件:D(1, 1) = ∣t(1) - r(1)∣
  4. 最后答案:D(m, n)

在上述的方法描述中,我们是有点滥用数学符号,严格地说,D(i, j) 应该表示成为 D(t(1:i), r(1:j)),才能准确地描述D(?,?)  tr 的关系。另外,D()具有下列对称的性质:D(t(1:i), r(1:j)) = D(r(1:j), t(1:i))

在实际运算时,我们通常事先建立一个矩阵 D,其维度为 m×n,先根据端点条件来填入 D(1, 1),然后再根据遞迴关系,逐行或逐列算出 D(i, j) 的值,最后就可以得到我们所要的答案 D(m, n)

如果我们除了要知道 DTW 距离之外,也希望把相关最佳路径找出来,此时在计算遞迴关系式时,就要记录每一个最小点所对应的路径,直到我们求出 D(m, n),在反覆回推前一个最佳路径的位置,如此一再反覆,才能算出整个最佳路径,这个步骤在 DP 里面称为 Back Tracking

有上述方法可得知,DTW 的计算複雜度大約是 m×n,比用暴力法是有效率多了。

此外,在上述方法中,我们定义的子路径是由 (1, 1) 走到 (i, j),我们也可以反向操作,定义子路径是由 (i, j) 走到 (m, n),此时对应的 DTW 解法可以描述成下列四大步骤:

  1. 目标函数:定义 D(i, j) 是 t(i:m) 和 r(j:n) 之间的 DTW 距离,对应的最佳路径是由 (i, j) 走到 (m, n)。
  2. 遞迴关系:D(i, j) = ∣t(i) - r(j)∣ + min{D(i+1, j), D(i+1, j+1), D(i, j+1)}
  3. 端点条件:D(m, n) = ∣t(m) - r(n)∣
  4. 最后答案:D(1, 1)

有这个方法所得到的結果,应该是和前述的方法完全相同。

另一个常用到的 local path constraint,是 27°-45°-63°,如下圖所示:

此种local path constraint,會有下列特色:

  • 會「跳点」,因此若有一点雜訊,最佳的 DTW 路径将會跳掉此点。
  • 如果最佳路径是对应于總距离的最小值,那么最佳路径會盡量走 27 或 63 度,以使对应到的点数降低。

如果我们要求是「头对头、尾对尾」的比对,那么由上述的 local path constraint,我们就可以推断出 global path constraint,如下所示:

換句話说,若要使DTW 的比对有意义,那么两者长度的比值必须介于 0.5 2.0 之间,否則我们就不可能找出一条合法的路径。如果我们事先能够定义 global path constraint,那么在進行DTW 计算时,就可以省掉很多不需要计算的部分。

如果我们要求的是「头对头、尾自由」的比对,例如用在「哼唱選歌」的「從头比对」时,那么对应的 global path constraint 如下:

这时候可以省略的计算,就會變少。

如果我们要求的是「头尾都自由」的比对时,对应的 global path constraint 如下:

很明顯的,可以省略的计算,就更少了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值