Quiero saber cuáles son las diferencias entre el algoritmo de avance y retroceso y el algoritmo de Viterbi para inferencia en modelos ocultos de Markov (HMM).
Quiero saber cuáles son las diferencias entre el algoritmo de avance y retroceso y el algoritmo de Viterbi para inferencia en modelos ocultos de Markov (HMM).
Respuestas:
Un poco de historia primero tal vez aclara un poco las cosas.
Cuando se habla de HMM (modelos ocultos de Markov) generalmente hay 3 problemas a considerar:
Problema de evaluación
Problema de decodificación
Problema de entrenamiento
Para resumir, utiliza el algoritmo de Viterbi para el problema de decodificación y Baum Welch / Forward-backward cuando entrena su modelo en un conjunto de secuencias.
Baum Welch funciona de la siguiente manera.
Para cada secuencia en el conjunto de secuencias de entrenamiento.
Si necesita una descripción completa de las ecuaciones para la decodificación de Viterbi y el algoritmo de entrenamiento, hágamelo saber y puedo orientarlo en la dirección correcta.
Adelante-Atrás da probabilidad marginal para cada estado individual , Viterbi da probabilidad de la secuencia más probable de estados . Por ejemplo, si su tarea de HMM es predecir el clima soleado y lluvioso para cada día, adelante hacia atrás le diría la probabilidad de que esté "soleado" para cada día, Viterbi le daría la secuencia más probable de días soleados / lluviosos, y el probabilidad de esta secuencia.
Encuentro que estas dos diapositivas siguientes de {2} son realmente buenas para ubicar los algoritmos de Viterbi hacia adelante y hacia atrás entre todos los otros algoritmos típicos utilizados con HMM:
Notas:
Referencias
La respuesta de Morat es falsa en un punto: Baum-Welch es un algoritmo de maximización de expectativas, utilizado para entrenar los parámetros de un HMM. Se utiliza el algoritmo de avance-retroceso durante cada iteración. El algoritmo hacia adelante y hacia atrás realmente es solo una combinación de los algoritmos hacia adelante y hacia atrás: un pase hacia adelante, un paso hacia atrás. Por sí solo, el algoritmo hacia adelante y hacia atrás no se usa para entrenar los parámetros de un HMM, sino solo para suavizar: calcular las probabilidades marginales de una secuencia de estados.
https://en.wikipedia.org/wiki/Forward%E2%80%93backward_algorithm
@Yaroslav Bulatov tuvo una respuesta precisa. Añadiría un ejemplo para contar las diferencias entre los algoritmos de avance-retroceso y Viterbi.
Supongamos que tenemos un this HMM (de la página Wikipedia HMM). Tenga en cuenta que el modelo ya está dado, por lo que no hay aprendizaje de la tarea de datos aquí.
Supongamos que nuestros datos son una secuencia de longitud 4. (Walk, Shop, Walk, Clean)
. Dos algoritmos darán cosas diferentes.
Sunny
Rainy
Aquí hay un R
código para la demostración
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))