Teoria informacji/TI Wykład 3: Różnice pomiędzy wersjami
Nie podano opisu zmian |
m Zastępowanie tekstu – „<math> ” na „<math>” |
||
(Nie pokazano 21 wersji utworzonych przez 5 użytkowników) | |||
Linia 1: | Linia 1: | ||
===Minimalna długość kodu=== | |||
{{definicja|[długość kodu]|długość_kodu|Dla danego kodu <math>\varphi</math>, '''długość kodu''' definiujemy jako | Jak widzieliśmy w [[Teoria informacji/TI Wykład 2#analiza_gry|analizie przykładu]] gry w zgadywanie, 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: | ||
{{definicja|[długość kodu]|długość_kodu|Dla danego kodu <math>\varphi</math>, '''średnią długość kodu''' definiujemy jako | |||
<center><math>L(\varphi ) = \sum_{s \in S} p(s) \cdot |\varphi (s)|</math></center>}} | |||
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 | Zauważmy, że na mocy Twierdzenia McMillana wystarczy, że znajdziemy minimum dla wszystkich kodów bezprefiksowych. | ||
{{twierdzenie||kod_entropia|Dla dowolnej skończonej przestrzeni probabilistycznej ''S'' | {{twierdzenie||kod_entropia|Dla dowolnej skończonej przestrzeni probabilistycznej ''S'' | ||
<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> | |||
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ęść | 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 | 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. | Znalezienie optymalnego kodu bezprefiksowego dla danego rozkładu prawdopodobieństwa nie jest wcale trudnym zadaniem. Algorytm rozwiązujący ten problem podał amerykański inżynier '''David A. Huffman (1925-1999)'''. | ||
{{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> | Jeśli <math>|S| \le |\Sigma|</math>, przypisz po prostu jakieś symbole obiektom z S. W przeciwnym wypadku: | ||
1. | 1. Jeśli <math>|\Sigma| > 2</math>, w razie konieczności uzupełnij S symbolami o prawdopodobieństwie 0, | ||
2. Wybierz <math>k=|\Sigma|</math> symboli <math>t_1, \ldots, t_k \in S</math> o minimalnych prawdopodobieństwach | 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. | |||
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>. | |||
4. Mając dane drzewo <math>T_{S'}</math> z poprzedniego punktu skonstruuj drzewo <math>T_S</math> w następujący sposób: | 4. Mając dane drzewo <math>T_{S'}</math> z poprzedniego punktu skonstruuj drzewo <math>T_S</math> w następujący sposób: | ||
Dodaj k synów do słowa <math>T_{S'}(\#)</math> i oznacz ich jako <math>t_1, \ldots, t_k</math>. | |||
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>\begin{align} | |||
s_1 s_1 & \mapsto 0 \\ | |||
s_1 s_2 & \mapsto 10\\ | |||
s_2 s_1 & \mapsto 110\\ | |||
s_2 s_2 & \mapsto 111 | |||
\end{align} | |||
</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> | |||
Średnia długość naszego kodowania dwuznakowych bloków będzie wynosić | Średnia długość naszego kodowania dwuznakowych bloków będzie wynosić | ||
<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> | |||
dla pewnego n? | |||
dla | 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. | |||
===Entropia przestrzeni produktowej=== | |||
Entropię <math>H(S^n)</math> możemy znaleźć przez nieco żmudne elementarne wyliczenia, ale wygodniej będzie skorzystać z ogólnych własności zmiennych losowych opisanych w | |||
[[Rachunek prawdopodobieństwa i statystyka/Wykład 7: Parametry rozkładów zmiennych losowych|wykładzie 7]] | |||
z [[Rachunek prawdopodobieństwa i statystyka| Rachunku prawdopodobieństwa i statystyki]]. | |||
Przypomnijmy że wartość | Przypomnijmy, że wartość oczekiwaną (zwaną też nadzieją matematyczną) | ||
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> | |||
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> | |||
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 zdarzenie <math>\psi(X)</math>'', czyli sumę ''p(s) '' po wszystkich <math>s \in S</math>, dla których zdanie <math>\psi(X(S))</math> jest spełnione. | |||
Przypominamy z Rachunku Prawdopodobieństwa | |||
(por. wspomniany [[Rachunek prawdopodobieństwa i statystyka/Wykład 7: Parametry rozkładów zmiennych losowych|wykład 7]]): | |||
{{fakt|[Liniowość wartości oczekiwanej]|wartość_oczekiwana|Jeśli ''X'' i ''Y'' są dowolnymi zmiennymi losowymi (określonymi na tej samej przestrzeni probabilistycznej), to dla dowolnych <math>\alpha , \beta \in \mathbb{R}</math>: | |||
<center><math>E (\alpha X + \beta Y) = \alpha E X + \beta E Y</math></center>}} | |||
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 | |||
<center><math>p(s,q)=p(s) \cdot p(q)</math>.</center> | |||
Dla zmiennych losowych <math>X : S \to \mathbb{R}</math> i <math>Y : Q \to \mathbb{R}</math>, definiujemy zmienne <math>\hat{X}</math>, <math>\hat{Y}</math> na <math>S \times Q</math> jako | |||
<center><math>\hat{X} (s,q) = X(s)</math></center> | |||
<center><math>\hat{Y} (s,q) = Y(q)</math></center> | |||
: | Oczywiście mamy: | ||
<center><math>p (\hat{X} = t) = \sum_{\hat{X}(s,q) = t} p (s,q) = \sum_{ {X}(s) = t} \; \sum_{q \in Q} p(s) \cdot p(q)</math></center> | |||
<center><math>= \sum_{ {X}(s) = t} p(s) = P(X = t)</math></center> | |||
i analogicznie <math>p (\hat{Y} = t) = p (Y = t)</math>. | i analogicznie <math>p (\hat{Y} = t) = p (Y = t)</math>. | ||
Zatem <math>E \hat{X} = E X</math> i <math>E \hat{Y} = E Y</math>. Z liniowości wartości oczekiwanej | Zatem <math>E \hat{X} = E X</math> i <math>E \hat{Y} = E Y</math>. Z liniowości wartości oczekiwanej | ||
<center><math>E (\hat{X} + \hat{Y}) = E \hat{X} + E \hat{Y} = EX + EY</math></center> | |||
Niech teraz <math>X: s \mapsto \log_r \frac{1}{p(s)}</math> i <math>Y: q \mapsto \log_r \frac{1}{p(q)}</math>. | Niech teraz <math>X: s \mapsto \log_r \frac{1}{p(s)}</math> i <math>Y: q \mapsto \log_r \frac{1}{p(q)}</math>. | ||
Zgodnie z [[Teoria informacji/TI Wykład 2#entropia|definicją entropii]], | |||
mamy więc <math>H_r(S) = E X =E \hat{X}</math>, <math>H_r(Q) = E Y = E \hat{Y}</math>. Z przyjętych definicji i własności funkcji <math>\log</math> otrzymujemy | |||
<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> | |||
A zatem <math>(\hat{X} + \hat{Y})</math> jest dokładnie tą zmienną losową 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> | |||
W konsekwencji: | W konsekwencji: | ||
{{fakt||entropia_produktowa|Niech <math>S^n</math> będzie ''n''-tą potęgą przestrzeni ''S'' z prawdopodobieństwem <math>p(s_1,\ldots ,s_n) = p(s_1) \cdot \ldots \cdot p(s_n)</math>. Wtedy | |||
<center><math>H_rS^n=n \cdot H_rS</math>.</center>}} |
Aktualna wersja na dzień 22:16, 11 wrz 2023
Minimalna długość kodu
Jak widzieliśmy w analizie przykładu gry w zgadywanie, jeśli wszystkie prawdopodobieństwa są potęgami , to entropia jest równa średniej długości optymalnego kodu. Udowodnimy, że zawsze stanowi ona dolne ograniczenie:
Definicja [długość kodu]
Dla danego S i parametru niech będzie minimum ze wszystkich dla dowolnego kodu , gdzie . Zauważmy, że na mocy Twierdzenia McMillana wystarczy, że znajdziemy minimum dla wszystkich kodów bezprefiksowych.
Twierdzenie
Dowód
Rozważmy dowolny kod gdzie . Pokażmy, że
Wystarczy w tym celu użyć Złotego Lematu dla i .
Pozostało jedynie pokazać drugą część twierdzenia. Jeśli , to znaczy, że dla pewnego kodu . Znów na podstawie Złotego Lematu dostajemy dla wszystkich .
Z drugiej strony, jeśli wszystkie prawdopodobieństwa są postaci , to na mocy nierówności Krafta istnieje kod z , i dla tego kodu . A zatem , czyli musi zachodzić równość.
Znalezienie optymalnego kodu bezprefiksowego dla danego rozkładu prawdopodobieństwa nie jest wcale trudnym zadaniem. Algorytm rozwiązujący ten problem podał amerykański inżynier David A. Huffman (1925-1999).
Algorytm Huffmana (dla zbioru kodowanego S i alfabetu ) Jeśli , przypisz po prostu jakieś symbole obiektom z S. W przeciwnym wypadku: 1. Jeśli , w razie konieczności uzupełnij S symbolami o prawdopodobieństwie 0, tak aby . 2. Wybierz symboli o minimalnych prawdopodobieństwach. 3. Uruchom rekurencyjnie ten algorytm dla zbioru z prawdopodobieństwami dla i . 4. Mając dane drzewo z poprzedniego punktu skonstruuj drzewo w następujący sposób: Dodaj k synów do słowa i oznacz ich jako .
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 . 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 . Uzyskuje się to przez lekkie poszerzenie samego pojęcia kodu.
Przykład [Kodowanie par]
Niech z . Oczywiście . (Jednocześnie łatwo oszacować, że ). Oznacza to, że nie możemy zakodować wiadomości w postaci krótszej niż sama . Wyobraźmy sobie jednak następujące kodowanie par:
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 . Rozważmy jako produkt (probabilistyczny) przestrzeni, w którym
Średnia długość naszego kodowania dwuznakowych bloków będzie wynosić
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ć
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 .
Najpierw jednak policzmy entropię przestrzeni interpretowanej jako przestrzeń produktowa.
Entropia przestrzeni produktowej
Entropię możemy znaleźć przez nieco żmudne elementarne wyliczenia, ale wygodniej będzie skorzystać z ogólnych własności zmiennych losowych opisanych w wykładzie 7 z Rachunku prawdopodobieństwa i statystyki.
Przypomnijmy, że wartość oczekiwaną (zwaną też nadzieją matematyczną) zmiennej losowej można przedstawić na dwa równoważne sposoby:
Drugi sposób często zapisuje się prościej jako
przyjmując, że suma dowolnie wielu zer daje 0.
Używana tutaj notacja jest szczególnym przypadkiem notacji , określającej prawdopodobieństwo że zachodzi zdarzenie , czyli sumę p(s) po wszystkich , dla których zdanie jest spełnione.
Przypominamy z Rachunku Prawdopodobieństwa (por. wspomniany wykład 7):
Fakt [Liniowość wartości oczekiwanej]
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 będzie przestrzenią produktową z prawdopodobieństwem określonym następująco
Dla zmiennych losowych i , definiujemy zmienne , na jako
Oczywiście mamy:
i analogicznie . Zatem i . Z liniowości wartości oczekiwanej
Niech teraz i . Zgodnie z definicją entropii, mamy więc , . Z przyjętych definicji i własności funkcji otrzymujemy
A zatem jest dokładnie tą zmienną losową na , której wartość oczekiwana jest entropią . Czyli
W konsekwencji:
Fakt