Salta al contenuto
Note per Studenti Ragionamento probabilistico nel tempo - catene di Markov, HMM, filtraggio e smoothing

Ragionamento probabilistico nel tempo - catene di Markov, HMM, filtraggio e smoothing

In questa pagina 10

Le reti bayesiane (Reti bayesiane - semantica, indipendenze e inferenza esattaUna rete bayesiana è un grafo diretto aciclico (DAG) con una variabile per nodo e una tabella delle probabilità condizionate (CPT) $P(X_i\mid\text{Parents}(X_i))$ per nodo; rappresenta la congiunta come prodotto $P(x_1,\dots,x_n)=\prod_i P(x_i\mid\text{parents}(X_i))$, con molti meno numeri della tabella completa (rete dell'allarme: 10 contro 31). Tre strutture elementari: catena $X\to Y\to Z$ e fork $Y\leftarrow X\to Z$ (estremi indipendenti dato il centro), collider $X\to Z\leftarrow Y$ (indipendenti, ma dipendenti se si osserva $Z$ o un suo discendente). Modelli causali (genitori = cause) danno reti più piccole. Inferenza esatta per enumerazione: $\mathbf P(X\mid\mathbf e)=\alpha\sum_{\mathbf y}\mathbf P(X,\mathbf e,\mathbf y)$ calcolata come somma di prodotti, in profondità e da sinistra a destra; per l'allarme $\mathbf P(B\mid j,m)=\langle0{,}284;\ 0{,}716\rangle$. Molti prodotti si ripetono: l'eliminazione di variabili li salva come fattori e li riusa.Reti bayesiane - semantica, indipendenze e inferenza esatta →) descrivono un mondo fotografato in un istante. Qui lo stato cambia nel tempo e l'agente lo osserva solo attraverso sensori rumorosi.

Esempio guida (mondo dell'ombrello). Sei prigioniero in una cella sotterranea: non vedi il tempo, ma vedi se la guardia porta l'ombrello. Quanto è probabile che fuori piova, date le osservazioni di oggi e dei giorni precedenti?

Modello

  • Tempo discreto: istanti (time slices) a distanza costante Δ\Delta.
  • Xt\mathbf X_t: variabili di stato dell'istante tt, non osservabili (nascoste). Et\mathbf E_t: variabili di evidenza osservabili; l'osservazione è Et=et\mathbf E_t=\mathbf e_t. Si scrive e1:t=e1,…,ete_{1:t}=e_1,\dots,e_t.

Modello di transizione. P(Xt∣X0:t−1)\mathbf P(X_t\mid X_{0:t-1}) ha troppe variabili (crescono con tt). Si usa l'ipotesi di Markov: lo stato dipende solo da un numero fisso di stati precedenti.

  • Primo ordine: P(Xt∣X0:t−1)=P(Xt∣Xt−1)\mathbf P(X_t\mid X_{0:t-1})=\mathbf P(X_t\mid X_{t-1}).
  • Secondo ordine: P(Xt∣Xt−2,Xt−1)\mathbf P(X_t\mid X_{t-2},X_{t-1}).

Un processo di Markov del primo ordine è una catena di nodi X0→X1→X2→⋯X_0\to X_1\to X_2\to\cdots.

Modello del sensore. Le osservazioni dipendono solo dallo stato corrente (sensor Markov assumption): P(Et∣X0:t,E1:t−1)=P(Et∣Xt)\mathbf P(E_t\mid X_{0:t},E_{1:t-1})=\mathbf P(E_t\mid X_t). Dato XtX_t, EtE_t è indipendente da tutto il resto: è un caso di catena e di fork (Reti bayesiane - semantica, indipendenze e inferenza esattaUna rete bayesiana è un grafo diretto aciclico (DAG) con una variabile per nodo e una tabella delle probabilità condizionate (CPT) $P(X_i\mid\text{Parents}(X_i))$ per nodo; rappresenta la congiunta come prodotto $P(x_1,\dots,x_n)=\prod_i P(x_i\mid\text{parents}(X_i))$, con molti meno numeri della tabella completa (rete dell'allarme: 10 contro 31). Tre strutture elementari: catena $X\to Y\to Z$ e fork $Y\leftarrow X\to Z$ (estremi indipendenti dato il centro), collider $X\to Z\leftarrow Y$ (indipendenti, ma dipendenti se si osserva $Z$ o un suo discendente). Modelli causali (genitori = cause) danno reti più piccole. Inferenza esatta per enumerazione: $\mathbf P(X\mid\mathbf e)=\alpha\sum_{\mathbf y}\mathbf P(X,\mathbf e,\mathbf y)$ calcolata come somma di prodotti, in profondità e da sinistra a destra; per l'allarme $\mathbf P(B\mid j,m)=\langle0{,}284;\ 0{,}716\rangle$. Molti prodotti si ripetono: l'eliminazione di variabili li salva come fattori e li riusa.Reti bayesiane - semantica, indipendenze e inferenza esatta →).

Definizione (HMM del primo ordine). Hidden Markov model: stati nascosti XtX_t che formano una catena di Markov e osservazioni EtE_t figlie dello stato. Distribuzione congiunta, con prior P(X0)\mathbf P(X_0): P(x0,x1:t,e1:t)=P(x0)∏i=1tP(xi∣xi−1) P(ei∣xi).P(x_0,x_{1:t},e_{1:t})=P(x_0)\prod_{i=1}^t P(x_i\mid x_{i-1})\,P(e_i\mid x_i). In senso stretto l'HMM ha un'unica variabile di stato discreta (le evidenze possono essere più d'una).

Mondo dell'ombrello. Xt=RaintX_t=\text{Rain}_t, Et=UmbrellatE_t=\text{Umbrella}_t. Trasformazione: P(rt∣rt−1)=0,7P(r_t\mid r_{t-1})=0{,}7, P(rt∣¬rt−1)=0,3P(r_t\mid\neg r_{t-1})=0{,}3. Sensore: P(ut∣rt)=0,9P(u_t\mid r_t)=0{,}9, P(ut∣¬rt)=0,2P(u_t\mid\neg r_t)=0{,}2. Prior P(r0)=0,5P(r_0)=0{,}5.

Rappresentazione a matrici

Per XtX_t con SS valori:

  • Matrice di transizione T\mathbf T, S×SS\times S, con Tij=P(Xt=j∣Xt−1=i)T_{ij}=P(X_t=j\mid X_{t-1}=i) (riga = stato di partenza; ogni riga somma a 11).
  • Matrice del sensore Ot\mathbf O_t, S×SS\times S diagonale, con (Ot)ii=P(et∣Xt=i)(\mathbf O_t)_{ii}=P(e_t\mid X_t=i) (probabilità di emissione). Ce n'è una per ogni valore osservato.

Ombrello (stati in ordine [pioggia, no pioggia][\text{pioggia},\ \text{no pioggia}]): T=(0,70,30,30,7),Ou=(0,9000,2),O¬u=(0,1000,8).\mathbf T=\begin{pmatrix}0{,}7&0{,}3\\0{,}3&0{,}7\end{pmatrix},\quad \mathbf O^{u}=\begin{pmatrix}0{,}9&0\\0&0{,}2\end{pmatrix},\quad \mathbf O^{\neg u}=\begin{pmatrix}0{,}1&0\\0&0{,}8\end{pmatrix}.

I quattro compiti

compito calcola
filtraggio (filtering, stima dello stato) P(Xt∣e1:t)\mathbf P(X_t\mid e_{1:t}), lo stato attuale
predizione P(Xt+k∣e1:t)\mathbf P(X_{t+k}\mid e_{1:t}), uno stato futuro (k>0k>0)
smoothing P(Xt−k∣e1:t)\mathbf P(X_{t-k}\mid e_{1:t}), uno stato passato
spiegazione più probabile (most likely explanation) arg⁡max⁡x1:tP(x1:t∣e1:t)\arg\max_{x_{1:t}}P(x_{1:t}\mid e_{1:t}), la sequenza di stati

Inoltre i modelli T\mathbf T e O\mathbf O, se non noti, si possono apprendere dalle osservazioni.

Filtraggio

Il belief state è ft=P(Xt∣e1:t)\mathbf f_t=\mathbf P(X_t\mid e_{1:t}). Si calcola ricorsivamente da ft\mathbf f_{t} a ft+1\mathbf f_{t+1} in due passi:

ft+1=P(Xt+1∣e1:t+1)=Bayesα P(et+1∣Xt+1)⏟aggiornamento ∑xtP(Xt+1∣xt) P(xt∣e1:t)⏟predizione,α=1P(et+1∣e1:t).\mathbf f_{t+1}=\mathbf P(X_{t+1}\mid e_{1:t+1})\overset{\text{Bayes}}{=}\alpha\,\underbrace{\mathbf P(e_{t+1}\mid X_{t+1})}_{\text{aggiornamento}}\ \underbrace{\sum_{x_t}\mathbf P(X_{t+1}\mid x_t)\,P(x_t\mid e_{1:t})}_{\text{predizione}},\qquad \alpha=\frac1{P(e_{t+1}\mid e_{1:t})}.

Dimostrazione dei due passi: P(Xt+1∣e1:t+1)=αP(et+1∣Xt+1,e1:t)P(Xt+1∣e1:t)P(X_{t+1}\mid e_{1:t+1})=\alpha P(e_{t+1}\mid X_{t+1},e_{1:t})P(X_{t+1}\mid e_{1:t}) (Bayes); per l'ipotesi del sensore il primo fattore diventa P(et+1∣Xt+1)P(e_{t+1}\mid X_{t+1}); il secondo si scrive marginalizzando xtx_t e usando l'ipotesi di Markov P(Xt+1∣xt,e1:t)=P(Xt+1∣xt)P(X_{t+1}\mid x_t,e_{1:t})=P(X_{t+1}\mid x_t). In forma compatta ft+1=FORWARD(ft,et+1)\mathbf f_{t+1}=\text{FORWARD}(\mathbf f_t,e_{t+1}), applicata ricorsivamente.

In matrici. Il passo di predizione è un prodotto con T⊤\mathbf T^\top (si sommano le righe pesate per ft\mathbf f_t), l'aggiornamento un prodotto con Ot+1\mathbf O_{t+1}: ft+1=α Ot+1 T⊤ ft.\mathbf f_{t+1}=\alpha\,\mathbf O_{t+1}\,\mathbf T^\top\,\mathbf f_t.

Algoritmo (forward). f0=P(X0)\mathbf f_0=\mathbf P(X_0). Per ogni osservazione ete_t: v=OetT⊤ft−1\mathbf v=\mathbf O^{e_t}\mathbf T^\top\mathbf f_{t-1}, ft=v/∑v\mathbf f_t=\mathbf v/\sum\mathbf v. Costo costante per passo: non dipende dalla lunghezza della storia.

Esempio: ombrello due giorni

Domanda: P(r2∣u1,u2)P(r_2\mid u_1,u_2), con f0=⟨0,5; 0,5⟩\mathbf f_0=\langle0{,}5;\ 0{,}5\rangle.

Giorno 1. Predizione: T⊤f0=⟨0,7⋅0,5+0,3⋅0,5; 0,3⋅0,5+0,7⋅0,5⟩=⟨0,5; 0,5⟩\mathbf T^\top\mathbf f_0=\langle0{,}7\cdot0{,}5+0{,}3\cdot0{,}5;\ 0{,}3\cdot0{,}5+0{,}7\cdot0{,}5\rangle=\langle0{,}5;\ 0{,}5\rangle (con prior uniforme resta uniforme). Aggiornamento con u1u_1: ⟨0,9⋅0,5; 0,2⋅0,5⟩=⟨0,45; 0,10⟩\langle0{,}9\cdot0{,}5;\ 0{,}2\cdot0{,}5\rangle=\langle0{,}45;\ 0{,}10\rangle; α1=1/0,55\alpha_1=1/0{,}55: f1=⟨0,45; 0,10⟩/0,55=⟨0,818; 0,182⟩.\mathbf f_1=\langle0{,}45;\ 0{,}10\rangle/0{,}55=\langle0{,}818;\ 0{,}182\rangle.

Giorno 2. Predizione: P(r2∣u1)=0,7⋅0,818+0,3⋅0,182=0,627P(r_2\mid u_1)=0{,}7\cdot0{,}818+0{,}3\cdot0{,}182=0{,}627, P(¬r2∣u1)=0,3⋅0,818+0,7⋅0,182=0,373P(\neg r_2\mid u_1)=0{,}3\cdot0{,}818+0{,}7\cdot0{,}182=0{,}373. Aggiornamento con u2u_2: ⟨0,9⋅0,627; 0,2⋅0,373⟩=⟨0,5645; 0,0745⟩\langle0{,}9\cdot0{,}627;\ 0{,}2\cdot0{,}373\rangle=\langle0{,}5645;\ 0{,}0745\rangle; α2=1/0,639\alpha_2=1/0{,}639: f2=⟨0,883; 0,117⟩.\mathbf f_2=\langle0{,}883;\ 0{,}117\rangle. (Le slide scrivono 0,5640{,}564 e 0,5650{,}565 in due punti per un arrotondamento: il valore è 0,56450{,}5645.) Con matrici: f2=α(0,9000,2)(0,70,30,30,7)(0,8180,182)=α(0,56450,0745)\mathbf f_2=\alpha\begin{pmatrix}0{,}9&0\\0&0{,}2\end{pmatrix}\begin{pmatrix}0{,}7&0{,}3\\0{,}3&0{,}7\end{pmatrix}\begin{pmatrix}0{,}818\\0{,}182\end{pmatrix}=\alpha\begin{pmatrix}0{,}5645\\0{,}0745\end{pmatrix}.

La probabilità di pioggia sale da 0,50{,}5 a 0,8180{,}818 al primo ombrello e a 0,8830{,}883 al secondo. Se al giorno 1 non si vedesse l'ombrello: f1=⟨0,111; 0,889⟩\mathbf f_1=\langle0{,}111;\ 0{,}889\rangle e dopo l'ombrello del giorno 2 si ottiene 0,70280{,}7028; se non si hanno informazioni sul giorno 1 (solo u2u_2), 0,8180{,}818 (Esercizio - Filtraggio nell'ombrello con pomegranate (laboratorio 6)).

Predizione

Si applica solo il passo di predizione, senza evidenza: P(Xt+1∣e1:t)=T⊤ft\mathbf P(X_{t+1}\mid e_{1:t})=\mathbf T^\top\mathbf f_t e in generale P(Xt+k∣e1:t)=(T⊤)kft\mathbf P(X_{t+k}\mid e_{1:t})=(\mathbf T^\top)^k\mathbf f_t. Dopo f2=⟨0,883; 0,117⟩\mathbf f_2=\langle0{,}883;\ 0{,}117\rangle: giorno 3 ⟨0,653; 0,347⟩\langle0{,}653;\ 0{,}347\rangle, giorno 4 ⟨0,561; 0,439⟩\langle0{,}561;\ 0{,}439\rangle, ... verso la distribuzione stazionaria ⟨0,5; 0,5⟩\langle0{,}5;\ 0{,}5\rangle: l'evidenza passata viene dimenticata e la predizione tende alla distribuzione stazionaria della catena.

Catena di Markov (esempio delle slide). Voto finale annuale A,B,CA,B,C; stesso voto dell'anno prima con probabilità 0,60{,}6, voto diverso (ciascuno) 0,20{,}2. P(G3=A∣G1=B)P(G_3=A\mid G_1=B): P(G3∣G1=B)=∑g2P(G3∣g2) P(g2∣G1=B)P(G_3\mid G_1=B)=\sum_{g_2}P(G_3\mid g_2)\,P(g_2\mid G_1=B) (somma sul voto intermedio g2g_2; il fattore P(G1=B)P(G_1=B) del numeratore si semplifica con il denominatore), quindi per G3=AG_3=A P(G3=A∣G1=B)=0,6⋅0,2⏟g2=A+0,2⋅0,6⏟g2=B+0,2⋅0,2⏟g2=C=0,28.P(G_3=A\mid G_1=B)=\underbrace{0{,}6\cdot0{,}2}_{g_2=A}+\underbrace{0{,}2\cdot0{,}6}_{g_2=B}+\underbrace{0{,}2\cdot0{,}2}_{g_2=C}=0{,}28. È l'elemento (B,A)(B,A) di T2\mathbf T^2: tutta la riga è ⟨0,28; 0,44; 0,28⟩\langle0{,}28;\ 0{,}44;\ 0{,}28\rangle.

Smoothing

Dato il passato e il presente, si rivaluta un istante kk passato: P(Xk∣e1:t)\mathbf P(X_k\mid e_{1:t}), con 1≤k<t1\le k<t. Si dividono le evidenze in passate e1:ke_{1:k} e future ek+1:te_{k+1:t}: P(Xk∣e1:t)=α P(Xk∣e1:k) P(ek+1:t∣Xk)=α fk×bk+1:t(× prodotto componente per componente).\mathbf P(X_k\mid e_{1:t})=\alpha\,\mathbf P(X_k\mid e_{1:k})\ \mathbf P(e_{k+1:t}\mid X_k)=\alpha\,\mathbf f_k\times\mathbf b_{k+1:t}\qquad(\times\text{ prodotto componente per componente}). Il messaggio forward fk\mathbf f_k è il filtraggio. Il messaggio backward bk+1:t=P(ek+1:t∣Xk)\mathbf b_{k+1:t}=\mathbf P(e_{k+1:t}\mid X_k) si calcola all'indietro: bk+1:t=T Ok+1 bk+2:t,bt+1:t=1=⟨1;… ;1⟩.\mathbf b_{k+1:t}=\mathbf T\,\mathbf O_{k+1}\,\mathbf b_{k+2:t},\qquad \mathbf b_{t+1:t}=\mathbf 1=\langle1;\dots;1\rangle. (Ogni componente è ∑xk+1P(ek+1∣xk+1) bk+2:t(xk+1) P(xk+1∣Xk)\sum_{x_{k+1}}P(e_{k+1}\mid x_{k+1})\,b_{k+2:t}(x_{k+1})\,P(x_{k+1}\mid X_k).) L'algoritmo forward-backward fa un passaggio in avanti per i f\mathbf f e uno all'indietro per i b\mathbf b, e smoothing di tutti gli istanti in O(t)O(t). Il filtraggio all'ultimo istante coincide con lo smoothing.

Esempio. Osservazioni u1,u2,¬u3u_1,u_2,\neg u_3. Filtraggio: f1=⟨0,818; 0,182⟩\mathbf f_1=\langle0{,}818;\ 0{,}182\rangle, f2=⟨0,883; 0,117⟩\mathbf f_2=\langle0{,}883;\ 0{,}117\rangle, f3=⟨0,191; 0,809⟩\mathbf f_3=\langle0{,}191;\ 0{,}809\rangle. All'indietro: b4:3=1\mathbf b_{4:3}=\mathbf 1; b3:3=TO¬u1=(0,70,30,30,7)(0,10,8)=⟨0,31; 0,59⟩\mathbf b_{3:3}=\mathbf T\mathbf O^{\neg u}\mathbf 1=\begin{pmatrix}0{,}7&0{,}3\\0{,}3&0{,}7\end{pmatrix}\begin{pmatrix}0{,}1\\0{,}8\end{pmatrix}=\langle0{,}31;\ 0{,}59\rangle; b2:3=TOub3:3=T⟨0,9⋅0,31; 0,2⋅0,59⟩=T⟨0,279; 0,118⟩=⟨0,2307; 0,1663⟩\mathbf b_{2:3}=\mathbf T\mathbf O^{u}\mathbf b_{3:3}=\mathbf T\langle0{,}9\cdot0{,}31;\ 0{,}2\cdot0{,}59\rangle=\mathbf T\langle0{,}279;\ 0{,}118\rangle=\langle0{,}2307;\ 0{,}1663\rangle. Combinando:

  • giorno 2: f2×b3:3=⟨0,883⋅0,31; 0,117⋅0,59⟩=⟨0,2738; 0,0688⟩→⟨0,799; 0,201⟩\mathbf f_2\times\mathbf b_{3:3}=\langle0{,}883\cdot0{,}31;\ 0{,}117\cdot0{,}59\rangle=\langle0{,}2738;\ 0{,}0688\rangle\to\langle0{,}799;\ 0{,}201\rangle: l'ombrello mancante al giorno 3 abbassa la pioggia al giorno 2 da 0,8830{,}883 a 0,7990{,}799;
  • giorno 1: f1×b2:3=⟨0,818⋅0,2307; 0,182⋅0,1663⟩→⟨0,862; 0,138⟩\mathbf f_1\times\mathbf b_{2:3}=\langle0{,}818\cdot0{,}2307;\ 0{,}182\cdot0{,}1663\rangle\to\langle0{,}862;\ 0{,}138\rangle;
  • giorno 3: f3×1=⟨0,191; 0,809⟩\mathbf f_3\times\mathbf 1=\langle0{,}191;\ 0{,}809\rangle (invariato).

Con le sole osservazioni u1,u2u_1,u_2, lo smoothing del giorno 1 dà 0,8830{,}883 (stesso numero di f2\mathbf f_2 per la simmetria di T\mathbf T), e quello del giorno 0 è 0,6530{,}653; con la sola u1u_1, il giorno 0 vale 0,6270{,}627. Questi valori "all'indietro" sono quelli che la libreria pomegranate restituisce automaticamente per ogni nodo (Esercizio - Filtraggio e smoothing nell'ombrello con la nuova versione di pomegranate (materiale supplementare del laboratorio 6)). Il risultato è stato verificato per enumerazione di tutte le sequenze di stati.

Spiegazione più probabile. Si cerca la sequenza x1:tx_{1:t} con P(x1:t∣e1:t)P(x_{1:t}\mid e_{1:t}) massima: non è la sequenza degli stati più probabili singolarmente. Si risolve con l'algoritmo di Viterbi, che ha la forma del filtraggio con un massimo al posto della somma. Per u,u,¬uu,u,\neg u la sequenza più probabile è pioggia, pioggia, no pioggia.

Probabilità di una sequenza di osservazioni

Senza normalizzare, il filtraggio calcola st=P(e1:t,Xt)\mathbf s_t=\mathbf P(e_{1:t},X_t): st=OtT⊤st−1,P(e1:t)=∑xtst(xt).\mathbf s_t=\mathbf O_t\mathbf T^\top\mathbf s_{t-1},\qquad P(e_{1:t})=\sum_{x_t}s_t(x_t). Dimostrazione: st=P(e1:t,Xt)=∑xt−1P(et∣Xt)P(Xt∣xt−1)P(e1:t−1,xt−1)s_t=P(e_{1:t},X_t)=\sum_{x_{t-1}}P(e_t\mid X_t)P(X_t\mid x_{t-1})P(e_{1:t-1},x_{t-1}) per le due ipotesi di Markov. Per l'ombrello, P(u1,u2)=0,55⋅0,639=0,3515P(u_1,u_2)=0{,}55\cdot0{,}639=0{,}3515 (i due fattori di normalizzazione).

Esempio: il bambino (slide). Stato: pannolino pulito o sporco, equiprobabili all'inizio. Pulito →\to pulito/sporco 0,5/0,50{,}5/0{,}5; sporco →\to pulito/sporco 0,8/0,20{,}8/0{,}2. Pulito: "mama" o "papa" 0,40{,}4 ciascuna, "poo-poo" o "pee-pee" 0,10{,}1; sporco: 0,10{,}1 e 0,40{,}4. Qual è la probabilità di "mama", "mama", "pee-pee", "pee-pee"? Svolgimento in Esercizio - Filtraggio in un HMM - il bambino e il pannolino (slide del corso): 0,003260{,}00326.

Esempio: localizzazione di un robot

Un robot si muove a caso, con uguale probabilità, in una casella libera adiacente; i sensori (rumorosi) dicono quali dei quattro lati N, E, S, O hanno un ostacolo. Stato XtX_t: la casella, tra S=42S=42 libere. Prior P(X0=i)=1/42P(X_0=i)=1/42 (posizione ignota).

  • Transizione: Tij=1/N(i)T_{ij}=1/N(i) se jj è adiacente a ii, altrimenti 00 (N(i)N(i) = caselle libere adiacenti). La matrice ha 42×42=176442\times42=1764 elementi.
  • Sensore: EtE_t è una sequenza di 44 bit (es. 10101010: ostacolo a nord e sud). Ogni bit è sbagliato con probabilità ε\varepsilon indipendente. Se la lettura ete_t ha did_i bit sbagliati rispetto alla casella ii: P(et∣Xt=i)=(1−ε)4−di εdiP(e_t\mid X_t=i)=(1-\varepsilon)^{4-d_i}\,\varepsilon^{d_i}. Con ε=0,2\varepsilon=0{,}2: tre bit giusti e uno sbagliato 0,83⋅0,2=0,1020{,}8^3\cdot0{,}2=0{,}102; la probabilità di sbagliare almeno un bit su quattro è 1−0,84=0,591-0{,}8^4=0{,}59.
  • Con T\mathbf T e Ot\mathbf O_t il filtraggio dà P(X1∣e1)P(X_1\mid e_1), P(X2∣e1,e2)P(X_2\mid e_1,e_2), ... e l'errore di localizzazione scende con le osservazioni: per ε=0,20\varepsilon=0{,}20 il robot si localizza entro due caselle dopo circa 2020 osservazioni, per ε≤0,10\varepsilon\le0{,}10 bastano poche osservazioni, per ε=0,40\varepsilon=0{,}40 l'errore resta grande.

Codice

python
import numpy as np

T = np.array([[0.7, 0.3],        # T[i, j] = P(X_t = j | X_{t-1} = i), stati: [pioggia, no pioggia]
              [0.3, 0.7]])
O = {True:  np.diag([0.9, 0.2]), # O^{u}: P(ombrello | stato) sulla diagonale
     False: np.diag([0.1, 0.8])} # O^{non u}
f0 = np.array([0.5, 0.5])        # P(X_0)

def forward(f, e):
    v = O[e] @ T.T @ f           # predizione (T^T f) e aggiornamento (O)
    return v / v.sum()           # normalizzazione alfa

def filtering(prior, evidenze):
    f, out = prior, []
    for e in evidenze:
        f = forward(f, e)
        out.append(f)
    return out                   # f_1, ..., f_t

def smoothing(prior, evidenze):
    f = filtering(prior, evidenze)
    b, out = np.ones(2), []
    for t in range(len(evidenze) - 1, -1, -1):   # da t fino a 1, messaggio all'indietro
        s = f[t] * b
        out.append(s / s.sum())                  # P(X_{t+1} | e_{1:T})
        b = T @ O[evidenze[t]] @ b               # b_{k:T}
    return out[::-1]

print(filtering(f0, [True, True]))
print(smoothing(f0, [True, True, False]))

Output: [0.818, 0.182], [0.883, 0.117] per il filtraggio; [0.862, 0.138], [0.799, 0.201], [0.191, 0.809] per lo smoothing.

Domande d'esame

  1. Cosa afferma l'ipotesi di Markov del primo ordine e l'ipotesi del sensore? P(Xt∣X0:t−1)=P(Xt∣Xt−1)P(X_t\mid X_{0:t-1})=P(X_t\mid X_{t-1}) e P(Et∣X0:t,E1:t−1)=P(Et∣Xt)P(E_t\mid X_{0:t},E_{1:t-1})=P(E_t\mid X_t).
  2. Nel mondo dell'ombrello con f0=⟨0,5; 0,5⟩\mathbf f_0=\langle0{,}5;\ 0{,}5\rangle, calcolare P(r1∣u1)P(r_1\mid u_1). α⋅0,9⋅(0,7⋅0,5+0,3⋅0,5)=α⋅0,45\alpha\cdot0{,}9\cdot(0{,}7\cdot0{,}5+0{,}3\cdot0{,}5)=\alpha\cdot0{,}45 e α⋅0,2⋅0,5=α⋅0,1\alpha\cdot0{,}2\cdot0{,}5=\alpha\cdot0{,}1: 0,45/0,55=0,8180{,}45/0{,}55=0{,}818.
  3. Qual è la differenza tra filtraggio e smoothing? Il filtraggio stima lo stato attuale con le evidenze fino ad ora; lo smoothing stima uno stato passato usando anche le evidenze successive (forward-backward).
  4. Con i voti A,B,CA,B,C (stesso voto 0,60{,}6, altro 0,20{,}2), P(G3=A∣G1=B)P(G_3=A\mid G_1=B)? 0,6⋅0,2+0,2⋅0,6+0,2⋅0,2=0,280{,}6\cdot0{,}2+0{,}2\cdot0{,}6+0{,}2\cdot0{,}2=0{,}28.

Versione ripasso

  • Modello: tempo discreto, stato nascosto XtX_t, evidenza Et=etE_t=e_t. Ipotesi di MarkovP(Xt∣X0:t−1)=P(Xt∣Xt−1)P(X_t\mid X_{0:t-1})=P(X_t\mid X_{t-1}) al primo ordine; al secondo P(Xt∣Xt−2,Xt−1)P(X_t\mid X_{t-2},X_{t-1}) (modello di transizione) e ipotesi del sensore P(Et∣X0:t,E1:t−1)=P(Et∣Xt)P(E_t\mid X_{0:t},E_{1:t-1})=P(E_t\mid X_t) (modello del sensore; catena e fork: Reti bayesiane - semantica, indipendenze e inferenza esattaUna rete bayesiana è un grafo diretto aciclico (DAG) con una variabile per nodo e una tabella delle probabilità condizionate (CPT) $P(X_i\mid\text{Parents}(X_i))$ per nodo; rappresenta la congiunta come prodotto $P(x_1,\dots,x_n)=\prod_i P(x_i\mid\text{parents}(X_i))$, con molti meno numeri della tabella completa (rete dell'allarme: 10 contro 31). Tre strutture elementari: catena $X\to Y\to Z$ e fork $Y\leftarrow X\to Z$ (estremi indipendenti dato il centro), collider $X\to Z\leftarrow Y$ (indipendenti, ma dipendenti se si osserva $Z$ o un suo discendente). Modelli causali (genitori = cause) danno reti più piccole. Inferenza esatta per enumerazione: $\mathbf P(X\mid\mathbf e)=\alpha\sum_{\mathbf y}\mathbf P(X,\mathbf e,\mathbf y)$ calcolata come somma di prodotti, in profondità e da sinistra a destra; per l'allarme $\mathbf P(B\mid j,m)=\langle0{,}284;\ 0{,}716\rangle$. Molti prodotti si ripetono: l'eliminazione di variabili li salva come fattori e li riusa.Reti bayesiane - semantica, indipendenze e inferenza esatta →).
  • HMM del primo ordine: congiunta P(x0)∏i=1tP(xi∣xi−1)P(ei∣xi)P(x_0)\prod_{i=1}^tP(x_i\mid x_{i-1})P(e_i\mid x_i); una sola variabile di stato discreta.
  • Matrici: Tij=P(Xt=j∣Xt−1=i)T_{ij}=P(X_t=j\mid X_{t-1}=i) (righe sommano a 11); Ot\mathbf O_t diagonale con P(et∣Xt=i)P(e_t\mid X_t=i), una per valore osservato. Ombrello: T=(0,70,30,30,7)\mathbf T=\begin{pmatrix}0{,}7&0{,}3\\0{,}3&0{,}7\end{pmatrix}, Ou=diag(0,9; 0,2)\mathbf O^u=\text{diag}(0{,}9;\,0{,}2), O¬u=diag(0,1; 0,8)\mathbf O^{\neg u}=\text{diag}(0{,}1;\,0{,}8), P(r0)=0,5P(r_0)=0{,}5.
  • Quattro compiti: filtraggio P(Xt∣e1:t)P(X_t\mid e_{1:t}); predizione P(Xt+k∣e1:t)P(X_{t+k}\mid e_{1:t}); smoothing P(Xt−k∣e1:t)P(X_{t-k}\mid e_{1:t}); spiegazione più probabile arg⁡max⁡P(x1:t∣e1:t)\arg\max P(x_{1:t}\mid e_{1:t}) (Viterbi, massimo al posto della somma); in più si possono apprendere T\mathbf T e O\mathbf O.
  • Filtraggio: ft+1=α P(et+1∣Xt+1)∑xtP(Xt+1∣xt)P(xt∣e1:t)\mathbf f_{t+1}=\alpha\,P(e_{t+1}\mid X_{t+1})\sum_{x_t}P(X_{t+1}\mid x_t)P(x_t\mid e_{1:t}), cioè ft=α OtT⊤ft−1\mathbf f_t=\alpha\,\mathbf O_t\mathbf T^\top\mathbf f_{t-1} (predizione con T⊤\mathbf T^\top, poi aggiornamento con O\mathbf O); costo costante per passo. Derivazione: Bayes, ipotesi del sensore, marginalizzare xtx_t, ipotesi di Markov.
  • Ombrello: f1=⟨0,45; 0,10⟩/0,55=⟨0,818; 0,182⟩\mathbf f_1=\langle0{,}45;\,0{,}10\rangle/0{,}55=\langle0{,}818;\ 0{,}182\rangle; predizione giorno 22 ⟨0,627; 0,373⟩\langle0{,}627;\,0{,}373\rangle; f2=⟨0,5645; 0,0745⟩/0,639=⟨0,883; 0,117⟩\mathbf f_2=\langle0{,}5645;\,0{,}0745\rangle/0{,}639=\langle0{,}883;\ 0{,}117\rangle. Senza ombrello al giorno 11: f1=⟨0,111; 0,889⟩\mathbf f_1=\langle0{,}111;\,0{,}889\rangle, poi 0,7030{,}703; solo u2u_2: 0,8180{,}818 (Esercizio - Filtraggio nell'ombrello con pomegranate (laboratorio 6)).
  • Predizione: (T⊤)kft(\mathbf T^\top)^k\mathbf f_t: dopo f2\mathbf f_2, 0,6530{,}653, 0,5610{,}561, ... verso la distribuzione stazionaria ⟨0,5; 0,5⟩\langle0{,}5;\,0{,}5\rangle. Catena dei voti: P(G3=A∣G1=B)=0,6⋅0,2+0,2⋅0,6+0,2⋅0,2=0,28P(G_3=A\mid G_1=B)=0{,}6\cdot0{,}2+0{,}2\cdot0{,}6+0{,}2\cdot0{,}2=0{,}28, riga di T2\mathbf T^2 ⟨0,28; 0,44; 0,28⟩\langle0{,}28;\,0{,}44;\,0{,}28\rangle.
  • Smoothing (forward-backward): P(Xk∣e1:t)=α fk×bk+1:t\mathbf P(X_k\mid e_{1:t})=\alpha\,\mathbf f_k\times\mathbf b_{k+1:t}, bk+1:t=TOk+1bk+2:t\mathbf b_{k+1:t}=\mathbf T\mathbf O_{k+1}\mathbf b_{k+2:t}, bt+1:t=1\mathbf b_{t+1:t}=\mathbf 1; tutti gli istanti in O(t)O(t). Per u,u,¬uu,u,\neg u: b3:3=⟨0,31; 0,59⟩\mathbf b_{3:3}=\langle0{,}31;\,0{,}59\rangle, b2:3=⟨0,2307; 0,1663⟩\mathbf b_{2:3}=\langle0{,}2307;\,0{,}1663\rangle; pioggia 0,8620{,}862 (giorno 1), 0,7990{,}799 (giorno 2), 0,1910{,}191 (giorno 3). Con solo u1,u2u_1,u_2: giorno 11 0,8830{,}883, giorno 00 0,6530{,}653.
  • Verosimiglianza: st=OtT⊤st−1\mathbf s_t=\mathbf O_t\mathbf T^\top\mathbf s_{t-1} senza α\alpha, P(e1:t)=∑stP(e_{1:t})=\sum\mathbf s_t (anche prodotto dei fattori di normalizzazione): ombrello P(u1,u2)=0,55⋅0,639=0,3515P(u_1,u_2)=0{,}55\cdot0{,}639=0{,}3515; bambino 0,003260{,}00326 (Esercizio - Filtraggio in un HMM - il bambino e il pannolino (slide del corso)).
  • Robot: Tij=1/N(i)T_{ij}=1/N(i) per caselle adiacenti, 4242 caselle e prior 1/421/42; sensore a 44 bit con errore ε\varepsilon: P(et∣Xt=i)=(1−ε)4−diεdiP(e_t\mid X_t=i)=(1-\varepsilon)^{4-d_i}\varepsilon^{d_i}; con ε=0,2\varepsilon=0{,}2 si sbaglia almeno un bit il 59%59\% delle volte, ma dopo circa 2020 osservazioni il robot si localizza entro due caselle; con ε=0,4\varepsilon=0{,}4 l'errore resta alto.
  • Codice: forward(f, e) == O[e] @ T.T @ f normalizzato; smoothing combina i f con il messaggio all'indietro b = T @ O[e] @ b.
  • Errori tipici: usare T\mathbf T invece di T⊤\mathbf T^\top nella predizione; scordare α\alpha; scambiare filtraggio e smoothing; scegliere la sequenza degli stati individualmente più probabili al posto della più probabile; normalizzare a ogni passo quando serve P(e1:t)P(e_{1:t}).

Esercizi su questo argomento

Teoria collegata