Trong các hệ thống được mô hình hóa bằng Hidden Markov Model (HMM), chúng ta thường đối mặt với một lớp thông tin bị che khuất. Để hiểu rõ lớp ẩn này thông qua dữ liệu quan sát, thuật toán Forward-Backward đóng vai trò là công cụ tính toán hiệu quả nhất, giúp giải quyết bài toán định lượng và làm mịn dữ liệu.
Trước khi đi vào thuật toán, ta cần xác định bộ ba tham số cấu thành nên một mô hình HMM:
Ma trận chuyển trạng thái ẩn: , với . Quản lý xác suất di chuyển giữa các trạng thái ẩn.
Ma trận xác suất phát xạ: , với . Quy định xác suất xuất hiện một quan sát khi hệ thống đang ở một trạng thái ẩn nhất định.
Vector xác suất khởi tạo: , với . Xác định trạng thái bắt đầu của hệ thống tại .
Cho mô hình và chuỗi quan sát . Thuật toán Forward-Backward giúp tính toán:
Đánh giá (Evaluation): Tổng xác suất chuỗi xảy ra: . Nghĩa là để trả lời cho câu hỏi: "Khả năng mô hình này tạo ra chuỗi dữ liệu mà tôi đang thấy là bao nhiêu?". Đây là việc tính tổng xác suất của tất cả các kịch bản ẩn có thể xảy ra. Ví dụ: Bạn có 2 mô hình tiếng Việt và tiếng Anh. Khi nhận được một chuỗi âm thanh, mô hình nào cho kết quả "Đánh giá" (xác suất ) cao hơn thì chuỗi âm thanh đó thuộc về ngôn ngữ đó.
Làm mịn (Smoothing): Xác suất hệ thống nằm ở trạng thái tại thời điểm bất kỳ, khi đã biết toàn bộ dữ liệu quan sát. Nghĩa là để trả lời cho câu hỏi: "Tại thời điểm trong quá khứ, hệ thống thực sự ở trạng thái nào? Bản chất của việc làm mịn khác với dự báo (chỉ dùng dữ liệu quá khứ đến hiện tại ), làm mịn dùng toàn bộ dữ liệu (cả trước và sau ) để hiệu chỉnh lại ước lượng tại . Tại sao gọi là "Làm mịn"? Vì dữ liệu quan sát thường có nhiễu. Bằng cách nhìn vào các quan sát ở tương lai (), ta có thể loại bỏ các suy luận sai lầm tại do nhiễu gây ra.
Xét bài toán dự báo tâm trạng đồng nghiệp: (Trạng thái ẩn: Vui - , Buồn - ) qua hành động (Quan sát: Cười - , Khóc - ).
Chuỗi quan sát thực tế: Giả sử bạn quan sát thấy đồng nghiệp trong 2 ngày liên tiếp đều Cười ()
Chúng ta cần tính:
Yêu cầu 1 (Đánh giá): Tính xác suất để chuỗi quan sát "Cười - Cười" này xảy ra dựa trên mô hình tâm trạng đã thiết lập.
Yêu cầu 2 (Làm mịn): Dựa trên toàn bộ chuỗi quan sát 2 ngày, hãy xác định xác suất thực sự người đó Vui () vào ngày đầu tiên.
Mục tiêu: Tính xác suất chuỗi quan sát xảy ra và tại thời điểm , hệ thống đang dừng ở trạng thái ẩn .
Ý tưởng cốt lõi: Thay vì tính toán độc lập từng kịch bản (đường đi) của trạng thái ẩn, Pha Forward sử dụng chiến lược quy hoạch động. Tại mỗi bước thời gian , nó gom tất cả các khả năng từ quá khứ lại thành một giá trị duy nhất (gọi là biến Forward). Giá trị này sau đó được "đẩy" sang bước .
Nói cách khác, xác suất ở hiện tại là tổng hợp của: (Xác suất đã tích lũy ở quá khứ) (Xác suất chuyển trạng thái) (Xác suất phát ra quan sát hiện tại).
Giải thích ký hiệu
Biến Forward : là xác suất chúng ta nhìn thấy chuỗi quan sát từ đầu đến thời điểm , và tại đúng thời điểm đó, hệ thống đang dừng ở trạng thái ẩn .
: Trạng thái ẩn tại thời điểm là .
: Các quan sát đã thu thập được từ bắt đầu đến hiện tại.
: Bộ tham số mô hình :
Xác suất trạng thái đầu tiên là .
: Xác suất chuyển từ ẩn sang ẩn .
: Xác suất trạng thái ẩn phát ra biểu hiện .
Quy trình tính toán
Bước 1: Khởi tạo - Tại . Ta tính xác suất cho từng trạng thái ẩn tại thời điểm bắt đầu.
Giải thích: (Khả năng bắt đầu tại trạng thái ) (Khả năng trạng thái đó phát ra quan sát đầu tiên ).
Bước 2: Đệ quy - Từ
Để tính được (xác suất tại bước tiếp theo), ta cần thu thập toàn bộ "di sản" từ tất cả các trạng thái ở bước trước đó.
Phần Dự đoán: Tổng hợp xác suất từ mọi trạng thái trước, nhân với xác suất chuyển sang trạng thái hiện tại.
Phần Đối chiếu: Sau khi dự đoán xong, ta nhân với xác suất trạng thái đó thực sự phát ra quan sát mà ta đang thấy.
Bước 3: Kết thúc (Termination) - Tại
Tổng xác suất của toàn bộ chuỗi quan sát chính là tổng các tại bước cuối cùng:
Dựa trên ví dụ tâm trạng (Vui/Buồn) và hành động (Cười/Khóc):
(Vui: 0.8, Buồn: 0.2)
: Nếu hôm nay vui thì xác suất mai vui là 60% và buồn 40%. Nếu hôm nay buồn thì xác suất mai vui là 30% và vẫn buồn là 70%.
: Nếu đang vui, xác suất cười là 90%, xác suất khóc là 10%. Nếu đang buồn, xác xuất cười là 20%, khóc là 80%.
Yêu cầu: Tính cho chuỗi 2 ngày đều Cười ().
Tại thời điểm bắt đầu, xác suất chỉ phụ thuộc vào vector khởi tạo và khả năng phát xạ của trạng thái đó ra quan sát đầu tiên ().
: Hôm nay khởi đầu vui (0.8) và người đó cười (0.9).
: Hôm nay khởi đầu buồn (0.2) và người đó cười (0.2), với các định nghĩa về và như trên
Để tính xác suất cho ngày thứ 2, ta phải xét mọi con đường từ ngày 1 dẫn đến ngày 2.
Công thức tổng quát:
Tính : (Khả năng ngày 2 người đó Vui và Cười)
Đến từ ngày 1 Vui:
Đến từ ngày 1 Buồn:
Tổng xác suất ẩn:
Nhân với xác suất phát xạ (Ngày 2 Cười):
Tính : (Khả năng ngày 2 người đó Buồn và Cười)
Đến từ ngày 1 Vui:
Đến từ ngày 1 Buồn:
Tổng xác suất ẩn:
Nhân với xác suất phát xạ (Ngày 2 Cười):
Tổng xác suất của toàn bộ chuỗi quan sát chính là tổng của tất cả các biến Forward tại bước thời gian cuối cùng ().
Kết luận: Với mô hình này, xác suất để bạn bắt gặp chuỗi hành động "Cười - Cười" trong 2 ngày liên tiếp là 46.28%. Đây chính là kết quả của bài toán Đánh giá.
Mục tiêu: Tính xác suất – xác suất sẽ nhìn thấy phần còn lại của chuỗi quan sát từ thời điểm đến hết, với điều kiện hệ thống đang ở trạng thái ẩn tại thời điểm .
Ý tưởng cốt lõi: Pha Backward bắt đầu từ điểm kết thúc của chuỗi thời gian và đi ngược về quá khứ. Nó trả lời câu hỏi: "Nếu bây giờ tôi đang ở trạng thái này, thì khả năng tôi sẽ thấy những quan sát sắp tới là bao nhiêu?" thông qua các bước:
Chuyển đi: Thử nhảy sang tất cả các trạng thái có thể có vào ngày mai ().
Phát xạ: Tại mỗi trạng thái đó, "phát" ra quan sát thực tế của ngày mai ().
Kế thừa: Nhân với niềm tin về tương lai xa hơn nữa mà trạng thái đó đang nắm giữ ().
Trong khi Forward cộng dồn mọi thứ đã qua, Backward chuẩn bị sẵn xác suất cho những gì chưa đến. Khi kết hợp cả hai tại cùng một thời điểm , ta có cái nhìn toàn diện: Quá khứ dẫn đến (Forward) Tương lai bắt đầu từ (Backward).
Giải thích ký hiệu
Nếu là những gì đã tích lũy, thì là một xác suất có điều kiện (Conditional Probability) dội ngược từ tương lai. Nó đại diện cho kịch bản:
"Giả sử tại thời điểm , tôi đang ở trạng thái ẩn , thì xác suất để tôi nhìn thấy toàn bộ chuỗi quan sát còn lại (từ đến hết) là bao nhiêu?"
: Giả thiết hệ thống đang ở trạng thái tại bước .
: Chuỗi các quan sát xảy ra sau thời điểm .
Lưu ý: không bao gồm quan sát tại chính thời điểm ().
Quy trình tính toán
Bước 1: Khởi tạo - Tại thời điểm cuối cùng
Tại bước cuối cùng, phía sau không còn quan sát nào nữa. Theo quy ước toán học để làm điểm tựa cho các bước nhân ngược phía sau:
Bước 2: Đệ quy ngược (Induction) - Từ về
Để tính , ta thu thập thông tin từ tất cả các trạng thái ở bước kế tiếp:
Tiếp tục với ví dụ: Vui () / Buồn () và chuỗi quan sát Cười () - Cười ().
Thông số giữ nguyên:
;
Bước 1: Khởi tạo tại (ngày 2)
Tại thời điểm cuối cùng của chuỗi, không còn quan sát nào ở tương lai để dự báo. Do đó, theo định nghĩa toán học, tất cả các trạng thái đều có xác suất kết thúc bằng 1.
Bước 2: Bước lùi đệ quy (Induction) về (ngày 1)
Ta tính xác suất để từ trạng thái hiện tại (Ngày 1), hệ thống chuyển sang ngày 2, phát ra quan sát ngày 2 () và tiếp tục chuỗi tương lai.
Công thức tổng quát:
Tính : (Nếu ngày 1 Vui, khả năng ngày 2 thấy "Cười" là bao nhiêu?)
Chuyển sang ngày 2 Vui:
Chuyển sang ngày 2 Buồn:
Tổng:
Tính : (Nếu ngày 1 Buồn, khả năng ngày 2 thấy "Cười" là bao nhiêu?)
Chuyển sang ngày 2 Vui:
Chuyển sang ngày 2 Buồn:
Tổng:
Tại sao chúng ta cần Pha Backward?
Nếu chỉ dừng lại ở bài toán Đánh giá (xác suất toàn chuỗi), pha Forward là đủ. Tuy nhiên, pha Backward là bắt buộc cho bài toán Làm mịn:
Giả sử ta muốn biết xác suất người đó thực sự Vui vào Ngày 1.
Theo Forward (): Ta chỉ biết thông tin "Ngày 1 Cười" .
Kết hợp Backward (): Ta có thêm thông tin "Ngày 2 cũng Cười". Vì xác suất lùi từ trạng thái Vui () cao hơn hẳn trạng thái Buồn (), thông tin tương lai này "ủng hộ" giả thuyết người đó đang Vui ở ngày 1.
Kết quả sau khi làm mịn:
Kết luận: Pha Backward cho phép thuật toán "nhìn lại quá khứ bằng lăng kính của tương lai". Điều này cực kỳ quan trọng trong các bài toán như nhận dạng tiếng nói hoặc phân tích gen, nơi mà một tín hiệu tại thời điểm chỉ có thể được hiểu đúng nếu ta biết những tín hiệu xảy ra sau đó.
Thuật toán Forward-Backward là minh chứng cho việc tối ưu hóa tính toán thông qua lập trình động. Thay vì bùng nổ tổ hợp các nhánh xác suất, ta quản lý thông tin qua hai luồng thời gian đối nghịch. Đây là tiền đề không thể thiếu cho thuật toán Baum-Welch để huấn luyện các hệ thống máy học phức tạp dựa trên dữ liệu chuỗi thời gian.
No comments yet. Be the first to comment!