Capitolo 3
3.1
Hidden Markov Model
Modelli probabilistici
Data la loro varietà e complessità le sequenze biologiche, siano esse proteiche, di DNA o
RNA, si prestano ad essere trattate con modelli probabilistici. Per una completa
introduzione a questo tipo di approccio si veda Durbin et al. (1998). Le sequenze biologiche
sono, infatti, stringhe di caratteri di un alfabeto di cardinalità finita (20, nel caso delle
proteine, 4 nel caso di sequenze di acidi nucleici). In una descrizione del tutto generale un
modello probabilistico M può essere visto come un oggetto capace di generare ciascuna
stringa s con probabilità P(s | M) che, per definizione, soddisfa alle usuali condizioni di
positività e normalizzazione:
0  P( s | M )  1
s P( s | M ) = 1
(3.1)
La distribuzione di tale probabilità, sullo spazio di tutte le sequenze generabili, determina la
specificità del modello: un ideale modello specifico per una data classe dovrebbe generare
tutte e sole le sequenze di tale classe con alta probabilità escludendo le altre.
L’uso pratico di modelli probabilistici nel campo della biologia computazionale richiede la
definizione operativa delle regole con cui calcolare il valore di P( s | M ) per ogni sequenza:
in questo senso un modello è un oggetto che associa ad ogni sequenza un numero reale.
Inoltre l’uso è limitato a quelle classi di modelli per cui sono disponibili algoritmi che
permettono l'addestramento dei parametri a partire da in insieme di sequenze di esempio.
Un modello probabilistico addestrato su una particolare classe di sequenze è, ad esempio, in
grado di cercare nel proteoma completo di un organismo le sequenze che più probabilmente
appartengono a tale classe. In questo senso è utilizzabile nei problemi di “data mining”,
come setaccio per selezionare le sequenze imparentate con quelle su cui il modello è stato
addestrato.
Un altro problema che i modelli probabilistici aiutano a risolvere è quello dell’attribuzione
di una sequenza s ad una classe, vale a dire la decisione, in presenza di più modelli
34
alternativi, di quale sia il più adatto a descriverla. Tale compito richiede la valutazione della
cosiddetta probabilità a posteriori P( M | s ) che tramite il teorema di Bayes può essere
espressa come:
P( s | M ) · P( M )
P( M | s ) =
P( s | M ) · P( M )
=
P( s )
M’ P( s | M’ ) · P( M’ )
(3.2)
Il problema dell'attribuzione richiede quindi una stima delle probabilità a priori dei vari
modelli M’, P(M’), nell’ipotesi che l’insieme dei modelli sia completo. Operativamente si
richiede una stima della frequenza di occorrenza delle sequenze in ognuna delle classi
descritte dai modelli M’. Una volta che sia stata stimata la probabilità a posteriori dei
modelli tramite l'eq. 3.2, il problema dell’attribuzione è risolto dalla scelta del modello a
probabilità massima.
Addestramento. Il problema dell’addestramento è quello di inferire i parametri  = {i }di
un modello M che meglio descrivono un insieme di dati D. La strategia più comune è quella
di massimizzare la cosiddetta “likelihood” dei parametri rispetto ai dati, cioè la probabilità
P(D|,M) vista come funzione di . Questo è noto come criterio della Massima Likelihood
(ML) ed è formalmente espresso come:
 ML = argmax P (D | , M)
dove 
ML
(3.3)
è l’insieme dei parametri ottimali per ML. Una importante proprietà dei
parametri così stimati è la consistenza: se l’insieme D è stato generato da un modello con
parametri  0, e se tale insieme è abbastanza abbondante, i parametri stimati per ML
tendono a coincidere con  0. Tale tipo di stima può però dare risultati insoddisfacenti
quando l’insieme dei dati è troppo scarso. In tali casi è possibile sfruttare ipotesi o
conoscenze sulla distribuzione a priori dei parametri, P( | M), stimando tramite il teorema
di Bayes la probabilità a posteriori dei parametri:
P( | D, M) =
P(D | , M ) · P( | M)
P(D | M)
(3.4)
35
La massimizzazione di tale probabilità dà origine alla cosiddetta stima per Massima
(probabilità) A Posteriori (MAP):
 MAP = argmax P (D | , M) · P ( | M)
3.2
(3.5)
Modelli di Markov
I modelli markoviani costituiscono una classe di modelli probabilistici molto semplici e
utili. In questi ogni elemento di una sequenza viene generato con una probabilità che
dipende solamente da un numero finito di elementi precedenti della sequenza. Tale numero
è detto ordine e determina il grado di approssimazione operato dal modello nel descrivere
l’universo delle sequenze. Formalmente in un modello markoviano di ordine n la
probabilità di generare il t-esimo carattere della sequenza s dipende dalla stringa
s t-n s t-n+1 ...s t-1, cosicchè i parametri del modello sono le variabili
a( -n  -n+1 .... -1  ) = P( |  -1 -2..... -n) ,
, -1, -2,.....,
-n
A
(3.6)
dove A è l’alfabeto dei caratteri che compongono la stringa con l’aggiunta di due elementi
speciali designati con INIZIO e FINE. Valgono naturalmente le condizioni:
0  a( -n  -n+1 .... -1  )  1
 a( -n  -n+1 .... -1  ) = 1
(3.7)
Un modello markoviano di ordine 0, in cui cioè la probabilità di generare un carattere
dipende esclusivamente dal carattere stesso, può descrivere solo la composizione globale di
un insieme di sequenze; un modello del primo ordine può invece trattare la statistica delle
coppie successive di caratteri, uno del secondo ordine le triplette, e così via, aumentando
con l’ordine del modello la quantità di informazione che questo può elaborare. A questo
corrisponde però anche l’aumento rapido del numero di parametri: se l’alfabeto consta di M
caratteri, il numero di parametri del modello è uguale al numero di combinazioni possibili
di n + 1 caratteri, cioè M n +1.
36
Stima dei parametri ML. La stima per Massima Likelihood dei parametri di un modello
markoviano consiste nella valutazione, a partire dall'insieme di addestramento, delle
frequenze di occorrenza di ognuno dei caratteri preceduto da ognuna delle possibili
combinazioni di n caratteri:
N (  -1 -2..... -n )
a( -n  -n+1 .... -1  ) = –––––––––––––––
N ( -1 -2..... -n )
(3.8)
dove con N () si intende il numero di sottostringhe  nell’insieme di addestramento.
L’aumento dell’ordine è perciò limitato dal numero di sequenze disponibili per
l’addestramento e dai problemi di conteggio statistico delle n-ple rare.
Modelli del primo ordine. I modelli di Markov non banali più semplici sono quelli del
primo ordine e possono essere descritti come un insieme di stati connessi dalle probabilità
di transizione aij tra gli stati i e j. Ognuno degli stati è associato univocamente ad un
carattere dell’alfabeto: un percorso tra gli stati genera perciò una sequenza.
In figura 3.1 è riportato un semplicissimo modello per la descrizione delle sequenze di
DNA. E’ costituito da quattro stati associati alle quattro basi e completamente connessi tra
loro e dai due stati INIZIO e FINE; ogni freccia rappresenta una probabilità di transizione.
G
C
FINE
INIZIO
A
T
Figura 3.1. Modello di Markov del 1° ordine per le sequenze di DNA
Modelli di ordine superiore. In generale un modello di ordine n su un alfabeto A è
equivalente ad un modello del primo ordine sull’alfabeto An di n-ple ordinate. Tale
equivalenza è possibile perché:
P(s t | s t-1 s t-2 ....s t-n ) = P(s t s t-1 s t-2 ....s t-n+1 | s t-1 s t-2 ....s t-n )
(3.9)
37
Consideriamo per semplicità un alfabeto di due caratteri: A = {a,b} ed un modello del
secondo ordine. Ogni sequenza di caratteri di A può essere tradotta in una sequenza di
caratteri di A  A; ad esempio:
a-a-b-b-a-b-a  aa-ab-bb-ba-ab-ba
Così il modello del secondo ordine può essere ricondotto al modello del primo ordine di
figura 3.2. In esso alcune transizioni sono vietate in quanto prive di senso nella grammatica
di generazione delle sequenze di A  A dalle sequenze di A.
A
AA
AB
BA
BB
B
Figura 3.2. Modelli di Markov del 1° e del 2° ordine per sequenze su un alfabeto di 2
caratteri. Il modello del 2° ordine (a destra) è ridotto a un modello del 1° ordine a 4 stati. Si
noti l'aumento del numero di parametri di transizione.
3.3
Hidden Markov Model
I modelli probabilistici più utilizzati per l'analisi delle sequenze biologiche sono gli Hidden
Markov Model (HMM). Questi modelli sono stati introdotti negli anni '70 e sono stati
estensivamente utilizzati nel campo della "speech-recognition" e della ricostruzione di
segnali. Si forniscono in questo capitolo gli elementi necessari allo sviluppo della parte
originale di questa tesi. Per un'introduzione completa rimando a Rabiner (1989) e Durbin et
al. (1998).
Gli HMM sono modelli probabilistici in cui le sequenze vengono generate da due processi
stocastici concomitanti. Il primo è costituito da un modello di Markov che, per quanto è
stato detto nel paragrafo precedente, possiamo in tutta generalità considerare del primo
ordine e che quindi possiamo rappresentare graficamente come un insieme di stati connessi
da frecce che simboleggiano le probabilità di transizione. Il secondo processo è l’emissione
38
da parte di ogni stato di un carattere di un alfabeto A secondo una distribuzione di
probabilità che dipende solo dallo stato. Una sequenza viene quindi generata da questo
processo in concomitanza ad un cammino tra gli stati del modello di Markov. Generalmente
solo la sequenza è osservabile, mentre il cammino che l’ha generata rimane nascosto. Gli
HMM consentono quindi di interpretare la sequenza osservabile come prodotto di un
processo markoviano soggiacente, che resta sconosciuto e da ciò deriva il nome dato a
questi modelli.
Definizione formale. Designando con s una generica sequenza e con  il cammino da cui è
stata generata, un HMM è costituito da:
 un insieme di N stati;
 un insieme di probabilità di transizione tra gli stati, {aij }, di cardinalità N2 :
aij = P( t = j |  t-1 = i);
(3.10)
 un insieme di probabilità di iniziare il processo di Markov dallo stato i, {a0i }, di
cardinalità N:
a0i = P( t = i |  t-1 = INIZIO);
(3.11)
 un insieme di probabilità di terminare il processo di Markov dopo lo stato i, {ai0 }, di
cardinalità N:
ai0 = P( t = FINE |  t-1 = i);
(3.12)
 un alfabeto A costiuito da M caratteri;
 un insieme di probabilità di emissione dei caratteri da parte di ogni stato, {ek (c)}, di
cardinalità M  N:
ek (c) = P(s t = c |  t = k).
(3.13)
Una sequenza viene generata secondo lo schema riportato in figura 3.3.
39
Dalle definizioni date è molto semplice, conoscendo una sequenza s di lunghezza L ed il
corrispondente cammino , calcolare la loro probabilità congiunta:
P(s,  | M) = a0  1
L
t =1 a
t  t+1
 e t (s t )
(3.14)
Scegli stato iniziale (1) secondo le probabilità a0i
t=1
Scegli il carattere s t nell’insieme C secondo le probabilità ei (c)
Scegli stato successivo secondo le probabilità ai j e ai0
No
t  t +1
Sì
Lo stato scelto è 0 ?
Fine
Figura 3.3. Schema di generazione di una sequenza tramite un HMM
3.4
I tre problemi fondamentali degli HMM
La teoria degli HMM si occupa di dare risposta a tre problemi principali che enuncerò in
questo paragrafo, mettendo in luce l’importanza applicativa di una loro soluzione. Nei
paragrafi successivi di questo capitolo sono descritte le strategie più utilizzate per la
risoluzione di tali problemi, accennando a due algoritmi di importanza più generale da cui
esse derivano: la programmazione dinamica e l’algoritmo Expectation Maximisation.
40
Problema 1: la valutazione. Poiché i cammini associati alle sequenze sono tipicamente
nascosti, si pone il problema di calcolare la probabilità di emissione della sola sequenza s
da parte del modello M: P(s | M). Utilizzando tale probabilità, come è già stato accennato, è
possibile affrontare problemi di “data mining” o di classificazione di sequenze.
Formalmente:
P(s | M) =  P(s,  | M)
(3.15)
Quindi la soluzione del problema richiederebbe, di principio, la valutazione su tutti i
possibili cammini della probabilità congiunta tramite l’eq. 3.14.
Complessità computazionale. Dato un modello a N stati completamente connessi e data
una sequenza di lunghezza L, i possibili cammini che possono averla generata sono NL .
Tale numero rende impossibile l’applicazione della formula 3.15 per il calcolo di P(s | M),
se non per piccole sequenze. Il problema della valutazione consiste quindi nella ricerca di
un algoritmo efficiente, il cui tempo di esecuzione cresca solo polinomialmente con la
lunghezza della sequenza. Senza tale algoritmo gli HMM resterebbero oggetti matematici
di nessuna utilità pratica. Nel paragrafo 3.4 è descritta la tecnica di programmazione
dinamica che permette di formulare algoritmi adatti.
Problema 2: la decodifica. Il secondo problema consiste nello svelare la parte nascosta del
modello, cioè nel cercare, data una sequenza, il cammino che l’ha generata. Chiaramente,
tranne che in casi particolari, questo compito non può essere affrontato che in termini
probabilistici. Quello che viene generalmente cercato è infatti il cammino che più
probabilmente può aver generato una data sequenza, il cosiddetto cammino di Viterbi,
designato con *:
* = argmax P(  | s, M)
(3.16)
Anche in questo caso la definizione richiederebbe la valutazione dell’eq. 3.14 su tutti i
cammini ed anche per questo problema la programmazione dinamica ha permesso di
elaborare un algoritmo efficiente.
41
Semantica e sintassi. La soluzione al problema della decodifica è la base per poter
progettare predittori a HMM. Infatti, se ad ogni stato k di un modello viene attribuita
un’etichetta l(k), viene cioè assegnata una semantica, la decodifica del cammino di Viterbi
associato ad una sequenza si traduce in una associazione tra la sequenza ed una stringa di
etichette (Krogh, 1994). In questo modo un HMM è in grado di realizzare un mapping.
Nella figura 3.4 è riportato un semplice modello per la predizione della struttura secondaria
di una sequenza amminoacidica. Ogni stato è associato ad un motivo di struttura secondaria
e il cammino di Viterbi associa una predizione ad ogni residuo di una sequenza. In questo
modello è evidente una proprietà utilissima degli HMM. Nel modello è incorporata, per
mezzo delle transizioni permesse, una sintassi che riflette conoscenze note a priori e che
pone forti vincoli alle predizioni: nessuna -elica predetta può essere più corta di 4 residui,
nessuno -strand più corto di 2.


c




Figura 3.4: HMM per la predizione della struttura secondaria che contiene i vincoli
sulla lunghezza minima di -eliche e -strand.
Altre decodifiche. La decodifica di Viterbi non è l’unica possibile ed anzi non è nemmeno
giustificata quando il cammino di Viterbi ha una probabilità molto vicina a quella di altri
cammini. In questi casi si può utilizzare la decodifica a posteriori in cui il cammino viene
ad essere costituito dalla successione degli stati  t così definita:
 t = argmaxk P( t = k | s, M)
(3.17)
42
Il cammino a posteriori è generato dagli stati che posizione per posizione hanno probabilità
massima. Tuttavia, poiché il calcolo è indipendente per ogni posizione, il cammino
massimo a posteriori nel suo complesso può contenere transizioni vietate, non rispettando
così la sintassi del modello.
Un’altra decodifica molto simile e spesso utilizzata è quella che associa ad ogni posizione
l’etichetta con massima probabilità t :
t = argmax
l
t
=P( = k | s, M)
k
(3.18)
Anche in questo caso non è assicurato il rispetto della sintassi.
Problema 3: l’addestramento. Il terzo problema e quello di ricavare l’insieme dei
parametri di un modello M, indicati nel loro complesso col simbolo  = {aij , ek (c)}, che
meglio descrivono le sequenze di un insieme di addestramento D. La stima ML nel caso in
cui siano noti, assieme alle sequenze, i cammini che le hanno generate è molto semplice e si
riconduce, come nel caso dei modelli di Markov, al conteggio nell’insieme di coppie
sequenza-cammino dell’insieme di addestramento del numero di transizioni tra gli stati e di
emissioni di ogni carattere da parte di uno stato. Detti Aij il numero di transizioni tra gli
stati i e j e Ek (c) il numero di emissioni del carattere c da parte dello stato k, i parametri
ottimali per ML sono dati dalle formule:
Aij
aML
ij = ––––––––
j’ Aij’
(3.19)
Ek (c)
ML
ek (c) = ––––––––––
c’ Ek (c’)
(3.20)
Nel caso non siano invece noti i cammini, non sono disponibili forme chiuse per la stima
dei parametri ottimali. In via di principio, tutti gli algoritmi di ottimizzazione delle funzioni
continue possono essere applicati. Tuttavia un algoritmo iterativo, noto come Baum-Welch
è usualmente utilizzato. Questo è un caso particolare di un algoritmo più generale che
possiede una diretta interpretazione probabilistitica, noto come Expectation-Maximisation
per il quale si rimanda al paragrafo 3.6.
43
3.5
Algoritmi di programmazione dinamica applicati agli HMM
La soluzione a molti problemi di analisi di sequenze richiede una ricerca in uno spazio di
soluzioni possibili la cui dimensione aumenta esponenzialmente con l’accrescersi della
lunghezza della sequenza da elaborare. Tra questi abbiamo accennato alla ricerca
dell'allineamento ottimo tra due sequenze, alla valutazione delle probabilità di generazione
di una sequenza da parte di un HMM e alla ricerca del cammino di Viterbi. In alcuni casi
tali problemi possono essere decomposti in sottoproblemi più trattabili e concatenabili
ricorsivamente fino al raggiungimento della soluzione globale, in un tempo che cresce solo
polinomialmente con la lunghezza delle sequenze. Questo è reso possibile da una tecnica,
detta programmazione dinamica, i cui campi di applicazione in biologia computazionale
vanno dalla ricerca dell’allineamento ottimale tra due sequenze (Needleman e Wunsch,
1970; Smith e Waterman, 1981; Gotoh, 1982), alla ricostruzione delle sequenze di DNA a
partire dai frammenti sequenziati con procedure automatiche (Anson e Myers, 1997), alla
risoluzione dei problemi della valutazione e della decodifica nella teoria degli HMM, di cui
mi occupo nelle prossime sezioni.
Problema della valutazione: algoritmo Forward.
Il problema della valutazione, lo
ricordiamo, consiste nel calcolare in maniera efficiente la probabilità di emissione di una
sequenza da parte di un modello M, P(s | M). Tale problema viene scomposto nel calcolo,
per ognuna delle L posizioni (t) della sequenza e per ognuno degli N stati (k), della quantità
fk (t) definita come la probabilità di generare l’osservazione parziale s1s2.....st terminando il
percorso nello stato k.:
fk (i) = P(s1s2.....st,  t = k | M)
(3.21)
Tale quantità può essere calcolata in modo ricorsivo, poiché:
P(s1s2...st, t = k | M) =
= l P(s1s2...st-1 ,  t -1 = l | M)  P( t = k |  t -1 = l)  P(st |  t = k)
(3.22)
Da questa uguaglianza si ricava che fk (t) possa essere calcolato ricorrendo ai valori fl (t-1)
corrispondenti alla posizione di sequenza precedente, moltiplicati per i valori di alk, ek (st).
44
Per sfruttare questa regola ricorsiva occorre definire una condizione di inizializzazione, che
deriva in modo naturale dal fatto che ogni sequenza deve iniziare dallo stato INIZIO,
indicato con il simbolo 0. Il problema della valutazione viene così risolto una volta che
siano note tutte le quantità fk (L) corrispondenti all'ultima posizione della sequenza:
P(s | M) = l P(s1s2...sL , L = l | M)  P(L+1 = FINE | L = l)
(3.23)
In questa si riconosce al secondo membro la somma di tutte le quantità fk (L) moltiplicate
per le corrispondenti probabilità di terminare il percorso dopo lo stato l.
Da quanto detto, si può schematizzare l’algoritmo per il calcolo di P(s| M) in tre passi:
 Inizializzazione (t=0):
f0 (0) = 1
fk (0) = 0 ,  k  0
(3.24)
 Ricorrenza (t= 1,2....L):
fk (t) = ek (st )  l fl (t-1)  al k
(3.25)
 Conclusione:
P(s| M) = l fl (L)  al 0
(3.26)
L’algoritmo è schematizzato in figura 3.5, nella quale viene rappresentata la matrice f e in
cui si vede come a definire ognuno dei suoi elementi concorrano tutti e soli gli elementi
corrispondenti alla posizione precedente della sequenza. Questo algoritmo è chiamato
Forward in quanto la regola di ricorrenza procede dal primo all’ultimo elemento della
sequenza.
La matrice f è composta da N  L elementi, ognuno dei quali richiede circa 2N+1 calcoli,
tra prodotti e somme. Quindi l’algoritmo forward richiede un tempo di esecuzione che
cresce solo linearmente con la lunghezza della sequenza e soddisfa perciò ai requisiti di
efficienza richiesti.
45
STATO
fi (1) ∙ aiB
P(s | M)
FINE
eB (s2)
fB (2)
B
A

INIZIO(0)
0
1
2
L
L+1
Posizione nella sequenza (ITERAZIONE)
Figura 3.5. Schema dell'algoritmo Forward. Ogni freccia ( ) rappresenta il prodotto
di un elemento della matrice per la corrispondente probabilità di transizione.
L'inizializzazione corrisponde a annullare tutti gli elementi in posizione 0, tranne quello
corrispondente allo stato INIZIO. La definizione di un elemento della matrice richiede
la somma di tutte le quantità associate alle frecce "entranti", provenienti dalle posizione
precedente della sequenza, ed il prodotto per la probabilità di emissione. L'iterazione
conclusiva (L+1) porta al calcolo di P(s | M).
Problema della valutazione: algoritmo Backward. Accanto al Forward, un altro
algoritmo è in grado di calcolare in maniera efficiente la probabilità P(s|M). Questo è detto
Backward in quanto la regola di ricorrenza che applica procede dal fondo della sequenza
fino all’inizio. La quantità che definisce i sottoproblemi in cui viene scomposto il problema
della valutazione è bk (t) definita come la probabilità di generare la sottosequenza terminale
st +1st +2....sL una volta che si sia visitato lo stato k.
bk (t) = P( st +1st +2....sL |  t = k, M)
(3.27)
La condizione di inizializzazione è data dalle probabilità di transizione allo stato FINE; la
ricorrenza deriva dalla formula:
P(st +1st +2....sL |  t = k, M) =
= l P( st +2st +3....sL |  t +1 = l, M)  P( t +1 = l |  t = k)  P(st +1 |  t +1 = l)
(3.28)
46
L’algoritmo Backward e quindi descritto dai tre passi seguenti:
 Inizializzazione (t = L):
bk (L) = ak0
k
(3.29)
 Ricorrenza (t = L-1, L-2.....1):
bk (t) = l bl (t+1)  akl  el (st +1)
(3.30)
 Conclusione:
P(s | M) = l bl (1)  a0l  el (s1 )
(3.31)
Analogamente al Forward, anche il tempo di esecuzione dell’algoritmo Backward cresce
linearmente con la lunghezza della sequenza.
Decodifica a posteriori. Il calcolo delle matrici f e b permette di effettuare quella che nel
corso del paragrafo precedente ho chiamato decodifica a posteriori. Questa richiede il
calcolo, per ogni stato, delle probabilità P(t = k | s, M):
P(s,  t = k | M) =
= P(s1s2....st ,  t = k | M)  P(st +1st +2....sL |  t = k, M) = fk (t)  bk (t)
(3.32)
Ne consegue che:
P( t = k | s, M) =
fk (t)  bk (t)
P(s | M)
(3.33)
Una volta calcolate queste quantità per ogni posizione t della sequenza e per ogni stato k, il
cammino a posteriori è ricostruito scegliendo, posizione per posizione, lo stato a probabilità
massima
Problema della decodifica: algoritmo di Viterbi. Anche il problema della ricerca del
cammino più probabile può essere efficientemente risolto con tecniche di programmazione
dinamica. Viene definita , per ogni posizione e per ogni stato, la variabile vk(t) come la
probabilità del cammino più probabile per generare la sottostringa iniziale s1s2....st,
terminando nello stato k. Tale cammino non può che derivare da uno degli N cammini più
47
probabili per la generazione della sottostringa precedente s1s2....st -1 , terminante ognuno in
uno stato l differente. Più precisamente:
vk (t) = maxl (vl (t-1)  P( t = k |  t –1= l )  P(st |  t = k))
(3.34)
Il passaggio tra lo stato l* che massimizza l’espressione 3.34 e lo stato k determina l’ultimo
passo del cammino ottimale per la generazione di s1s2....st e terminante in k. Quindi per
ricostruire il cammino, l* viene memorizzato in una variabile ptrk (t), detta puntatore. La
matrice dei puntatori permette, una volta calcolata tutta la matrice v, di ricostruire il
cammino di Viterbi *. L’inizializzazione è identica a quella dell’algoritmo Forward.
Quindi l’algoritmo di Viterbi consiste dei quattro passi seguenti:
 Inizializzazione (t=0):
v0 (0) = 1
vk (0) = 0 ,  k  0
(3.35)
 Ricorrenza (t= 1,2....L):
vk (t) = ek (st )  maxl (vl (t-1)  al k )
(3.36)
ptrk (t) = argmaxl (vl (t-1)  al k )
(3.37)
 Conclusione:

P(s, *| M) = maxl (vl (L)  al 0 )
(3.38)
*L = argmaxl (vl (L)  al 0 )
(3.39)
Ricostruzione (t = L–1, L–2,.....1):
* t -1 = ptr* t (t)
(3.40)
L’algoritmo è esemplificato nelle figure 3.6 A e B. Il calcolo della matrice v è del tutto
analogo a quello della matrice f dell’algoritmo Forward, con la sola sostituzione della
sommatoria con la funzione max. L’iterazione conclusiva, per definizione, permette il
calcolo della probabilità congiunta di sequenza e cammino per l’emissione sul cammino di
Viterbi. Accanto alla v viene costruita la matrice ptr, che permette di ricostruire a ritroso il
cammino di Viterbi, o meglio i cammini, giacché possono esisterne due o più, tutti aventi la
48
medesima probabilità(vedi figura 3.6B). Evidentemente anche l’algoritmo di Viterbi mette
in grado di risolvere efficientemente il problema della decodifica senza ricorrere al calcolo
esaustivo su tutti i cammini possibili.
STATO
vi (1) ∙ aiB
P(s, | M)
FINE
eB (s2)
vB (2)
B
A
MAX
INIZIO
0
1
2
L
L+1
Posizione nella sequenza (ITERAZIONE)
0
1
2
L
L–1
L+1
Posizione nella sequenza (ITERAZIONE)
STATO
FINE
B
A
INIZIO
Figura 3.6. Schema dell'algoritmo di Viterbi. (A) Ogni freccia (
) rappresenta il
prodotto di un elemento della matrice per la corrispondente probabilità di transizione.
La definizione di un elemento della matrice richiede la ricerca del massimo tra tutte le
quantità associate alle frecce "entranti" ed il prodotto di questo con la probabilità di
emissione. L'iterazione conclusiva (L+1) porta al calcolo di P(s, | M).
Le posizioni della matrice associate alle frecce "entranti" massime (colorate in rosso)
vengono memorizzate nella matrice dei puntatori indicati in (B) con frecce (
).
Seguendo i puntatori a partire dallo stati FINE si genera il cammino di Viterbi (colorato
in blu). Nel caso che da una posizione si dipartano più puntatori differenti, come in
figura, i cammini di Viterbi sono più di uno e tutti equiprobabili.
49
3.6
L’algoritmo di Expectation-Maximisation ed il problema dell’addestramento
L’algoritmo di Expectation-Maximisation (EM) è l’algoritmo più efficiente per la stima dei
parametri ottimali (nel senso di Massima Likelihood) di un modello probabilistico quando i
dati a disposizione sono solo una rappresentazione incompleta del processo stocastico
considerato (Dempster et al., 1977). Poiché lo scopo finale di questo paragrafo è
l’applicazione agli HMM, designerò con s la sequenza delle osservazioni e con  i dati
mancanti del processo. Tuttavia il campo di applicabilità dell’algoritmo EM è più ampio
rispetto agli HMM, in cui ovviamente le sequenze sono i dati osservabili e i cammini i dati
nascosti. La prossima sezione di questo paragrafo è dedicata all’enunciazione del teorema
di Jensen sulle funzioni convesse, utile per la successiva dimostrazione dei risultati che
stanno alla base dell’algoritmo EM.
Teorema di Jensen sulle funzioni convesse. Una funzione f(x) è detta convessa se:
f(ax0 + (1-a)x1 )  af(x0) + (1-a)f(x1)  0  a  1
(3.41)
cioè se scelti due punti x0 e x1 nel dominio della funzione, i valori della funzione nei punti
intermedi giacciono sempre al di sotto della corda tra x0 e x1.
Dalla definizione 3.41, considerando x una variabile stocastica che può assumere i due
valori x0 e x1 ed indicando con a la probabilità del punto x0, si deriva che la funzione
calcolata sul valore di aspettazione di x è sempre inferiore o uguale al valore di aspettazione
dei valori della funzione calcolata sulla variabile stocastica. Questo risultato può essere
generalizzato per induzione completa per un numero qualsiasi di punti, cosicché, se
indichiamo con E[y] il valore di aspettazione di una variabile stocastica discreta y
distribuita secondo la distribuzione p(y), per tutte le funzioni convesse f vale il teorema di
Jensen:
f( E[x] )  E[ f(x) ]
(3.42)
ovvero
f (x p(x) x )  x p(x)  f(x)
(3.43)
50
Da questo deriva un risultato sulla funzione logaritmo che sarà importante nei prossimi
paragrafi e nel prossimo capitolo: poiché la funzione -log è convessa, per ogni funzione
q(x) si ha:
log (x p(x) q(x)) 
x p(x)  log(q(x))
(3.44)
In particolare se q(x) è uguale al rapporto tra due distribuzioni di probabilità p’ e p, vale:
p’(x)
–x p(x)  log ––––––  0
p(x)
(3.45)
dove il primo membro è quella che in teoria dell’informazione si chiama entropia relativa
delle due distribuzioni.
Algoritmo Expectation-Maximisation. Lo scopo dell’algoritmo EM è quello di
aumentare, e possibilmente di massimizzare, la likelihood dei parametri di un modello
probabilistico M rispetto ad un insieme di dati s, risultati di un processo stocastico che
coinvolge un processo  non noto. Indicando con { 0} i parametri correnti del modello, lo
scopo è dunque quello di ottenere un nuovo insieme di parametri { } tali che:
log P(s | , M) – log P(s |  0, M)  0
(3.46)
Introducendo le variabili nascoste, si ha:
P(s,  | , M)
P(s | , M) = ––––––––––––––
P( | s, , M)
(3.47)
Quindi, passando ai logaritmi:
log P(s | , M) = log P(s,  | , M) – log P( | s, , M)
(3.48)
Moltiplicando per la distribuzione di probabilità della variabile nascosta dati i parametri
attuali, P( | s,  0, M), e sommando su tutti i valori che può assumere la variabile nascosta
si ottiene:
log P(s | , M) =  P( | s,  0, M)  (log P(s,  | , M) – log P( | s, , M))
(3.49)
51
Viene definita una funzione ausiliaria Q( | 0), come valore di aspettazione del logaritmo
della probabilità congiunta di s e  sui possibili valori della variabile nascosta:
Q( | 0) =  P( | s,  0, M)  log P(s,  | , M)
(3.50)
L’espressione da rendere massima diviene:
log P(s | , M) – log P(s |  0, M) =
P( | s, , M)
= Q( | 0) – Q( 0 | 0) –  P( | s,  0, M)  log ––––––––––––––
P( | s,  0, M)
(3.51)
Il terzo termine del secondo membro di questa uguaglianza è l’entropia relativa delle
distribuzioni P( | s, , M) e P( | s,  0, M) che, per quanto visto nella sezione precedente,
è sempre positiva. Ne consegue che:
log P(s | , M) – log P(s |  0, M)  Q( | 0) – Q( 0 | 0)
(3.52)
Questa disuguaglianza è il nucleo dell’algoritmo EM. Infatti se si può calcolare un insieme
di parametri { 0} che renda positiva la differenza delle funzioni ausiliarie, questo
incrementerà la likelihood del modello rispetto ai dati. In particolare, l’obiettivo è trovare i
valori { MAX} che massimizzano tale differenza, ovvero:
 MAX = argmax Q( | 0)
(3.53)
L’algoritmo EM si compone dunque di due passi:
 Calcolo del valore di aspettazione Q( | 0) a partire dai parametri del modello attuale.
 Massimizzazione di Q( | 0) nelle variabili { } e aggiornamento del modello.
A partire da un’ipotesi iniziale sui parametri del modello questi due passi vengono applicati
iterativamente fino al raggiungimento della convergenza quando l’aggiornamento dei
parametri non incrementa più la likelihood. L’algoritmo non assicura il raggiungimento
della likelihood massima globalmente, ma solo il suo incremento ad ogni successiva
applicazione e la convergenza ad un massimo locale. Inoltre a volte non e’ possibile
effettuare in modo esatto il passo di massimizzazione, o almeno non in modo efficiente e
52
computazionalmente poco dispendioso. In questi casi si attenua la richiesta della
massimizzazione e si cerca un insieme di parametri che semplicemente renda positivo il
secondo membro della disuguaglianza 3.52. Si parla, in queste situazioni, di algoritmi EM
generalizzati (GEM) (Dempster et al., 1977; Neal e Hinton, 1993)
Algoritmo di Baum-Welch per l’addestramento di un HMM. Entrando nello specifico
degli HMM, l’algoritmo EM è quello più adatto per effettuare l’addestramento su un
insieme di sequenze, in assenza di conoscenze sui cammini che le hanno generate; questi
naturalmente svolgono il ruolo di variabili nascoste. L’implementazione dell’algoritmo in
questo caso è nota come algoritmo di Baum-Welch (Baum, 1972). Il primo passo, lo
ricordo, consiste nel calcolo della funzione ausiliaria, cioè del valore di aspettazione del
logaritmo della probabilità congiunta di emissione di sequenza e cammino su tutti i
cammini possibili dati i parametri attuali del modello(eq. 3.50):
Q( | 0) =  P( | s,  0, M)  log( a01  t=1 a t  t +1  e t (st ))
L
(3.54)
Per non appesantire la notazione ho considerato una sola sequenza, ed omesso così la
sommatoria su tutte le sequenze dell’insieme di addestramento. Dato un cammino, in esso
vi sono un determinato numero di transizioni tra due stati i e j ed un determinato numero di
emissioni di un carattere c da parte di uno stato k. Chiamo tali numeri Aij(,s) e Ek(c,,s)
rispettivamente. Questi permettono di riscrivere l’argomento del logaritmo in una
espressione più trattabile, in cui essi contengono tutta la dipendenza dalla sequenza
specifica:
Q( | 0) =
N
N
N
=  P( | s,  0, M)(i =0 j =1Aij(,s)log aij + k =1cAEk(c,,s)log ek (c)) (3.55)
dove, al solito, N indica il numero di stati e A l’alfabeto dei caratteri.
La sommatoria su tutti i cammini coinvolge, in questa espressione, solo le quantità Aij(,s) e
Ek(c,,s), quindi si definiscono i loro valori di aspettazione Aij (s) e Ek(c,s):
Aij (s) =  P( | s,  0, M) Aij(,s)
(3.56)
53
Ek(c,s) = P( | s,  0, M) Ek(c,,s)
(3.57)
L’eq. 3.55 diviene così:
N
Q( | 0) = i =0 j =1Aij(s)log aij + k =1 cAEk(c,s)log ek (c)
N
N
(3.58)
Sommando su tutte le sequenze dell’insieme di addestramento:
N
Q( | 0) = i =0 j =1Aij log aij + k =1 cAEk(c)log ek (c)
N
N
(3.59)
dove con Aij e Ek(c) si indicano rispettivamente le somme di Aij (s) e Ek(c,s) su tutte le
sequenze. Come si vedrà nella sezione successiva, Aij e Ek(c) sono calcolabili a partire dai
parametri del modello in modo efficiente.
Concludo questa sezione mostrando come il passo di massimizzazione sia in questo caso
attuabile in modo esatto. Si tratta di massimizzare il secondo membro dell’eq. 3.59 nelle
variabili aij e ek (c), rispettando il vincoli di positività e normalizzazione imposti su di esse.
Il calcolo è reso possibile dalla tecnica dei moltiplicatori di Lagrange, in cui vengono
introdotte 2N nuove variabili ausiliarie, k e i , per soddisfare i vincoli; la funzione da
massimizzare diviene così:
N
N
N
f(aij , ek(c), k , i ) = i =0 j =1Aij log aij + k =1 cAEk(c)log ek (c) +
N
– k( cA ek (c) – 1) – i( j =1 aij – 1)
Ponendo le derivate parziali uguali a zero, si ottiene il seguente sistema di equazioni
Aij
f
––––– = –––– – i
=0
aij
 aij
f
Ek(c)
–––––– = –––––
–  k = 0
 ek(c)
ek(c)
 i, j  {stati}
 k  {stati},  c  A
N
f
––––– = j =1 aij – 1 = 0
 i
 i  {stati}
f
––––– = cA ek (c) – 1 = 0
 k
 k  {stati}
(3.61)
54
Questo sistema di N(N + A +2) equazioni, per un HMM a N stati che emetta su un alfabeto
di A caratteri, è risolto dai valori:
Aij
aij = ––––––––––
N
j =1 Aij
(3.62)
Ek(c)
ek(c) = –––––––––––
cA Ek (c)
(3.63)
Questi sono i parametri che massimizzano la funzione ausiliaria e che quindi assicurano il
massimo incremento della likelihood. E' evidente che i parametri così calcolati sono
positivi e normalizzati.
Calcolo dei valori di Aij e Ek(c). I valori di aspettazione del numero di transizioni e del
numero di emissioni possono essere calcolati utilizzando i valori delle matrici f e b
utilizzate negli algoritmi Forward e Backward. Infatti il numero atteso di transizioni tra gli
stati i e j per l’emissione del carattere t-esimo di una sequenza s è:
1
P( t= j,  t -1= i | s,,M) = ––––––––––
 P(s1s2...st -1,  t -1= i |,M)P( t= j |  t -1= i,,M)
P(s | , M)
P(st | t= j,,M)P(st +1st +2....sL | t= j,,M) =
1
= ––––––––––– fi(t-1)aij ej(st)bj(t)
P(s | , M)
(3.64)
Sommando su tutte le posizioni e su tutte le sequenze dell’insieme di addestramento si
ottiene:
Aij = sD
L
1
–––––––
t=1 fi(t-1)aij ej(st)bj(t)
P(s | , M)
(3.65)
Con la medesima procedura si calcola Ek(c):
1
P(st= c,  t = k | s,,M) = –––––––––  P(s1s2...st ,  t = k | ,M) 
P(s | , M)
 P(st +1st +2... sL |  t = k,,M)  (st, c) =
1
= –––––––––– fk(t)bk(t)(st, c)
P(s | , M)
(3.66)
dove(st, c) è una funzione che assume il valore 1 solo quando st è uguale a c. Così:
55
Ek(c) = s D
L
1
––––––––
t=1 fk(t) bk(t)(st, c)
P(s | , M)
(3.67)
Addestramento di HMM etichettati. Si è visto nel paragrafo 3.4 che l’attribuzione di un
etichetta l(k) ad ogni stato k di un HMM permette di progettare dei predittori che effettuano
un’associazione tra una sequenza s1s2 sL e una stringa di etichette l1l2..lL . Tali predittori
vengono addestrati su coppie s-l di associazioni note. La procedura di addestramento
rimane sostanzialmente quella descritta nelle sezioni precedenti, tenendo però presente che
non tutti i cammini tra gli stati del modello sono possibili per generare una data sequenza
dell’insieme di addestramento, ma solo quelli compatibili con la stringa dell'etichetta
associata alla sequenza. Perciò tutti i valori di aspettazione devono essere calcolati sui soli
cammini possibili. Il modo più semplice per farlo è quello di calcolare le matrici degli
algoritmi Forward e Backward considerando solo tali cammini, azzerando cioè nelle
formule di ricorrenza i valori fk(t) e bk(t) qualora l.t sia diverso da l(k) (ovvero l’etichetta
della t-esima posizione non coincida con l’etichetta dello stato k).
3.7
Uso degli HMM per l'analisi di sequenze
Uno degli usi degli HMM nell'analisi di sequenze proteiche è la loro applicazione alle
ricerca nelle banche dati (data mining), per costruire allineamenti di famiglie proteiche e di
domini strutturali e funzionali (si veda, per un'esauriente trattazione, Krogh et al., 1994).
L'idea che soggiace a tale approccio è la costruzione di modelli partendo da sequenze di
addestramento omogenee per struttura e/o funzione: questi HMM sono assimilabili a profili
degli insiemi di sequenze scelti. Essi sono quindi in grado di "riconoscere" sequenze che
condividano le stesse caratteristiche dell'insieme di addestramento e di allinearle al profilo
memorizzato nei loro parametri. Sono disponibili in World Wide Web programmi che
permettono di costruire HMM di questo genere, tra i quali:
SAM (http://www.cse.ucsc.edu/research/compbio/sam.html ;Hughey et al., 1995)
HMMer (http://hmmer.wustl.edu/ ; Eddy, 1996).
Sono inoltre state create banche dati di allineamenti costruiti su questo principio:
56
Pfam (http://www.sanger.ac.uk/Software/Pfam; Bateman et al., 2000).
L'uso degli HMM come predittori di caratteristiche morfo-funzionali di proteine si è
rivelato utile nella predizione della topografia e della topologia di proteine -elica di
membrana:
TMHMM (http://www.cbs.dtu.dk/services/TMHMM/; Sonnhammer et al., 1996);
HMMTOP (http://www.enzim.hu/hmmtop/ ; Tusnády e Simon, 1998);
Gli HMM sono infine estensivamente usati nell'analisi del DNA. Tra i molti "gene finder"
basati su HMM, cito qua solo:
HMMgene (http://www.cbs.dtu.dk/services/HMMgene/; Krogh, 1997).
Tengo a rimarcare che nessuno dei predittori a HMM disponibili utilizza l'informazione
evolutiva come input.
57