Coding은 데이터 압축, 암호화, 오류감지 및 수정, 데이터 전송 및 저장에 사용되는 이론이다. 주된 목적은 데이터의 패턴을 분석해서 압축하여 통신을 가능하게 하는 것이다.
1. Source coding: Data compression
데이터 압축의 목적으로 사용되는 coding의 경우, 가장 빈번하게 나오는 결과에는 짧은 표현을, 가장 덜 발생하는 결과에는 상대적으로 긴 표현을 주어 압축한다.
(ex. 모스 부호가 한국인에게는 가장 유명하다)
Definitions
- Source code란 부호화된 데이터라고 보면된다.
- $c(x)$ : codeword of x
- $l(x)$ : $c(x)$의 길이
- $D*$ : D-ary alphabet으로 만들 수 있는 source code의 집합 (유한한 길이)
Code를 평가하는 방법 중 하나는 expected length $L(C)$를 측정하는 방법이다. $L(C)$는 code의 optimality를 확인하는 데 사용된다.
$$ L(C) = \sum p(x)l(x) $$
Example.
현재, 4개의 sample을 보여주고 있다. 그러므로 unifom-length codeword라면 $log4$이므로 2 bits임을 알 수 있다. 문제에서 제시하는 code의 경우 $L(C)$를 구해보면 1.75 bits이다. 따라서 그냥 바꾼 것 보다 좋다는 것을 알 수 있다.
$X$의 entropy를 구해보면, $H(X)$는 1.75 bits임을 알 수 있다. Entropy는 RV $X$를 최대한 압축한 정보량이므로 codeword compression의 lower bound이다. $H(X)=L(C)$이므로 제시하는 code는 optimal임을 알 수 있다.
Example.
풀이는 다 적었다.
Example. Morse code
모스부호의 경우, 태생적으로 모든 부호 사이에 space가 있어 optimal은 아니다.
Code에 있어 주요한 개념은 다음과 같다.
- Nonsingularity : x가 다르면 c(x)도 다르다.
- Code extension : c(x)=00, c(y)=11이면 c(xy)=0011이다.
- Uniquely decodable codes : Individual codeword가 unique하면 된다.
- Prefix/instantaneous code : Codeword의 prefix가 다른 codeword가 아니다. (모든 codeword가 구별되기 때문에, 미래의 bit를 확인안해도 된다.)
2. Kraft Inequality
D의 알파벳 크기를 가지는 Prefix code라면, 다음의 부등식을 만족한다.
$$ \sum D^{-l_i} \leq 1 $$
Converse는 Kraft inequality를 만족하면 해당 $l(x)$로 prefix code를 만들 수 있음을 의미하게 된다.
*증명은 교과서를 보자
Kraft inequality는 $\infty$에도 성립한다.
$$ \sum_{i=1}^{\infty} D^{-l_i} \leq 1 $$
간단하게 증명하자면 다음 그림처럼 할당할 수 있기 때문이다.
그래서 정리하자면 다음과 같다.
- Kraft inequality 만족하면, prefix code가 존재한다.
- Prefix code라면 Kraft inequality를 만족한다.
- Uniquely decodable code는 prefix code보다 codeward length가 길거나 같다.
3. Optimal Code
Optimal이 되려면, 길이가 짧으면 장땡이다.
그래서 optimal code를 찾기 위한 식은 다음과 같다.
$$ minimize\, L(C) = \sum p_i l_i $$
$$ subject\,to\, \sum D^{-l_i} \leq 1 $$
그러나 위 문제는 $l_i$이가 integer이기 때문에 convex optimization을 사용할 수 없다. 그래서 라그랑주 곱셈이랑 KKT로 잘 해결한다. 그래서 다음의 결과를 얻는다. (Shannon code가 된다)
$$ p_i = D^{-l_i} $$
$$ l_i^{*} = -log_Dp_i $$
$$ L^{*} = \sum p_i l_i^{*} = H_D(X) $$
이래서 아까 앞에서 entropy가 lower bound라고 언급했었다. 정리하면 다음과 같다.
$$ L \geq H_D(X) $$
with equality iff $p_i = D^{-l_i} $
Length의 bound를 구해보자. $ l_i^{*} = -log_Dp_i $였다. $l_i$는 integer임으로 ceiling을 통해 구하게 되고 Kraft inequality를 만족하는지 확인해보면 만족한다.
ceiling을 이용하기 때문에, 모든 $l_i$가 optimal일 때 범위는 다음처럼 제한된다.
$$ H_D(X) \leq L^{*} \leq H_D(X) +1 $$
*shannon code는 optimal이군
4. Compression with Wrong Codes
- source distribution : $p(x)$
- assigned codeword length : $l(x) = ceiling(-log\, q(x))$
$$ H(p) + D(p||q) \leq E_pl(X) < H(p) + D(p||q) + 1 $$
q와 p가 다를수록 D(p||q)가 커진다. 이는 곧 code length가 길어짐을 의미하게 된다.
- $p_x = \{0.5, 0.25, 0.125, 0.125\}$
- $H(X) = 1.75$
- $q_x = \{0.25,0.25,0.25,0.25\}$
D(p||q)는 0.25가 되어 codeword length = H(x) + D(p||q) = 2 bits가 된다.
5. Huffman Code : Optimal code construction
- Decreasing order로 확률 줄세우기
- D-ary면 D개만큼 알파벳 할당하기
- D개 합치기
- 반복
Average length를 구해보면, 2.3 bits가 나온다.
Ter-nary case에 대해서는 다음과 같다. 3개의 least prob.을 합치는 식으로 진행한다.
마찬가지로 average length를 구해보면, 1.5 ternary digits이다.
두 케이스를 구분하는 방법은 $D^{E[l(x)]}$로 진행한다.
- Bi-nary = $2^{2.3}$ = 4.92
- Ter-nary = $3^{1.5}$ = 5.20
근데 하다보면 끝에서 D개가 안남을 수 있다. 이 경우에는 Dummy를 추가해서 구한다.
$1+(D-1)k$로 시작 size를 맞추면 된다. 위 예제는 D=3이므로 k=3을 가정해 7로 시작 size를 맞추었다.
Suboptimal way; Fano's construction
이외에도 suboptimal인 Fano의 코드 생성방법이 있다. Prob.을 줄세워서 이등분 할건데, 최대한 양쪽이 비슷한 확률을 가지도록 나누는 것이다. 그래서 하나씩 0과 1을 할당하며 이 방법을 계속 반복한다.
이 방법은 $L(C) \leq H(X) + 2 $가 된다.
Optimality of Huffman code
1. Shannon code(sub-optimal)와의 비교
- let $p_x$ = {1/3, 1/3, 1/4, 1/12}
- Then Huffman code length = (2,2,2,2) or (1,2,3,3)
- Then Shannon code = (2,2,2,4)
3번째 친구는 Shannon이 더 좋지만, average length 측면에서는 Huffman(2)이 Shannon(2.17) 보다 좋음
Binary Huffman code는 optimal이다. 하지만 많은 다른 optimal code가 있다.
2. Optimality 조건
- $p_i > p_j$면 $l_i \leq l_j$이다.
- Two longest codeword는 같은 길이임
- Two longest codeword는 마지막 bit만 다름
잘 생각해보면 저래야 optimal을 달성하며 2번 조건은 사실 의미가 없고 3번의 경우 무조건 만족해야지만 optimal인건 아니다.
어쨋든 Huffman code의 경우 해당 조건을 모두 만족해서 optimal이다.
6. Shannon-Fano-Elias codes
누적 확률을 이용해 codeword를 만드는 방법이다.
$$ F(x) = \sum_{a \leq x} p(a) $$
간단한 계산을 위해, 수정된 누적합을 사용한다.
$$ F(X) = \sum p(a) + {1 \over 2}p(x) $$
$F(X)$는 real number이기 때문에, code로 사용하기 어려움이 있다. 그래서 largest less than F(X) 값으로 사용한다. Prefix free property도 가능하다.
Example.
Binary로 구하는 과정은 다음과 같다고 한다. (챗지피티쓰)
- 0.125를 2진수로 변환합니다. 0.125는 2진수로 0.001입니다.
- 0.125 *2 = 0.25 (0, 소수점 이하가 0.25 남음)
- 0.25 × 2 = 0.5 (0, 소수점 이하가 0.5 남음)
- 0.5 × 2 = 1.0 (1, 소수점 이하가 0 남음)
- 결과: 0.125 (10진수) = 0.001 (2진수)
SFE로 만든 code의 경우, average $L(C)$는 2.75 bits이다. Huffman이 1.75 bits였으니 Suboptimal임을 알 수 있다. SFE는 sequence에 적용할 수 있어 Arithmetic coding에 자주 사용된다. 특히 Binary 데이터에 자주 사용된다.
7. Competitiveness of Shannon codes
가장 쉬운 방법은 codeword의 길이를 비교하는 것이다. a에 대해서 codeword의 길이가 짧으면 +1, 길면 -1 점수를 부과하는 방식으로 비교할 수 있다.
Shannon code가 질 확률은 다음과 같다.
지기 매우 어렵다는 것을 의미한다.
Specific case에 대해서는 Shannon code가 optimal임을 보일 수도 있다. 가령 Prob.이 지수승으로 나타나는 dyadic prob. mass function을 distribution으로 가지는 경우이다. ($p(x)=2^{-k}$) 이 경우에 대해서 Shannon code는 $l(x) = l'(x)$ for all x가 아닌 이상 항상 더 좋다.
'Study > Coding and Information Theory' 카테고리의 다른 글
[08] Linear Codes (2) | 2024.06.11 |
---|---|
[07] Channel Capacity (1) | 2024.06.09 |
SUMMARY (1) | 2024.04.10 |
[05] Entropy Rates (1) | 2024.04.10 |
[04] AEP, Asymptotic Equipartition Property (0) | 2024.04.10 |