Voglio sapere quali sono le differenze tra l' algoritmo avanti-indietro e l' algoritmo di Viterbi per l'inferenza nei modelli nascosti di Markov (HMM).
Voglio sapere quali sono le differenze tra l' algoritmo avanti-indietro e l' algoritmo di Viterbi per l'inferenza nei modelli nascosti di Markov (HMM).
Risposte:
Prima un po 'di sfondo forse chiarisce un po' le cose.
Quando si parla di HMM (Hidden Markov Models) ci sono generalmente 3 problemi da considerare:
Problema di valutazione
Problema di decodifica
Problema di allenamento
Per riassumere, si utilizza l'algoritmo di Viterbi per il problema di decodifica e Baum Welch / Forward-backward quando si allena il modello su una serie di sequenze.
Baum Welch funziona nel modo seguente.
Per ogni sequenza nel set di sequenze di allenamento.
Se hai bisogno di una descrizione completa delle equazioni per la decodifica di Viterbi e l'algoritmo di allenamento fammelo sapere e posso indicarti la giusta direzione.
Avanti-Indietro offre probabilità marginali per ogni singolo stato , Viterbi fornisce probabilità della sequenza di stati più probabile . Ad esempio, se il tuo compito HMM è di prevedere il tempo soleggiato o piovoso per ogni giorno, Forward Backward ti dirà la probabilità che sia "soleggiato" per ogni giorno, Viterbi darebbe la sequenza più probabile di giorni di sole / pioggia e probabilità di questa sequenza.
Trovo che queste due diapositive seguenti da {2} siano davvero buone per collocare gli algoritmi avanti-indietro e Viterbi tra tutti gli altri algoritmi tipici usati con HMM:
Gli appunti:
Riferimenti:
La risposta di Morat è falsa su un punto: Baum-Welch è un algoritmo Expectation-Maximization, utilizzato per addestrare i parametri di un HMM. Esso utilizza l'algoritmo avanti-indietro durante ogni iterazione. L'algoritmo avanti-indietro è in realtà solo una combinazione degli algoritmi avanti e indietro: un passaggio in avanti, un passaggio all'indietro. Di per sé, l'algoritmo avanti-indietro non viene utilizzato per l'addestramento dei parametri di un HMM, ma solo per il livellamento: calcolare le probabilità marginali di una sequenza di stati.
https://en.wikipedia.org/wiki/Forward%E2%80%93backward_algorithm
@Yaroslav Bulatov ha avuto una risposta precisa. Vorrei aggiungere un esempio per raccontare le differenze tra algoritmi avanti-indietro e algoritmi di Viterbi.
Supponiamo di avere questo HMM (dalla pagina HMM di Wikipedia). Si noti che il modello è già stato fornito, quindi non è possibile apprendere dall'attività dati qui.
Supponiamo che i nostri dati siano una sequenza di lunghezza 4. (Walk, Shop, Walk, Clean)
. Due algoritmi daranno cose diverse.
Sunny
Rainy
Ecco un po 'di R
codice per la 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))