原帖在这里,这篇是我的阅读笔记,非原创。
目录
- 面临的问题
- DTW算法简介
- DTW要去解决的问题
- DTW存在的问题
- 总结
面临的问题
当数据在时间线上不对齐的时候,使用传统的匹配方法,是无法使用传统的全局匹配度量法的。
DTW算法简介
两个人分别说了同一个单词,但是由于语速、语气、语调等等各不相同,会导致采样得到的数据无法对齐。但是两段语音采样的第一个采样值和最后一个采样值肯定是两两对应的。
给出两个序列:
Warping通常采用动态规划算法。为了对齐这两个序列,我们需要构造一个n x m的矩阵网格,矩阵元素(i, j)表示qi和cj两个点的距离d(qi, cj),一般采用欧式距离,d(qi, cj)= (qi-cj)2(也可以理解为失真度)。每一个矩阵元素(i, j)表示点qi和cj的对齐。
DP(dynamic programming)算法可以归结为寻找一条通过此网格中若干格点的路径,路径通过的格点即为两个序列进行计算的对齐的点。
有三个性质:
1)边界条件:w1=(1, 1)和wK=(m, n)。两个人分别说了同一个单词,但是由于语速、语气、语调等等各不相同,会导致采样得到的数据无法对齐。但是两段语音采样的第一个采样值和最后一个采样值肯定是两两对应的。因此所选的路径必定是从左下角出发,在右上角结束。
2)连续性:如果wk-1= (a', b'),那么对于路径的下一个点wk=(a, b)需要满足 (a-a') <=1和 (b-b') <=1。也就是不可能跨过某个点去匹配,只能和自己相邻的点对齐。这样可以保证Q和C中的每个坐标都在W中出现。
3)单调性:如果wk-1= (a', b'),那么对于路径的下一个点wk=(a, b)需要满足0<=(a-a’)和0<= (b-b’)。这限制W上面的点必须是随着时间单调进行的。以保证图B中的虚线不会相交。
由连续性和单调性可知,每次格点(i, j)前进方向只有三种:(i+1, j),(i, j+1) 或 (i+1, j+1)。我们的目的是使得下面的规整代价最小的路径:
分母中的K主要是用来对不同的长度的规整路径做补偿。
这里我们定义一个累加距离(cumulative distances)。从(0, 0)点开始匹配这两个序列Q和C,每到一个点,之前所有的点计算的距离都会累加。到达终点(n, m)后,这个累积距离就是我们上面说的最后的总的距离,也就是序列Q和C的相似度。
示例:
对于两个序列:
X:3,5,6,7,7,1
Y:3,6,6,7,8,1,1
有距离矩阵:
X和Y的距离矩阵:
X/Y | 3 | 6 | 6 | 7 | 8 | 1 | 1 |
---|---|---|---|---|---|---|---|
3 | 0 | 3 | 3 | 4 | 5 | 2 | 2 |
5 | 2 | 1 | 1 | 2 | 3 | 4 | 4 |
6 | 3 | 0 | 0 | 1 | 2 | 5 | 5 |
7 | 4 | 1 | 1 | 0 | 1 | 6 | 6 |
7 | 4 | 1 | 1 | 0 | 1 | 6 | 6 |
1 | 2 | 5 | 5 | 6 | 7 | 0 | 0 |
然后根据距离矩阵生成1损失矩阵(Cost Matrix)或者叫累积距离矩阵 McMc,其计算方法如下:
第一行第一列元素为 MM 的第一行第一列元素,在这里就是0;
其他位置的元素 (Mc(i,j)Mc(i,j))的值则需要逐步计算,具体值的计算方法为 Mc(i,j)=Min(Mc(i−1,j−1),Mc(i−1,j),Mc(i,j−1))+M(i,j)Mc(i,j)=Min(Mc(i−1,j−1),Mc(i−1,j),Mc(i,j−1))+M(i,j),得到的McMc如下:
X/Y | 3 | 6 | 6 | 7 | 8 | 1 | 1 |
---|---|---|---|---|---|---|---|
3 | 0 | 3 | 6 | 10 | 15 | 17 | 19 |
5 | 2 | 1 | 2 | 4 | 7 | 11 | 15 |
6 | 5 | 1 | 1 | 2 | 4 | 9 | 14 |
7 | 9 | 2 | 2 | 1 | 2 | 8 | 14 |
7 | 13 | 3 | 3 | 1 | 2 | 8 | 14 |
1 | 15 | 8 | 8 | 7 | 8 | 2 | 2 |
DTW要去解决的问题
DTW就是要去解决,普通的欧氏距离,对不对齐的两个序列无法进行相似度对比的问题。解决的方法就是动态规划,但是并没有生成更加多余的点,而是进行了复制。
DTW存在的问题
DTW实质上是通过对轨迹点的复制实现的对轨迹局部的拉伸或者缩放,下图展示地非常清楚:
DTW通过迭代的方式计算轨迹之间的距离(找到图4 b所示的最佳的轨迹),是一个经典的动态规划问题,其算法复杂度是O(m × n),依旧很高。后期必然需要相应的修建策略才能达到好的效果。
虽然没有使用映射,但是由于使用了重复,最终的结果仍然不是严格的metric,无法使用metric的方法!(DTW “loosely” satisfies the triangle inequality. It appears that this observation is not true in general, as on average nearly 30% of all the triplets do not satisfy the triangle inequality.)
“复制“其实就是在重复使用某些点。以此实现了对local time shifting的处理。
没有阈值限制,其最终目的只有找到最好的路径,但是此路径的总距离大小可能会很大。假如不对离群点进行处理,此算法依旧将会对离群点、异常点很敏感。
算法需要第一个点和最后一个点是对应的。
错误示例:
(1)没有设置阈值
此处出现了特定的local time shifting,会导致T2和T3明明是一条轨迹,但是最终出现的结果会是T1和T3的相似度要比T1和T2差很多。而且最终的结果是绝对的,即得到的只有一个绝对的数字,但从这个数字上是无法进一步消除这个误差的。
(2)直接使用的是原有的轨迹点,重复使用,且不会跳过任何一个点,因此对噪声点的抑制并不好。
总结:
DTW方法是欧氏距离方法的改进,只改进了其不能处理local time shifting的问题。没有引入任何阈值参数,因此对时间上的偏移(噪声和离群点)的抑制并不好,且对时间上的偏移的适应性也不好。
优点:使用动态规划的思想,实现了对某些点的重复使用,确保重复使用的点达成的路径最优的,从而较为高效地解决了数据不对齐的问题。
缺点:还是无法处理离群点、异常点,对于噪声的抑制没有进行处理。虽然能够处理local time shifting,但是对时间上的偏移做的也不好。算法也不是metric类型的。