Saya ingin tahu apa perbedaan antara algoritma maju-mundur dan algoritma Viterbi untuk inferensi dalam model Markov tersembunyi (HMM).
Saya ingin tahu apa perbedaan antara algoritma maju-mundur dan algoritma Viterbi untuk inferensi dalam model Markov tersembunyi (HMM).
Jawaban:
Sedikit latar belakang pertama mungkin sedikit membersihkan segalanya.
Ketika berbicara tentang HMM (Hidden Markov Models) umumnya ada 3 masalah yang harus dipertimbangkan:
Masalah evaluasi
Masalah decoding
Masalah pelatihan
Singkatnya, Anda menggunakan algoritma Viterbi untuk masalah decoding dan Baum Welch / Forward-backward ketika Anda melatih model Anda pada serangkaian urutan.
Baum Welch bekerja dengan cara berikut.
Untuk setiap urutan dalam rangkaian pelatihan urutan.
Jika Anda membutuhkan deskripsi lengkap tentang persamaan untuk decoding Viterbi dan algoritma pelatihan, beri tahu saya dan saya dapat mengarahkan Anda ke arah yang benar.
Maju-Mundur memberikan probabilitas marjinal untuk setiap keadaan individu , Viterbi memberikan probabilitas urutan keadaan yang paling mungkin . Misalnya jika tugas HMM Anda adalah memprediksi cuaca cerah vs hujan untuk setiap hari, Maju Mundur akan memberi tahu Anda kemungkinannya menjadi "cerah" untuk setiap hari, Viterbi akan memberikan urutan yang paling mungkin dari hari-hari cerah / hujan, dan probabilitas urutan ini.
Saya menemukan dua slide berikut ini dari {2} menjadi sangat bagus untuk menempatkan algoritma maju-mundur dan Viterbi di antara semua algoritma khas lainnya yang digunakan dengan HMM:
Catatan:
Referensi:
Jawaban Morat salah pada satu titik: Baum-Welch adalah algoritma Expectation-Maximization, yang digunakan untuk melatih parameter HMM. Ini menggunakan algoritma maju-mundur selama setiap iterasi. Algoritma forward-backward benar-benar hanyalah kombinasi dari algoritma forward dan backward: satu forward pass, satu backward pass. Dengan sendirinya, algoritma maju-mundur tidak digunakan untuk melatih parameter HMM, tetapi hanya untuk perataan: menghitung kemungkinan marginal dari urutan negara.
https://en.wikipedia.org/wiki/Forward%E2%80%93backward_algorithm
@Yaroslav Bulatov punya jawaban yang tepat. Saya akan menambahkan satu contoh untuk memberi tahu perbedaan antara algoritma maju-mundur dan Viterbi.
Misalkan kita memiliki HMM ini (dari halaman Wikipedia HMM). Catatan, model sudah diberikan, jadi tidak ada pembelajaran dari tugas data di sini.
Misalkan data kami adalah urutan 4 panjang. (Walk, Shop, Walk, Clean)
. Dua algoritma akan memberikan hal yang berbeda.
Sunny
Rainy
Ini beberapa R
kode untuk demo
library(HMM)
# in education setting,
# hidden state: Rainy and Sunny
# observation: Walk, Shop, Clean
# state transition
P <- as.matrix(rbind(c(0.7,0.3),
c(0.4,0.6)))
# emission prob
R <- as.matrix(rbind(c(0.1, 0.4, 0.5),
c(0.6,0.3, 0.1)))
hmm = initHMM(States=c("Rainy","Sunny"),
Symbols=c("Walk","Shop", "Clean"),
startProbs=c(0.6,0.4),
transProbs=P,
emissionProbs=R)
hmm
obs=c("Walk","Shop","Walk", "Clean")
print(posterior(hmm,obs))
print(viterbi(hmm, obs))