2012-11-15 34 views
5

Tôi đang triển khai thuật toán chuyển tiếp cho HMM để tính xác suất của một HMM đã cho phát ra chuỗi quan sát đã cho. Tôi muốn thuật toán của tôi trở nên mạnh mẽ để tràn. Tôi không thể làm việc trong không gian log vì thuật toán chuyển tiếp yêu cầu phép nhân và bổ sung các xác suất. Cách tốt nhất để tránh chảy tràn là gì?Lưu lượng trong thuật toán chuyển tiếp cho HMM

Tôi đã đọc một số nguồn về điều này nhưng gợi ý tốt nhất tôi nhận được là mở rộng khả năng ở từng bước Section 6 Here. Đến cuối thuật toán, bạn sẽ không bị bỏ sót với xác suất chính xác mà bạn muốn (của chuỗi quan sát). Ngoài ra, trừ khi tôi nhầm, nếu bạn mở rộng xác suất theo từng bước như được đề xuất trong tham chiếu ở trên, bạn không thể so sánh ý nghĩa xác suất của chuỗi quan sát đã cho từ hai HMM khác nhau (để tìm ra một là nhiều khả năng có đầu ra trình tự). Bất kỳ đề xuất?

Trả lời

8

Trong phương trình 32 ở cuối tham chiếu, bạn nhân mỗi giá trị xác suất alpha_t (i) với C_t. Vì vậy, ở cuối bạn đã nhân xác suất cuối cùng của bạn bằng sản phẩm của tất cả các C_t. Bạn có thể theo dõi tất cả điều này bằng cách theo dõi tổng của nhật ký (C_t). Sau đó, ở cuối bạn có thể tìm ra log (alpha_t (i)) - SUM_ (j < = t) log (C_j) sẽ cho bạn xác suất log của alpha_t (i) cuối cùng hoặc log (SUM_t alpha_t (i)) - SUM_ (j < = t) nhật ký (C_j) sẽ cung cấp cho bạn xác suất nhật ký của toàn bộ chuỗi.

+0

Tuyệt vời - tôi thấy ngay bây giờ. Tôi nghĩ rằng các công trình, cảm ơn! – akobre01

+0

Tôi có thể hồi sinh người chết ở đây, nhưng bước cảm ứng chuyển tiếp, phụ thuộc vào 'i', trong ma trận lập trình động của bạn, bạn có' alpha [i] [t] 'ở' t + i * chiều dài của chuỗi thừa ' bước thứ hai, nhưng chưa có 'alpha [i + 1] [t]', làm cho nó không thể tính $ C_t $, hoặc bạn chỉ sử dụng thuật toán chuyển tiếp và ở mức cuối nó? –

+0

Tính toán tính toán alpha [i] [t + 1] (đối với tất cả các giá trị của i) sử dụng alpha [i] [t] (cho tất cả i) và các thông tin khác được tính cho thời gian t. Các giá trị alpha [i] [t] ở đây sẽ được thu nhỏ bởi C_t khi tràn là một lo lắng. Sau khi tính toán alpha [i] [t + 1] chúng ta có thể sử dụng các giá trị này để tính C_ {t + 1} và sau đó sử dụng giá trị đó để tính giá trị được chia tỷ lệ của alpha [i] [t + 1]. C_ {t + 1} là giá trị cuối cùng của các giá trị chưa được tính toán và không cần thiết cho đến khi nó được sử dụng để mở rộng các giá trị alpha. (Hãy nhớ rằng tôi thay đổi trong một vòng lặp bên trong, và t trong một vòng lặp bên ngoài). – mcdowella

Các vấn đề liên quan