Bước tới nội dung

Mô hình Markov ẩn

Bách khoa toàn thư mở Wikipedia
(Đổi hướng từ Hidden Markov model)

Mô hình Markov ẩn (tiếng Anh là Hidden Markov Model - HMM) là mô hình thống kê trong đó hệ thống được mô hình hóa được cho là một quá trình Markov với các tham số không biết trước và nhiệm vụ là xác định các tham số ẩn từ các tham số quan sát được, dựa trên sự thừa nhận này. Các tham số của mô hình được rút ra sau đó có thể sử dụng để thực hiện các phân tích kế tiếp, ví dụ cho các ứng dụng nhận dạng mẫu.

Trong một mô hình Markov điển hình, trạng thái được quan sát trực tiếp bởi người quan sát, và vì vậy các xác suất chuyển tiếp trạng thái là các tham số duy nhất. Mô hình Markov ẩn thêm vào các đầu ra: mỗi trạng thái có xác suất phân bổ trên các biểu hiện đầu ra có thể. Vì vậy, nhìn vào dãy của các biểu hiện được sinh ra bởi HMM không trực tiếp chỉ ra dãy các trạng thái.

Đây là một mô hình toán thống kê có ứng dụng rộng rãi trong Tin sinh học.

Các chuyển tiếp trạng thái trong mô hình Markov ẩn

[sửa | sửa mã nguồn]
Ví dụ mô hình Markov.
- x — Các trạng thái trong mô hình Markov
- a — Các xác suất chuyển tiếp
- b — Các xác suất đầu ra
- y — Các dữ liệu quan sát

Sự tiến hóa của mô hình Markov

[sửa | sửa mã nguồn]

Biểu đồ(Markov) trên đây làm nổi bật các chuyển tiếp trạng thái của mô hình Markov ẩn. Nó cũng có ích để biểu diễn rõ ràng sự tiến hóa của mô hình theo thời gian, với các trạng thái tại các thời điểm khác nhau t1t2 được biểu diễn bằng các tham biến khác nhau, x(t1) và x(t2).

Sự tiến hóa theo thời gian của mô hình Markov ẩn
Sự tiến hóa theo thời gian của mô hình Markov ẩn

Trong biểu đồ này, nó được hiểu rằng thời gian chia cắt ra (x(t), y(t)) mở rộng tới các thời gian trước và sau đó như một sự cần thiết. Thông thường lát cắt sớm nhất là thời gian t=0 hay t=1.

Sử dụng các mô hình Markov

[sửa | sửa mã nguồn]

Có ba vấn đề cơ bản để giải quyết bằng HMM:

  • Cung cấp cho mô hình các tham số, tính xác suất của dãy đầu ra cụ thể. Giải bằng thuật toán tiến trước (thuật toán tham lam).
  • Cung cấp cho mô hình các tham số, tìm dãy các trạng thái (ẩn) có khả năng lớn nhất mà có thể sinh ra dãy đầu ra đã cung cấp. Giải bằng thuật toán Viterbi.
  • Cung cấp dãy đầu ra, tìm tập hợp có khả năng nhất của chuyển tiếp trạng thái và các xác suất đầu ra. Giải bằng thuật toán Baum-Welch.

Ví dụ cụ thể

[sửa | sửa mã nguồn]

Giả sử tôi có một người bạn sống ở rất xa. Hàng ngày chúng tôi gọi điện thoại cho nhau và anh ta kể cho tôi nghe anh ta đã làm gì trong ngày. Người bạn tôi chỉ có 3 công việc mà anh thích làm là 1) đi dạo, 2) đi chợ và 3) dọn phòng. Hiển nhiên là sự lựa chọn phải làm gì thì phụ thuộc trực tiếp vào thời tiết hôm đấy thế nào. Như vậy, tôi không nhận được thông tin cụ thể về thời tiết nơi anh bạn tôi sống nhưng tôi lại biết về xu hướng chung. Dựa vào lời kể của công việc hàng ngày của anh ta, tôi có thể đoán về thời tiết hôm đó.

Như vậy, thời tiết được vận hành như một chuỗi Markov cụ thể. Có 2 trạng thái thời tiết, "Mưa" và "Nắng", nhưng tôi không quan sát trực tiếp, do đó, chúng là ẩn đối với tôi. Vào mỗi ngày, anh bạn tôi sẽ làm một trong các việc sau phụ thuộc vào thời tiết hôm đó là "đi dạo", "đi chợ" và "dọn phòng". Vì anh bạn tôi đã tường thuật lại hoạt động của mình, đó là các dữ liệu quan sát. Toàn bộ hệ thống này là một mô hình Markov ẩn (HMM).

Tôi biết được xu hướng thời tiết nói chung và tôi cũng biết bạn tôi thường thích làm gì. Nói cách khác, các thông số của HMM đã biết. Thực tế, chúng ta có thể mô tả điều này bằng ngôn ngữ lập trình Python:


trạng thái = ('Mưa', 'Nắng')

dữ liệu quan sát = ('đi dạo', 'đi chợ', 'dọn phòng')

khả_năng_ban_đầu = {'Mưa': 0.6, 'Nắng': 0.4}

khả_năng_chuyển_dịch = {
   'Mưa' : {'Mưa': 0.7, 'Nắng': 0.3},
   'Nắn' : {'Mưa': 0.4, 'Nắng': 0.6},
   }

khả_năng_loại_bỏ = {
   'Mưa' : {'đi dạo': 0.1, 'đi chợ': 0.4, 'dọn phòng': 0.5},
   'Nắng' : {'đi dạo': 0.6, 'đi chợ': 0.3, 'dọn phòng': 0.1},
   }

Trong đoạn câu lệnh trên, khả_năng_ban_đầu cho thấy tôi không chắc về trạng thái HMM khi người bạn đầu tiên gọi điện cho tôi (tất cả cái tôi biết là trời có vẻ mưa). khả_năng_chuyển_dịch cho thấy những thay đổi về thời tiết trong chuỗi Markov. Trong ví dụ này, chỉ có 30% khả năng ngày mai trời sẽ nắng nếu hôm nay trời mưa. Khả_năng_loại_bỏ cho thấy anh bạn thích làm những việc gì mỗi ngày. Nếu trời mưa thì có đến 50% khả năng anh bạn này sẽ dọn phòng, trong khi trời nắng thì 60% khả năng anh ta sẽ đi dạo.

Ví dụ này được xem xét tỉ mỉ hơn trong trang thuật toán Viterbi

Các ứng dụng

[sửa | sửa mã nguồn]

Tham khảo

[sửa | sửa mã nguồn]

Tham khảo

[sửa | sửa mã nguồn]

Liên kết ngoài

[sửa | sửa mã nguồn]