Dynamic Time Warping (DTW) thường được dùng để tính khoảng cách giữa hai chuỗi thời gian. Một chuỗi thời gian chính là danh sách những mẫu thu từ một tín hiệu nào đó được sắp xếp theo thời gian lấy mẫu.
Một cách đơn giản để tính khoảng cách so khớp (matching distance) của hai chuỗi thời gian chính là lấy mẫu lại (resample) một chuỗi theo chuỗi kia, và so sánh từng cặp mẫu song song của hai chuỗi. Hạn chế của phương pháp này chính là nó không đưa ra được một kết quả trực quan do việc so sánh từng cặp song song.
Hình 2.1-31: Sự khác biệt trong cách khớp các mẫu khi so sánh 2 chuỗi thời gian.
Dynamic Time Warping giải quyết vấn đề này bằng cách tìm ra các cách khớp những mẫu của hai chuỗi thời gian sao cho tối ưu nhất.
Hình 2.1-32: Cách khớp các mẫu của 2 chuỗi thời gian theo DTW.
Vấn đề DTW được phát biểu như sau: cho hai chuỗi thời gian X, Y có độ dài lần lượt là |X| và |Y|:
X = x1, x2, …, x|X| Y = y1, y2, …, y|Y|
Xây dựng một warp-path W
W = w1, w2,…, wK max(|X|,|Y|) ≤ K < |X| + |Y|
Với K là độ dài của warp path và wk = (wki, wkj) = (i, j) trong đó i là chỉ số từ chuỗi thời gian X, j là chỉ số từ chuỗi Y.
Warp path phải bắt đầu từđiểm đầu tiên của mỗi chuỗi thời gian và kết thúc tại chỉ số cuối mỗi chuỗi tức là w1 = (1,1) và wK = (|X|,|Y|). Điều này bảo đảm các chỉ số từ hai chuỗi thời gian được sử dụng trong warp path. Ngoài ra có một điều kiện ràng buộc thêm đó là i và j phải tăng đơn điệu trên warp path (nên ta thấy rằng ở Hình 2.1-32 bên trên không có hai đoạn thẳng nào chéo nhau).
wk = (i, j), wk+1 = (i’, j’) i ≤ i’ ≤ i+1, j ≤ j’ ≤ j+1
Warp path tối ưu chính là warp path mà khoảng cách cực tiểu, khoảng cách của một warp path W được tính như sau:
[VGE¤I = [VGE¥¦N, ¥¦§I
¦¨ ¦3
Dist(W) là khoảng cách (thông thường ta dùng khoảng cách Euclidean) của warp path W, Dist(wki, wkj) là khoảng cách giữa hai điểm thứ i và j của hai chuỗi.
Thuật toán DTW
Phương pháp tiếp cận dùng quy hoạch động được sử dụng để tìm warp path có khoảng cách cực tiểu. Thay vì cố gắng giải quyết toàn bộ vấn đề một lúc thì nghiệm của những bài toán con (sub-problem) được dùng tìm kiếm nghiệm cho bài toán lớn hơn, và lặp cho đến khi tìm được nghiệm cho cả bài toán (chuỗi thời gian). Ma trận chi phí D|X|x|Y| được xây dựng sao cho D(i, j) chính là khoảng cách warp path cực tiểu của hai chuỗi thời gian X’ = x1, …, xi và Y’= y1,.., yj. Lúc đó giá trị tại D(|X|,|Y|) sẽ là khoảng cách warp path cực tiểu của hai chuỗi thời gian X và Y.
Hình 2.1-33: Ma trận chi phí D với khoảng cách warp path cực tiểu từ D(1,1) đến D(|X|,|Y|).
Nếu warp path đi qua ô D(i, j) trong ma trận chi phí, có nghĩa là điểm thứ i trong chuỗi thời gian X được canh khớp với điểm thứ j của chuỗi thời gian Y. Vì một điểm có thể ánh xạ với nhiều điểm của chuỗi thời gian khác nên hai chuỗi thời gian không nhất thiết phải cùng độ dài. Nếu hai chuỗi thời gian X và Y giống nhau thì warp path chính là một đường chéo góc.
Khoảng cách DTW giữa hai chuỗi thời gian X và Y được tính theo phương pháp quy hoạch động như sau:
E[, I = min © E[, − 1IE[ − 1, I
E[ − 1, − 1Iª + Z[VGE[, I
Warp path phải đi qua một trong 3 ô trên, có nghĩa là giá trị một ô trong ma trận chi phí có thểđược tính dựa trên giá trị nhỏ nhất của một ô khác như công thức trên. Vì thế thứ tự điền giá trị vào các ô này rất quan trọng. Bảng ma trận chi phí tính giá trị từng cột từ dưới lên, từ trái qua phải giống như Hình 2.1-34 sau:
Hình 2.1-34: Thứ tự mà bảng ma trận chi phí được điền vào
Sau khi điền hết các ô của ma trận chi phí, để tìm warp path từ D(1,1) đến D(|X|, |Y|) ta tiến hành dò vết ngược từ D(|X|, |Y|) tìm giá trị nhỏ nhất trong các ô, trái dưới, dưới- trái, lặp tiếp tục từ ô nhỏ nhất đó đến khi về D(1,1). Dễ thấy độ phức tạp ở đây là O(N2) vì vậy ta cần tìm cách tăng tốc thuật toán DTW bằng quy hoạch động.
Những phương pháp giúp tăng tốc DTW thường chia làm 3 loại chính sau: + Ràng buộc (Constraint): Giới hạn số ô được tính trong ma trận chi phí. + Data abstraction: Thực hiện DTW trên biểu diễn rút gọn của dữ liệu.
+ Indexing: Dùng những hàm biên dưới để giảm thiểu số lần DTW phải chạy trong việc phân loại và gom nhóm các chuỗi thời gian.
Sử dụng Constraint để tăng tốc DTW được sử dụng rất rộng rãi. Hai constraint phổ biến là Sakoe-Chuba Band và Itakura Parallelogram như hình dưới đây:
Hình 2.1-35: Hai constraint Sakoe-Chuba Band (trái) và Itakura Parallelogram (phải)
Các ô xám chính là các ô được xét đến, độ rộng của vùng xám (window) chính là một tham sốđầu vào. Warp path tối ưu phải nằm trong vùng xám.
Thuật toán tóm tắt như sau:
int DTWDistance(char s[1..n], char t[1..m], int w) { declare int DTW[0..n,0..m]
declare int i, j, cost for i := 1 to m DTW[0,i] := infinity for i := 1 to n DTW[i,0] := infinity DTW[0,0] := 0 for i := 1 to n
for j := max(1,i-w) to min(m,j+w)
cost:= d(s[i],t[j])
DTW[i,j] := cost + minimum(DTW[i-1, j ], DTW[ i ,j-1],
DTW[i-1,j-1]) return DTW[n,m]