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?
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
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ó? –
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