HMM

Traduzione e Integrazione delle Lezioni a cura di Sandro Gallo

Home Sequence Matching Episode Mining


Una catena di Markov è una tripla (Q, {p(p=S)}, A) dove:

  1. Q = {1, 2, ..., k} è una catena finita di stati (eventi). Ogni stato è un simbolo ottenuto da un alfabeto image not found.
  2. p = rappresenta l'insieme delle probabilità iniziali.
  3. A è l'insieme delle probabilità di transizione denotato con image not found per ogni s, t in Q tale che
    image not found
Considereremo processi con memoria 1, quindi dato un processo random
image not found
il valore di image not found dipenderà solo da image not found.
Cioè:
image not found
Quindi la probabilità di una sequenza image not found è data da:
image not found
Nelle catene di Markov c'è una corrispondenza biunivoca tra i simboli emessi dall'automa e gli stati corrispondenti.
Negli HMM gli stati sono nascosti, quindi l'osservatore guarderà solo alla sequenza di simboli senza conoscere la corrispondenza con gli stati.
Dato un alfabeto di simboli image not found e un insieme di stati S = {1, 2, ..., k}, un modello di Markov nascosto è definito come:
  1. Probabilità di Transizione tra due stati qualsiasi:
    image not found
  2. Probabilità iniziali:
    image not found
    tali che
    image not found
  3. Probabilità di emissione di un simbolo dato uno stato:
    image not found
    ed è tale che:
    bi(o1) + bi(o2) + ... + bi(ok) = 1.
Dato un HMM, ci sono tre basilari problemi che devono essere risolti affinchè il modello sia utile per applicazioni reali:
  1. Evaluation:
    dato un modello M e una sequenza di osservazione X, trovare la probabilità che la sequenza X sia stata prodotta dal modello M, cioè P(X|M).
  2. Decoding:
    dato un HMM M e una sequenza di osservazione X, trovare la sequenza PI di stati nascosti che massimizzi la P(X, P | M).
  3. Learning:
    dato un HMM M con probabilità di emissione/transizione non note, e una sequenza X, trovare i parametri di M, cioè bi(o) e aij che massimizzino la P(X|M).
Diamo, quindi, una soluzione ad ogni singolo problema:
  1. Soluzione al problema 1:
    Una soluzione rozza consiste nel calcolare tutti i possibili cammini, cioè fare una somma su ogni sequenza di stati delle probabilità di ottenere una determinata sequenza, cioè
    image not found
    Per evitare la somma che coinvolge un numero di cammini esponenziale, introduciamo una variabile forward
    image not found
    la cui definizione ricorsiva è la seguente:
    1. Caso Base:
      image not found
    2. Passo Induttivo:
      image not found
    La complessità dell'algoritmo è O(k2n), e l'algoritmo è il seguente:
    INPUT: M, X
    OUTPUT: p
    for i = 1 ...k do
    image not found;
    endfor;
    for t = 1 ... n-1 do
    for j = 1 ... k do
    sum = 0;
    for i =1 ... k do
    image not found;
    endfor;
    image not found;
    endfor;
    endfor;
    p = 0;
    for i = 1 ... k do
    image not found;
    endfor;
  2. Il problema del decoding si risolve in maniera analoga definendo la variabile:
    image not found
    La definizione ricorsiva di V è:
    image not found
    L'algoritmo di Viterbi ha complessità temporale O(k2n), complessità spaziale O(kn) e il suo pseudo-codice è il seguente:
    INPUT: M, X
    OUTPUT: p
    for i = 1 ...k do
    image not found;
    endfor;
    for t = 1 ... n-1 do
    for j = 1 ... k do
    max = 0;
    for i =1 ... k do
    if( Vt(i)*a(i,j) > max ) do
    max = Vt(i) * a(i,j);
    phit(j) = i;
    endif;
    endfor;
    Vt+1(j) = max * bj(xt+1);
    endfor;
    endfor;
    p = 0;
    for i = 1 ... k do
    if( Vt+1(i) > p ) do
    p = Vt+1(i);
    phit(n) = i;
    endif;
    endfor;
    P = retrievePath(phi);

  3. Prima di risolvere il terzo problema introduciamo la variabile che indica la probabilità backward definita come:
    image not found
    cioè la sequenza di osservazioni parziali dallo stato t+1 allo stato T. La derivazione della probabilità backward è la seguente:
    1. Caso Base:
      image not found
    2. Passo Induttivo:
      image not found
    Il passo d'inizializzazione arbitrariamente pone image not found a 1 per ogni i. Il passo 2) mostra che per essere nello stato Sj al tempo t e per rappresentare la sequenza di osservazione dal tempo t+1 in avanti, si devono considerare tutti i possibili stati al tempo t+1 che rappresentano la transizione dallo stato Si allo stato Sj (il termine aij), così come l'osservazione Ot+1 nello stato j (il termine bj(Ot+1) ), e quindi rappresentare la rimanente sequenza di osservazione parziale dallo stato j ( il termine bt+1(j) ).
    L'algoritmo per calcolare la variabile backward è il seguente:
    INPUT: M, X
    OUTPUT: p
    for i = 1 ...k do
    image not found;
    endfor;
    for t = n-1 ... 1 do
    for i = 1 ... k do
    sum = 0;
    for j =1 ... k do
    image not found;
    endfor;
    image not found;
    endfor;
    endfor;
    p = 0;
    for i = 1 ... k do
    image not found;
    endfor;

    L'algoritmo per il calcolo di backward ha complessità O(k2n), dove k è il numero di stati e n è la lunghezza della stringa.Trovare una soluzione al terzo problema è opera quanto mai complessa, perchè si tratta di trovare i parametri del modello tali che la probabilità che una particolare sequenza X sia stata generata da esso.
    Quindi si tratta di addestrare un HMM a riconoscere un particolare pattern. Non esiste però un modo ottimale per stimare i parametri
    image not found .
    Prima di introdurre l'algoritmo di Baum-Welch, che è un metodo E-M, diamo alcune definizioni di variabili che questo metodo usa.
    Sia
    image not found
    la variabile che indica la probabilità di essere nello stato i al tempo t e nello stato j al tempo t+1, data la sequenza di osservazione X, cioè:
    image not found
    Definiamo, ora, la variabile gt(i) come la probabilità di essere nello stato i al tempo t, data la sequenza X, cioè:
    image not found
    Quindi le nuove matrici di transizione ed emissione saranno date da:
    image not found
    I passi della procedura di Baum-Welch sono:
    1. Inizializza le matrici di transizione ed emissione in maniera random.
    2. Calcola image not found, forward.
    3. Calcola image not found, backward.
    4. Calcola A, E usando image not found.
    5. Calcola i nuovi parametri image not found
    6. Calcola il nuovo log-likelihood image not found, che è il logaritmo della probabilità. Infatti
      image not found
      che è computazionalmente più agevole da calcolare rispetto ai prodotti.
    7. Itera fino a quando il log(P) non cambia molto rispetto al passo precedente.
    Questa procedura porta a trovare massimi locali, che non sempre sono il valore corretto, perchè la superfice di ottimizzazione potrebbe essere molto complessa. La complessità dell'algoritmo di Baum-Welch è O(k2n)*#iterazioni.

Home Sequence Matching Episode Mining