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 ) af(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( a01 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 =1cAEk(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 cAEk(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 cAEk(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 cAEk(c)log ek (c) + N – k( cA 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 ––––– = cA 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) = ––––––––––– cA 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 = sD 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