Attualmente sto usando l'allenamento di Viterbi per un problema di segmentazione delle immagini. Volevo sapere quali sono i vantaggi / gli svantaggi dell'utilizzo dell'algoritmo Baum-Welch invece dell'allenamento di Viterbi.
Attualmente sto usando l'allenamento di Viterbi per un problema di segmentazione delle immagini. Volevo sapere quali sono i vantaggi / gli svantaggi dell'utilizzo dell'algoritmo Baum-Welch invece dell'allenamento di Viterbi.
Risposte:
L'algoritmo Baum-Welch e l'algoritmo di Viterbi calcolano cose diverse.
Se conosci le probabilità di transizione per la parte nascosta del tuo modello e le probabilità di emissione per le uscite visibili del tuo modello, l'algoritmo di Viterbi ti offre la più probabile sequenza completa di stati nascosti subordinata sia alle tue uscite che alle tue specifiche del modello.
L'algoritmo Baum-Welch offre sia le probabilità di transizione nascoste più probabili sia l'insieme più probabile di probabilità di emissione dati solo gli stati osservati del modello (e, di solito, un limite superiore al numero di stati nascosti). Ottieni anche i punti di massima probabilità "puntuale" negli stati nascosti, che è spesso leggermente diverso dalla singola sequenza nascosta che è nel complesso molto probabile.
Se conosci il tuo modello e desideri solo gli stati latenti, non c'è motivo di utilizzare l'algoritmo Baum-Welch. Se non conosci il tuo modello, non puoi utilizzare l'algoritmo di Viterbi.
Modificato per aggiungere: vedi il commento di Peter Smit; c'è qualche sovrapposizione / vaghezza nella nomenclatura. Qualche ricerca mi ha portato a un capitolo di Luis Javier Rodríguez e Ines Torres in "Pattern Recognition and Image Analysis" (ISBN 978-3-540-40217-6, pp 845-857) che discute della velocità contro i compromessi di precisione di i due algoritmi.
In breve, l'algoritmo Baum-Welch è essenzialmente l'algoritmo Expectation-Maximization (EM) applicato a un HMM; come un rigoroso algoritmo di tipo EM sei sicuro di convergere ad almeno un massimo locale, e quindi per problemi unimodali trova l'MLE. Richiede due passaggi sui dati per ogni passaggio, tuttavia, e la complessità diventa molto grande in termini di lunghezza dei dati e numero di campioni di addestramento. Tuttavia, si finisce con la piena possibilità condizionale per i parametri nascosti.
L'algoritmo di allenamento di Viterbi (al contrario di "algoritmo di Viterbi") si avvicina all'MLE per ottenere un guadagno di velocità a scapito dell'accuratezza. Segmenta i dati e quindi applica l'algoritmo di Viterbi (come ho capito) per ottenere la sequenza di stato più probabile nel segmento, quindi utilizza quella sequenza di stato molto probabilmente per rivalutare i parametri nascosti. Questo, a differenza dell'algoritmo Baum-Welch, non fornisce la piena possibilità condizionale dei parametri nascosti, e quindi finisce per ridurre l'accuratezza risparmiando tempo significativo (il capitolo riporta da 1 a 2 ordini di grandezza).
Avanti-indietro viene utilizzato quando si desidera contare "cose invisibili". Ad esempio, quando si utilizza EM per migliorare un modello tramite dati non supervisionati. Penso che il documento di Petrov sia un esempio. Nella tecnica a cui sto pensando, devi prima formare un modello con dati annotati con annotazioni abbastanza grossolane (ad esempio un tag per "Verbo"). Quindi dividi arbitrariamente la massa di probabilità per quello stato in due quantità leggermente diseguali e ti riqualifichi, correndo avanti e indietro per massimizzare la probabilità ridistribuendo la massa tra i due stati.