Apa perbedaan antara algoritma maju-mundur dan Viterbi?

44

Saya ingin tahu apa perbedaan antara algoritma maju-mundur dan algoritma Viterbi untuk inferensi dalam model Markov tersembunyi (HMM).

pengguna34790
sumber
2
Akankah deskripsi algortihms (di sini dan di sini ) menjawab pertanyaan Anda atau Anda mencari sesuatu yang lain? Apakah Anda bertanya-tanya kapan harus menggunakan algoritma yang mana? Mencari diskusi tentang kelebihan masing-masing?
MånsT

Jawaban:

65

Sedikit latar belakang pertama mungkin sedikit membersihkan segalanya.

Ketika berbicara tentang HMM (Hidden Markov Models) umumnya ada 3 masalah yang harus dipertimbangkan:

  1. Masalah evaluasi

    • Masalah evaluasi menjawab pertanyaan: berapakah probabilitas bahwa urutan simbol tertentu dihasilkan oleh model tertentu?
    • Untuk evaluasi kami menggunakan dua algoritma: algoritma maju atau algoritma mundur (JANGAN membingungkan mereka dengan algoritma maju-mundur).
  2. Masalah decoding

    • Masalah decoding menjawab pertanyaan: Diberikan urutan simbol (pengamatan Anda) dan model, apa urutan negara yang paling mungkin yang menghasilkan urutan.
    • Untuk decoding kami menggunakan algoritma Viterbi .
  3. Masalah pelatihan

    • Masalah pelatihan menjawab pertanyaan: Diberikan struktur model dan serangkaian urutan, temukan model yang paling cocok dengan data.
    • Untuk masalah ini kita dapat menggunakan 3 algoritma berikut:
      1. MLE (estimasi kemungkinan maksimum)
      2. Pelatihan Viterbi (JANGAN bingung dengan decoding Viterbi)
      3. Baum Welch = algoritma maju-mundur

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.

  1. Hitung probabilitas forward dengan algoritma forward
  2. Hitung probabilitas mundur dengan algoritma mundur
  3. Hitung kontribusi urutan saat ini untuk transisi model, hitung kontribusi urutan saat ini dengan probabilitas emisi model.
  4. Hitung parameter model baru (probabilitas mulai, probabilitas transisi, probabilitas emisi)
  5. Hitung kemungkinan log baru dari model
  6. Berhenti ketika perubahan dalam kemungkinan log lebih kecil dari ambang yang diberikan atau ketika jumlah iterasi maksimum dilewati.

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.

Morat
sumber
24

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.

Yaroslav Bulatov
sumber
15

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:

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Catatan:

  • x adalah emisi yang diamati, adalah parameter dari HMM.π
  • path = urutan emisi
  • decoding = inferensi
  • learning = training = estimasi parameter
  • Beberapa makalah (misalnya, {1}) mengklaim bahwa Baum-Welch sama dengan algoritma maju-mundur, tetapi saya setuju dengan Masterfool dan Wikipedia: Baum-Welch adalah algoritma maksimalisasi harapan yang menggunakan algoritma maju-mundur. Dua ilustrasi juga membedakan Baum-Welch dari algoritma maju-mundur.

Referensi:

Franck Dernoncourt
sumber
12

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

https://en.wikipedia.org/wiki/Baum%E2%80%93Welch_algorithm

Masterfool
sumber
2

@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.

masukkan deskripsi gambar di sini


Misalkan data kami adalah urutan 4 panjang. (Walk, Shop, Walk, Clean). Dua algoritma akan memberikan hal yang berbeda.

  • Algoritma forward backward akan memberikan probabilitas setiap status tersembunyi . Berikut ini sebuah contoh. Perhatikan, setiap kolom dalam tabel berjumlah hingga .1

masukkan deskripsi gambar di sini

  • Algoritme Viterbi akan memberikan urutan kondisi tersembunyi yang paling memungkinkan . Berikut ini sebuah contoh. Catatan, ada juga kemungkinan yang terkait dengan urutan keadaan tersembunyi ini. Urutan ini memiliki probabilitas maks. di atas semua urutan lainnya (misalnya, urutan dari semua ke semua ).24=16SunnyRainy

masukkan deskripsi gambar di sini


Ini beberapa Rkode 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))
Haitao Du
sumber