Teoria informacji/TI Wykład 3: Różnice pomiędzy wersjami

Z Studia Informatyczne
Przejdź do nawigacjiPrzejdź do wyszukiwania
mNie podano opisu zmian
Dorota (dyskusja | edycje)
Nie podano opisu zmian
Linia 1: Linia 1:
Jak widzieliśmy na przykładzie z grą, jeśli wszystkie prawdopodobieństwa są potęgami <math>\frac{1}{2}</math>, to entropia jest równa średniej długości optymalnego kodu. Udowodnimy że zawsze stanowi ona dolne ograniczenie:
Jak widzieliśmy na przykładzie z grą, jeśli wszystkie prawdopodobieństwa są potęgami <math>\frac{1}{2}</math>, to entropia jest równa średniej długości optymalnego kodu. Udowodnimy, że zawsze stanowi ona dolne ograniczenie:




Linia 6: Linia 6:


Dla danego S i parametru <math>r>1</math> niech <math>L_r(S)</math> będzie minimum ze wszystkich <math>L(\varphi)</math> dla dowolnego kodu <math>\varphi:S \to \Sigma^*</math>, gdzie <math>|\Sigma|=r</math>.
Dla danego S i parametru <math>r>1</math> niech <math>L_r(S)</math> będzie minimum ze wszystkich <math>L(\varphi)</math> dla dowolnego kodu <math>\varphi:S \to \Sigma^*</math>, gdzie <math>|\Sigma|=r</math>.
Zauważmy że na mocy Twierdzenia Mcmillana wystarczy że znajdziemy minimum dla wszystkich kodów bezprefiksowych.
Zauważmy, że na mocy Twierdzenia McMillana wystarczy, że znajdziemy minimum dla wszystkich kodów bezprefiksowych.




Linia 12: Linia 12:
<center><math>H_r(S) \le L_r(S)</math></center>
<center><math>H_r(S) \le L_r(S)</math></center>


i równość zachodzi wtedy i tylko wtedy gdy wszystkie prawdopodobieństwa ''p(s)'' są potęgami <math>\frac{1}{r}</math>}}  
i równość zachodzi wtedy i tylko wtedy, gdy wszystkie prawdopodobieństwa ''p(s)'' są potęgami <math>\frac{1}{r}</math>}}  


{{dowod||do_kod_entropia|
{{dowod||do_kod_entropia|
Rozważmy dowolny kod <math>\varphi:S \to \Sigma^*</math> gdzie <math>|\Sigma|=r</math>. Pokażmy że
Rozważmy dowolny kod <math>\varphi:S \to \Sigma^*</math> gdzie <math>|\Sigma|=r</math>. Pokażmy, że
<center><math>H_r(S) \le L(\varphi)</math></center>
<center><math>H_r(S) \le L(\varphi)</math></center>


Wystarczy w tym celu użyć Złotego Lematu dla <math>x_i=p(s_i)</math> i <math>y_i=\frac{1}{r^{|\varphi(s_i)|}}</math>.
Wystarczy w tym celu użyć Złotego Lematu dla <math>x_i=p(s_i)</math> i <math>y_i=\frac{1}{r^{|\varphi(s_i)|}}</math>.


Pozostało jedynie pokazać drugą część twierdzenie. Jeśli <math>H_r(S)=L_r(S)</math>, to znaczy że <math>H_r(S)=L(\varphi)</math> dla pewnego kodu <math>\varphi</math>. Znów na podstawie Złotego Lematu dostajemy <math>p(s) = \frac{1}{r^{|\varphi (s)|}}</math> dla wszystkich <math>s \in S</math>.
Pozostało jedynie pokazać drugą część twierdzenia. Jeśli <math>H_r(S)=L_r(S)</math>, to znaczy, że <math>H_r(S)=L(\varphi)</math> dla pewnego kodu <math>\varphi</math>. Znów na podstawie Złotego Lematu dostajemy <math>p(s) = \frac{1}{r^{|\varphi (s)|}}</math> dla wszystkich <math>s \in S</math>.
Z drugiej strony, jeśli wszystkie prawdopodobieństwa są postaci <math>\frac{1}{r^{\ell(s)}}</math>, to na mocy nierówności Krafta, istnieje kod <math>\varphi</math> z <math>|\varphi(s)|=\ell(s)</math>, i dla tego kodu <math>L(\varphi)=H_r(S)</math>. A zatem <math>L_r(S) \le H_r(S)</math>, czyli musi zachodzić równość.}}
Z drugiej strony, jeśli wszystkie prawdopodobieństwa są postaci <math>\frac{1}{r^{\ell(s)}}</math>, to na mocy nierówności Krafta istnieje kod <math>\varphi</math> z <math>|\varphi(s)|=\ell(s)</math>, i dla tego kodu <math>L(\varphi)=H_r(S)</math>. A zatem <math>L_r(S) \le H_r(S)</math>, czyli musi zachodzić równość.}}




Znalezienie optymalnego kodu bezprefiksowego dla danego rozkładu prawdopodobieństwa nie jest wcale trudnym zadaniem. Prosty algorytm rozwiązujący ten problem podał Huffman. Wygląda on następująco:
Znalezienie optymalnego kodu bezprefiksowego dla danego rozkładu prawdopodobieństwa nie jest wcale trudnym zadaniem. Prosty algorytm rozwiązujący ten problem podał Huffman. Algorytm wygląda następująco:


{{kotwica|huffman|}}
{{kotwica|huffman|}}
  '''Algorytm Huffmana'''
  '''Algorytm Huffmana'''
  (dla zbioru kodowanego S i alfabetu <math>\Sigma</math>)
  (dla zbioru kodowanego S i alfabetu <math>\Sigma</math>)
  Jeśli <math>|S| \le |\Sigma|</math> to przypisz po prostu jakieś symbole obiektom z S. W przeciwnym wypadku
  Jeśli <math>|S| \le |\Sigma|</math>, przypisz po prostu jakieś symbole obiektom z S. W przeciwnym wypadku:
  1. Jeśli <math>|\Sigma| > 2</math>, w razie konieczności uzupełnij S symbolami o prawdopodobieństwie 0,  
  1. Jeśli <math>|\Sigma| > 2</math>, w razie konieczności uzupełnij S symbolami o prawdopodobieństwie 0,  
     tak aby <math>|S| \mod (|\Sigma| -1) = 1</math>
     tak aby <math>|S| \mod (|\Sigma| -1) = 1</math>.
  2. Wybierz <math>k=|\Sigma|</math> symboli <math>t_1, \ldots, t_k \in S</math> o minimalnych prawdopodobieństwach
  2. Wybierz <math>k=|\Sigma|</math> symboli <math>t_1, \ldots, t_k \in S</math> o minimalnych prawdopodobieństwach.
  3. Uruchom rekurencyjnie ten algorytm dla zbioru <math>S'=S-\{t_1, \ldots, t_k\}+\{\#\}</math> z prawdopodobieństwami  
  3. Uruchom rekurencyjnie ten algorytm dla zbioru <math>S'=S-\{t_1, \ldots, t_k\}+\{\#\}</math> z prawdopodobieństwami  
     <math>q_s=p_s</math> dla <math>s \in S</math> i <math>q_\# = p_{t_1} + \ldots + p_{t_k}</math>.
     <math>q_s=p_s</math> dla <math>s \in S</math> i <math>q_\# = p_{t_1} + \ldots + p_{t_k}</math>.
Linia 39: Linia 39:




Dla przedstawionej powyżej definicji kodu problem mamy zatem rozwiązany. Niestety w większości wypadków długość takiego
Dla przedstawionej powyżej definicji kodu problem mamy zatem rozwiązany. Niestety, w większości wypadków długość takiego
optymalnego kodu będzie się różniła od dolnej granicy <math>H_r(S)</math>. Na szczęście możemy ten problem obejść.
optymalnego kodu będzie się różniła od dolnej granicy <math>H_r(S)</math>. Na szczęście możemy ten problem obejść.
Okazuje się że dla dowolnego zadanego ''S'' i ''p'' można uzyskiwać mniejszą średnią długość kodu, dowolnie zbliżając się do <math>H_r(S)</math>. Uzyskuje się to przez lekkie poszerzenie samego pojęcia kodu.
Okazuje się, że dla dowolnego zadanego ''S'' i ''p'' można uzyskiwać mniejszą średnią długość kodu, dowolnie zbliżając się do <math>H_r(S)</math>. Uzyskuje się to przez lekkie poszerzenie samego pojęcia kodu.




{{przyklad|[Kodowanie par]|kodowanie par|
{{przyklad|[Kodowanie par]|kodowanie par|
Niech <math>S=\{s_1,s_2\}</math> z <math>p(s_1)=\frac{3}{4}, p(s_2)=\frac{1}{4}</math>. Oczywiście <math>L_2(S)=1</math>. (Jednocześnie łatwo oszacować że <math>H_2(S)<1</math>).
Niech <math>S=\{s_1,s_2\}</math> z <math>p(s_1)=\frac{3}{4}, p(s_2)=\frac{1}{4}</math>. Oczywiście <math>L_2(S)=1</math>. (Jednocześnie łatwo oszacować, że <math>H_2(S)<1</math>).
Oznacza to że nie możemy zakodować wiadomości <math>\alpha \in \Sigma^*</math> w postaci krótszej niż sama <math>\alpha</math>. Wyobraźmy sobie jednak następujące kodowanie par:
Oznacza to, że nie możemy zakodować wiadomości <math>\alpha \in \Sigma^*</math> w postaci krótszej niż sama <math>\alpha</math>. Wyobraźmy sobie jednak następujące kodowanie par:
<center><math>\aligned
<center><math>\aligned
  s_1 s_1 & \mapsto 0 \\
  s_1 s_1 & \mapsto 0 \\
Linia 55: Linia 55:
</math></center>
</math></center>


Nie jest to w dosłownym sensie kod dla ''S'', ale wygląda na to że możemy go użyć do zakodowania dowolnych wiadomości o parzystej długości. Faktycznie, zgodnie z definicją to ''jest'' kod dla <math>S^2</math>. Rozważmy <math>S^2 = S \times  S</math> jako produkt (probabilistyczny) przestrzeni, w którym
Nie jest to w dosłownym sensie kod dla ''S'', ale wygląda na to, że możemy go użyć do zakodowania dowolnych wiadomości o parzystej długości. Faktycznie, zgodnie z definicją to ''jest'' kod dla <math>S^2</math>. Rozważmy <math>S^2 = S \times  S</math> jako produkt (probabilistyczny) przestrzeni, w którym
<center><math>p \left(  s_i, s_j \right) = p(s_i) \cdot p(s_j)</math></center>
<center><math>p \left(  s_i, s_j \right) = p(s_i) \cdot p(s_j)</math></center>


Linia 61: Linia 61:
<center><math>\left( \frac{3}{4} \right)^2 \cdot 1 + \frac{3}{4} \cdot \frac{1}{4}\cdot (2 + 3) + \left( \frac{1}{4} \right)^2 \cdot 3 = \frac{9}{16} + \frac{15}{16} + \frac{3}{16} = \frac{27}{16} < 2</math></center>}}
<center><math>\left( \frac{3}{4} \right)^2 \cdot 1 + \frac{3}{4} \cdot \frac{1}{4}\cdot (2 + 3) + \left( \frac{1}{4} \right)^2 \cdot 3 = \frac{9}{16} + \frac{15}{16} + \frac{3}{16} = \frac{27}{16} < 2</math></center>}}


Jak można się spodziewać, podążając tym tropem dla kodów złożonych z trzech, czterech i więcej znaków będziemy mogli otrzymać coraz efektywniejsze kodowania. Czy jednak możemy zejść poniżej granicy entropii, czyli uzyskać
Jak można się spodziewać, podążając tym tropem dla kodów złożonych z trzech, czterech i więcej znaków, będziemy mogli otrzymać coraz efektywniejsze kodowania. Czy jednak możemy zejść poniżej granicy entropii, czyli uzyskać
<center><math>\frac{L_r (S^n )}{n} < H_r (S)</math></center>
<center><math>\frac{L_r (S^n )}{n} < H_r (S)</math></center>
dla pewnego n?
dla pewnego n?


Udowodnimy później że to jest niemożliwe, ale Pierwsze Twierdzenie Shannona pokaże że możemy zbliżyć się do niej dowolnie blisko, dla <math>n \to \infty</math>.
Udowodnimy później, że to jest niemożliwe, ale Pierwsze Twierdzenie Shannona pokaże, że możemy zbliżyć się do niej dowolnie blisko dla <math>n \to \infty</math>.


Najpierw jednak policzmy entropię <math>H(S^n)</math> przestrzeni <math>S^n</math> interpretowanej jako przestrzeń produktowa. Można to zrobić przez żmudne elementarne wyliczenia, ale spróbujemy uzyskać wynik na podstawie ogólnych własności zmiennych losowych.
Najpierw jednak policzmy entropię <math>H(S^n)</math> przestrzeni <math>S^n</math> interpretowanej jako przestrzeń produktowa. Można to zrobić przez żmudne elementarne wyliczenia, ale spróbujemy uzyskać wynik na podstawie ogólnych własności zmiennych losowych.


Przypomnijmy że wartość oczekiwana zmiennej losowej <math>X:S \to \mathbb{R}</math> można przedstawić na dwa równoważne sposoby:
Przypomnijmy, że wartość oczekiwaną zmiennej losowej <math>X:S \to \mathbb{R}</math> można przedstawić na dwa równoważne sposoby:
<center><math>E X = \sum_{s \in S} p(s) \cdot X(s) = \sum_{t \in X(S) \subseteq \mathbb(R) }  t \cdot p (X = t)</math></center>
<center><math>E X = \sum_{s \in S} p(s) \cdot X(s) = \sum_{t \in X(S) \subseteq \mathbb(R) }  t \cdot p (X = t)</math></center>
Drugi sposób często zapisuje się prościej jako
Drugi sposób często zapisuje się prościej jako
<center><math> \sum_{t \in \mathbb(R) }  t \cdot p (X = t)</math></center>
<center><math> \sum_{t \in \mathbb(R) }  t \cdot p (X = t)</math></center>


przyjmując że suma dowolnie wielu zer daje 0.
przyjmując, że suma dowolnie wielu zer daje 0.


Używana tutaj notacja <math>p(X=t)</math> jest szczególnym przypadkiem notacji <math>p (\psi (X))</math>, określającej ''prawdopodobieństwo że zachodzi <math>\psi(X)</math>'', czyli sumę ''p(s) '' po wszystkich ''s'' dla których <math>\psi(X(S))</math> jest spełnione.
Używana tutaj notacja <math>p(X=t)</math> jest szczególnym przypadkiem notacji <math>p (\psi (X))</math>, określającej ''prawdopodobieństwo że zachodzi <math>\psi(X)</math>'', czyli sumę ''p(s) '' po wszystkich ''s'' dla których <math>\psi(X(S))</math> jest spełnione.
Linia 84: Linia 84:




Rozważmy teraz przypadek gdy mamy dwie przestrzenie probabilistyczne ''S'' i ''Q''. (Zwyczajowo, jeśli nie powoduje to niejasności, będziemy używać tej samej litery ''p'' na określenie prawdopodobieństwa we wszystkich przestrzeniach).
Rozważmy teraz przypadek, gdy mamy dwie przestrzenie probabilistyczne ''S'' i ''Q''. (Zwyczajowo, jeśli nie powoduje to niejasności, będziemy używać tej samej litery ''p'' na określenie prawdopodobieństwa we wszystkich przestrzeniach).


Niech <math>S \times Q</math> będzie przestrzenią produktową, z prawdopodobieństwem określonym następująco
Niech <math>S \times Q</math> będzie przestrzenią produktową, z prawdopodobieństwem określonym następująco
Linia 104: Linia 104:
<center><math>(\hat{X} + \hat{Y}) (s,q) =  \log_r \frac{1}{p(s)} + \log_r  \frac{1}{p(q)} = \log_r \frac{1}{p(s)} \cdot \frac{1}{p(q)}= \log_r \frac{1}{p(s,q)}</math></center>
<center><math>(\hat{X} + \hat{Y}) (s,q) =  \log_r \frac{1}{p(s)} + \log_r  \frac{1}{p(q)} = \log_r \frac{1}{p(s)} \cdot \frac{1}{p(q)}= \log_r \frac{1}{p(s,q)}</math></center>


Ale zgodnie z definicją, to jest dokładnie zmienna losowa na <math>S \times Q</math> której wartość oczekiwana jest entropią <math>S \times Q</math>. Czyli  
Ale zgodnie z definicją, jest to dokładnie zmienna losowa na <math>S \times Q</math>, której wartość oczekiwana jest entropią <math>S \times Q</math>. Czyli  
<center><math>H_r (S \times Q) = E (\hat{X} + \hat{Y}) = H_r(S)+H_r(Q)</math>.</center>
<center><math>H_r (S \times Q) = E (\hat{X} + \hat{Y}) = H_r(S)+H_r(Q)</math>.</center>


W konsekwencji:
W konsekwencji:
<center><math>H_rS^n=n \cdot H_rS</math></center>
<center><math>H_rS^n=n \cdot H_rS</math></center>

Wersja z 18:44, 17 wrz 2006

Jak widzieliśmy na przykładzie z grą, jeśli wszystkie prawdopodobieństwa są potęgami 12, to entropia jest równa średniej długości optymalnego kodu. Udowodnimy, że zawsze stanowi ona dolne ograniczenie:


Definicja [długość kodu]

Dla danego kodu φ, długość kodu definiujemy jako
L(φ)=sSp(s)|φ(s)|

Dla danego S i parametru r>1 niech Lr(S) będzie minimum ze wszystkich L(φ) dla dowolnego kodu φ:SΣ*, gdzie |Σ|=r. Zauważmy, że na mocy Twierdzenia McMillana wystarczy, że znajdziemy minimum dla wszystkich kodów bezprefiksowych.


Twierdzenie

Dla dowolnej skończonej przestrzeni probabilistycznej S
Hr(S)Lr(S)
i równość zachodzi wtedy i tylko wtedy, gdy wszystkie prawdopodobieństwa p(s) są potęgami 1r

Dowód

Rozważmy dowolny kod φ:SΣ* gdzie |Σ|=r. Pokażmy, że

Hr(S)L(φ)

Wystarczy w tym celu użyć Złotego Lematu dla xi=p(si) i yi=1r|φ(si)|.

Pozostało jedynie pokazać drugą część twierdzenia. Jeśli Hr(S)=Lr(S), to znaczy, że Hr(S)=L(φ) dla pewnego kodu φ. Znów na podstawie Złotego Lematu dostajemy p(s)=1r|φ(s)| dla wszystkich sS.

Z drugiej strony, jeśli wszystkie prawdopodobieństwa są postaci 1r(s), to na mocy nierówności Krafta istnieje kod φ z |φ(s)|=(s), i dla tego kodu L(φ)=Hr(S). A zatem Lr(S)Hr(S), czyli musi zachodzić równość.


Znalezienie optymalnego kodu bezprefiksowego dla danego rozkładu prawdopodobieństwa nie jest wcale trudnym zadaniem. Prosty algorytm rozwiązujący ten problem podał Huffman. Algorytm wygląda następująco:

Algorytm Huffmana
(dla zbioru kodowanego S i alfabetu Σ)
Jeśli |S||Σ|, przypisz po prostu jakieś symbole obiektom z S. W przeciwnym wypadku:
1. Jeśli |Σ|>2, w razie konieczności uzupełnij S symbolami o prawdopodobieństwie 0, 
   tak aby |S|mod(|Σ|1)=1.
2. Wybierz k=|Σ| symboli t1,,tkS o minimalnych prawdopodobieństwach.
3. Uruchom rekurencyjnie ten algorytm dla zbioru S=S{t1,,tk}+{#} z prawdopodobieństwami 
   qs=ps dla sS i q#=pt1++ptk.
4. Mając dane drzewo TS z poprzedniego punktu skonstruuj drzewo TS w następujący sposób: 
   Dodaj k synów do słowa TS(#) i oznacz ich jako t1,,tk.


Dla przedstawionej powyżej definicji kodu problem mamy zatem rozwiązany. Niestety, w większości wypadków długość takiego optymalnego kodu będzie się różniła od dolnej granicy Hr(S). Na szczęście możemy ten problem obejść. Okazuje się, że dla dowolnego zadanego S i p można uzyskiwać mniejszą średnią długość kodu, dowolnie zbliżając się do Hr(S). Uzyskuje się to przez lekkie poszerzenie samego pojęcia kodu.


Przykład [Kodowanie par]

Niech S={s1,s2} z p(s1)=34,p(s2)=14. Oczywiście L2(S)=1. (Jednocześnie łatwo oszacować, że H2(S)<1). Oznacza to, że nie możemy zakodować wiadomości αΣ* w postaci krótszej niż sama α. Wyobraźmy sobie jednak następujące kodowanie par:

Parser nie mógł rozpoznać (nieznana funkcja „\aligned”): {\displaystyle \aligned s_1 s_1 & \mapsto 0 \\ s_1 s_2 & \mapsto 10\\ s_2 s_1 & \mapsto 110\\ s_2 s_2 & \mapsto 111 \endaligned }

Nie jest to w dosłownym sensie kod dla S, ale wygląda na to, że możemy go użyć do zakodowania dowolnych wiadomości o parzystej długości. Faktycznie, zgodnie z definicją to jest kod dla S2. Rozważmy S2=S×S jako produkt (probabilistyczny) przestrzeni, w którym

p(si,sj)=p(si)p(sj)

Średnia długość naszego kodowania dwuznakowych bloków będzie wynosić

(34)21+3414(2+3)+(14)23=916+1516+316=2716<2

Jak można się spodziewać, podążając tym tropem dla kodów złożonych z trzech, czterech i więcej znaków, będziemy mogli otrzymać coraz efektywniejsze kodowania. Czy jednak możemy zejść poniżej granicy entropii, czyli uzyskać

Lr(Sn)n<Hr(S)

dla pewnego n?

Udowodnimy później, że to jest niemożliwe, ale Pierwsze Twierdzenie Shannona pokaże, że możemy zbliżyć się do niej dowolnie blisko dla n.

Najpierw jednak policzmy entropię H(Sn) przestrzeni Sn interpretowanej jako przestrzeń produktowa. Można to zrobić przez żmudne elementarne wyliczenia, ale spróbujemy uzyskać wynik na podstawie ogólnych własności zmiennych losowych.

Przypomnijmy, że wartość oczekiwaną zmiennej losowej X:S można przedstawić na dwa równoważne sposoby:

EX=sSp(s)X(s)=tX(S)(R)tp(X=t)

Drugi sposób często zapisuje się prościej jako

t(R)tp(X=t)

przyjmując, że suma dowolnie wielu zer daje 0.

Używana tutaj notacja p(X=t) jest szczególnym przypadkiem notacji p(ψ(X)), określającej prawdopodobieństwo że zachodzi ψ(X), czyli sumę p(s) po wszystkich s dla których ψ(X(S)) jest spełnione.

Przypominamy z Rachunku Prawdopodobieństwa:

Fakt [Liniowość wartości oczekiwanej]

Jeśli X i Y są dowolnymi zmiennymi losowymi (określonymi na tej samej przestrzeni probabilistycznej), to dla dowolnych α,β(R):
E(αX+βY)=αEX+βEY


Rozważmy teraz przypadek, gdy mamy dwie przestrzenie probabilistyczne S i Q. (Zwyczajowo, jeśli nie powoduje to niejasności, będziemy używać tej samej litery p na określenie prawdopodobieństwa we wszystkich przestrzeniach).

Niech S×Q będzie przestrzenią produktową, z prawdopodobieństwem określonym następująco

p(s,q)=p(s)p(q)

Dla zmiennych losowych X:S(R) i Y:Q(R), definiujemy zmienne (^X), (^Y) na S×Q jako

X^(s,q)=X(s)
Y^(s,q)=Y(q)

Oczywiście mamy:

p(X^=t)=X^(s,q)=tp(s,q)=X(s)=tqQp(s)p(q)=X(s)=tp(s)=P(X=t)

i analogicznie p(Y^=t)=p(Y=t). Zatem EX^=EX i EY^=EY. Z liniowości wartości oczekiwanej

E(X^+Y^)=EX^+EY^=EX+EY

Niech teraz X:slogr1p(s) i Y:qlogr1p(q). Rozkład sumy tych zmiennych będzie miał postać

(X^+Y^)(s,q)=logr1p(s)+logr1p(q)=logr1p(s)1p(q)=logr1p(s,q)

Ale zgodnie z definicją, jest to dokładnie zmienna losowa na S×Q, której wartość oczekiwana jest entropią S×Q. Czyli

Hr(S×Q)=E(X^+Y^)=Hr(S)+Hr(Q).

W konsekwencji:

HrSn=nHrS