Viterbi
Viterbi
Viterbi
Doriano-Boris POUGAZA Dirig par le Prof. Bernard CHALMOND Modlisation Analyse des DOnnes et Calcul Scientique 20 dcembre 2007
0.1
Introduction
Dans ce TP nous cherchons mettre en vidence un algorithme cace et rapide en temps de calcul permettant de faire une estimation baysienne. Cet algorithme dit de Viterbi, du nom d'Andrew J. Viterbi qui l'a dvelopp, permet de corriger les erreurs survenues lors d'une transmission travers un canal bruit (dans une certaine mesure). Son utilisation s'appuie sur la connaissance du canal bruit (la probabilit qu'une information ait t modie en une autre) et permet de simplier radicalement la complexit de la recherche du plus probable message d'origine(d'exponentielle, cette complexit devient linaire). Nous n'exposerons pas sur la complexit de l'algorithme.
0.2
Objectif et motivation
L'algorithme de Viterbi est utilis dans les cas o le processus est modlisable comme une chane de Markov discrte tats nis. Son objectif est de trouver la squence d'tats la plus probable ayant produit la squence mesure. On rappelle qu'une chane de Markov ni en temps discret est une squence X = (X1 , X2 , ..., XT ) de variables alatoires. Les Xt prennent leurs valeurs dans l'espace d'tat S = (s1 , s2 , ..., sN ), et ne dpendent que de Xt1 seul. Il en dcoule les deux proprits suivantes :
P (Xt = sk |X1 , X2 , X3 , . . . , Xt1 ) = P (Xt = st |Xt1 ) = P (X2 = st |X1 )stationnaire,
(1) (2)
o sk est un tat quelconque du processus et P la distribution de probabilit sur les tats ; la valeur Xt tant l'tat du processus au moment t.
0.2.1 Cadre du TP
En pratique la squence X n'est pas observable. On observe plutt une variable alatoire Yt qui peut tre vue comme une "dgradation" de Xt . On dit alors que X est une chaine de Markov cache (HMM, Hidden Markov Model).
Problme
Nous cherchons retrouver le chemin X = (X1 , X2 , ..., Xn ) partir de Y = (Y1 , Y2 , ..., Yn ). Le problme tant alors de faire une estimation de X , partir de Y .
On ferra alors :
X = ArgMax P ( X | Y ).
X
(3)
Alors comment calculer X ? On voit clairement le problme auquel on ferra face en essayant d'estimer toutes les congurations possibles. En exemple pour T = 100 et N = 3, le nombre de congurations est de 2100 . La proposition ingnieuse fournit par l'algorithme de Viterbi permet de trouver la squence d'tat la plus probable et dvie ainsi le problme non praticable qui consistait examiner tous les chemins. Sachant que
P (X , Y ) P (X | Y ) = (4) , P(Y ) et du fait que P ( Y ) est indpendante de X alors l'quation (3) peut tre recrite de la forme : X = ArgMax P ( Y | X )P ( X )
X PY ( X )
(5)
En fait le maximum ne dpend pas de l'expression en Y . En utilisant la formule de Kolmogorov et en notant que X est une chane de Markov, on a : P ( Y |X ) = PY ( X ) = (
n n
P (Yt = yt |Xt = xt ),
t=1 n
(9)
(10)
Nous allons utiliser la forme (10) pour l'implmentation, en considrant log PY ( X ), et nalement pour trouver X , on aura maximiser la fonction :
L( X ) = log PY ( X )
n
(11)
log(P (yt |xt P (xt |xt1 ).
t=2
(12)
Lt (xt , xt1 ).
t=2
(13)
0.3
On implmente la recherche du maximum de L( X , avec MATLAB dans le o cas n=3 X = Arg Max L(x1 , x2 , x3 )
(14)
%Longueur de la chaine de Markov %*************************** n = 3; %Dimension des valeurs %******************* p = 2; %Initialisation de la fonction L ( en faisant un choix arbitraire): %****************************************************************** L1(1) = 10; L1(2) = 20; L2(1,1) = 11; L2(1,2) = 12; L2(2,1) = 21; L2(2,2) = 22; L3=L2; for x1 = 1:p for x2 = 1:p for x3 = 1:p L(x1,x2,x3) = L1(x1) + L2(x1,x2) + L3(x2,x3); end end end
%Niveau 1: %********* for x2 = 1:p for x1 = 1:p Lrond1(x1,x2) = L1(x1) + L2(x1,x2); end end %max1 = l(x1chap(x2),x2) = lchap(x2): %************************************* x1chap = []; for x2 = 1:p [max1,x1_chap(x2)]=max(Lrond1(:,x2)); Lrond1_chap(x2)=Lrond1(x1_chap(x2),x2); end x1chap =max(x1): %***************** x1chap = [x1chap,x1_chap]; %Niveau2: %******** for x3 = 1:p for x2 = 1:p Lrond2(x2,x3) = L3(x2,x3) + Lrond1_chap(x2); end end %max2 = lchap(x2chap(x3),x3) = lchap(x3): %**************************************** x2chap = []; for x3 = 1:p [max2,x2_chap(x3)]=max(Lrond2(:,x3)); Lrond2_chap(x3)=Lrond2(x2_chap(x3),x3); end %x2chap = max(x2): %***************** x2chap = [x2chap,x2_chap]; x3chap = []; for x3 = 1:p Lrond3(x2chap(x3),x3) = Lrond2(x2chap(x3),x3); [max3,x3_chap(x3)]=max(Lrond3(:,x3)); Lrond3_chap(x3)=Lrond3(x3_chap(x3),x3);
end
x3chap = [x3chap,x3_chap];
0.4
Conclusion
Une des applications phares de l'algorithme est aussi l'estimation de la squence d'tats (cachs) la plus probable ayant t gnre par un modle de Markov cach dans le cas du problme de dcodage. La reconnaissance de la parole et la bio-informatique utilisent abondamment les modles de Markov cachs et sont donc aussi des domaines o l'algorithme de Viterbi trouve une application. .