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 如下:

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

發佈了35 篇原創文章 · 獲贊 6 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章