정보이론에서 부호화, 복호화
📂양자정보이론 정보이론에서 부호화, 복호화 정의 알파벳들의 집합을 Σ \Sigma Σ 라고 하자. 다음과 같이 정의되는 f n f_{n} f n 을 압축률 compression rate 이 0 < α ≤ 1 0 \lt \alpha \le 1 0 < α ≤ 1 인 코딩 함수 encoding scheme, 부호화 라고 한다.
f n : Σ n → { 0 , 1 } ⌊ α n ⌋
f_{n} : \Sigma^{n} \to \left\{ 0, 1 \right\}^{\lfloor \alpha n \rfloor}
f n : Σ n → { 0 , 1 } ⌊ α n ⌋
아래와 같은 g n g_{n} g n 을 압축률이 α \alpha α 인 디코딩 함수 decoding scheme, 복호화 라고 한다.
g n : { 0 , 1 } ⌊ α n ⌋ → Σ n
g_{n} : \left\{ 0, 1 \right\}^{\lfloor \alpha n \rfloor} \to \Sigma^{n}
g n : { 0 , 1 } ⌊ α n ⌋ → Σ n
설명 쉽게 말해서 압축률이란 알파벳들을 2진수로 매핑할 때, 0 0 0 과 1 1 1 의 개수를 알파벳의 개수로 나눈 것이다. 예를들어 LESSERAFIM ↦ 10 1 ( 2 ) \text{LESSERAFIM} \mapsto 101_{(2)} LESSERAFIM ↦ 10 1 ( 2 ) 과 같은 매핑이라면 압축률은 다음과 같다.
0.3 = 3 10 = ∣ { 1 , 0 , 1 } ∣ ∣ { L , E , S , S , E , R , A , F , I , M } ∣
0.3 = \dfrac{3}{10} = \dfrac{\left| \left\{ 1, 0, 1 \right\} \right|}{ \left| \left\{ L, E, S, S, E, R, A, F, I, M \right\} \right| }
0.3 = 10 3 = ∣ { L , E , S , S , E , R , A , F , I , M } ∣ ∣ { 1 , 0 , 1 } ∣
데이터의 양이 많으면 이를 효율적으로 저장하고 전송하는데에 어려움이 있다. 그래서 정보이론에서는 메세지 m ∈ Σ n m \in \Sigma^{n} m ∈ Σ n 이 얼마나 효율적으로 압축될 수 있는지에 관심을 갖는다. 효율적이라는 말은 압축 뿐 아니라 복원에도 포함된다. m ↦ 1 m \mapsto 1 m ↦ 1 과 같이 매핑하면 엄청난 효율로 압축한 것이지만, 이 1 1 1 을 원래의 메세지 m m m 으로 복원하는 것은 불가능하다. 따라서 m = g n ( f n ( m ) ) m = g_{n}(f_{n}(m)) m = g n ( f n ( m )) 을 만족하는 f n , g n f_{n}, g_{n} f n , g n 이 존재하도록하는 최소의 α \alpha α 를 찾는 것이 곧 메세지를 효율적으로 압축하는 것이다. 이는 정보이론의 아버지 클로드 섀넌에 의해 수학적으로 정리되었다.
잡음이 없는 코딩 정리 잡음이 있는 채널 코딩 정리 본 글에서는 메세지의 효율적인 압축에 대해 좀 더 나이브하게 설명한다. 0 0 0 과 1 1 1 로 이루어진 길이가 n n n 인 메세지를 보내려는 상황을 생각하자. 메세지에서 0 0 0 이 등장할 확률이 p p p 라면 1 1 1 이 나올 확률은 1 − p 1-p 1 − p 이다.
큰 수의 법칙
{ X i } i = 1 n \left\{ X_{i} \right\}_{i=1}^{n} { X i } i = 1 n 을 서로 독립인 확률변수 이라고 하자. X i X_{i} X i 들의 평균이 μ \mu μ 이면, 임의의 ϵ > 0 \epsilon \gt 0 ϵ > 0 에 대해 다음이 성립한다.
lim n → ∞ P ( ∣ 1 n ∑ i = 1 n X i − μ ∣ ≥ ϵ ) = 0
\lim\limits_{n \to \infty} P\left( \left| \dfrac{1}{n}\sum\limits_{i=1}^{n}X_{i} - \mu \right| \ge \epsilon \right) = 0
n → ∞ lim P ( n 1 i = 1 ∑ n X i − μ ≥ ϵ ) = 0
큰 수의 법칙은 시행횟수 n n n 이 충분히 크면, 표본평균 1 n ∑ i = 1 n X i \dfrac{1}{n}\sum\limits_{i=1}^{n}X_{i} n 1 i = 1 ∑ n X i 이 모평균 μ \mu μ 에 충분히 가깝다는 것을 의미한다. 이에 따라서 n n n 이 충분히 클 때 메세지에서 0 0 0 의 개수는 n p np n p 이고 1 1 1 의 개수는 n ( 1 − p ) = ( n − n p ) n(1-p) = (n - np) n ( 1 − p ) = ( n − n p ) 이다. 이러한 0 0 0 과 1 1 1 로 만들 수 있는 메세지의 경우의 수는 n n n 개의 자리에서 0 0 0 이 들어갈 자리 n p np n p 개를 순서에 상관없이 뽑는 것이므로 다음과 같다.
n ! ( n p ) ! ( n − n p ) !
\dfrac{n!}{(np)! (n-np)!}
( n p )! ( n − n p )! n !
이 메세지들에 이진법으로 번호를 붙여 구분하려면 필요한 비트 의 개수는 다음과 같다.
log 2 n ! ( n p ) ! ( n − n p ) !
\begin{equation}
\log_{2}\dfrac{n!}{(np)! (n-np)!}
\end{equation}
log 2 ( n p )! ( n − n p )! n !
스털링 공식
log 2 n ! ≈ n log 2 n − n log 2 e
\log_{2} n! \approx n \log_{2} n - n \log_{2}e
log 2 n ! ≈ n log 2 n − n log 2 e
( 1 ) (1) ( 1 ) 을 스털링 공식으로 근사하면 다음과 같다.
log 2 n ! − log 2 ( n p ) ! − log 2 ( n − n p ) ! ≈ ( n log 2 n − n log 2 e ) − ( n p log 2 ( n p ) − n p log 2 e ) − ( ( n − n p ) log 2 ( n − n p ) − ( n − n p ) log 2 e ) = n log 2 n − n log 2 e − n p log 2 ( n p ) + n p log 2 e − ( n − n p ) log 2 ( n − n p ) + ( n − n p ) log 2 e = n log 2 n − n p log 2 n − n p log 2 p − n log 2 n ( 1 − p ) + n p log 2 n ( 1 − p ) = n log 2 n − n p log 2 n − n p log 2 p − n log 2 n − n log 2 ( 1 − p ) + n p log 2 n + n p log 2 ( 1 − p ) = − n p log 2 p − n log 2 ( 1 − p ) + n p log 2 ( 1 − p ) = − n p log 2 p − n ( 1 − p ) log 2 ( 1 − p ) = n ( − p log 2 p − ( 1 − p ) log 2 ( 1 − p ) )
\begin{align*}
& \log_{2} n! - \log_{2}(np)! - \log_{2}(n-np)! \\
&\approx \left( n \log_{2} n - n \log_{2}e \right) - \left( np \log_{2} (np) - np \log_{2}e \right) \\
&\qquad - \left( (n-np) \log_{2} (n-np) - (n-np) \log_{2}e \right) \\
&= n \log_{2} n - {\color{red}\cancel{\color{black}n \log_{2}e}} - np \log_{2} (np) + {\color{green}\cancel{\color{black}np \log_{2}e}} \\
&\qquad - (n-np) \log_{2} (n-np) + ({\color{red}\cancel{\color{black}n}}-{\color{green}\cancel{\color{black}np}}) \log_{2}e \\
&= n \log_{2} n - np \log_{2} n - np \log_{2} p - n\log_{2} n(1-p) + np\log_{2} n(1-p) \\
&= n \log_{2} n - np \log_{2} n - np \log_{2} p \\
&\qquad - n\log_{2} n - n\log_{2}(1-p) + np\log_{2} n + np\log_{2} (1-p) \\
&= - np \log_{2} p - n\log_{2}(1-p) + np\log_{2} (1-p) \\
&= - np \log_{2} p - n(1-p)\log_{2}(1-p) \\
&= n\Big(- p \log_{2} p - (1-p)\log_{2}(1-p) \Big)
\end{align*}
log 2 n ! − log 2 ( n p )! − log 2 ( n − n p )! ≈ ( n log 2 n − n log 2 e ) − ( n p log 2 ( n p ) − n p log 2 e ) − ( ( n − n p ) log 2 ( n − n p ) − ( n − n p ) log 2 e ) = n log 2 n − n l o g 2 e − n p log 2 ( n p ) + n p l o g 2 e − ( n − n p ) log 2 ( n − n p ) + ( n − n p ) log 2 e = n log 2 n − n p log 2 n − n p log 2 p − n log 2 n ( 1 − p ) + n p log 2 n ( 1 − p ) = n log 2 n − n p log 2 n − n p log 2 p − n log 2 n − n log 2 ( 1 − p ) + n p log 2 n + n p log 2 ( 1 − p ) = − n p log 2 p − n log 2 ( 1 − p ) + n p log 2 ( 1 − p ) = − n p log 2 p − n ( 1 − p ) log 2 ( 1 − p ) = n ( − p log 2 p − ( 1 − p ) log 2 ( 1 − p ) )
괄호 안의 식은 엔트로피 이다. 따라서 다음을 얻는다.
log 2 n ! ( n p ) ! ( n − n p ) ! ≈ n H ( p )
\log_{2}\dfrac{n!}{(np)! (n-np)!} \approx nH(p)
log 2 ( n p )! ( n − n p )! n ! ≈ n H ( p )
따라서 n n n 이 충분히 클 때 n H ( p ) nH(p) n H ( p ) 개의 비트로 코딩하는 것이 효율적이고, 효율적인 압축률은 H ( p ) = n H ( p ) n H(p) = \dfrac{nH(p)}{n} H ( p ) = n n H ( p ) 이다. 이 결과는 확률변수 X X X 의 엔트로피란 곧 X X X 의 독립시행으로 만들어지는 메세지의 압축 효율이라는 것을 의미한다.
위의 내용을 일반적으로 얘기해보자. 어떤 알파벳 x i x_{i} x i 가 등장할 확률을 p ( x i ) p(x_{i}) p ( x i ) 라고 하면 메세지에서 알파벳 x i x_{i} x i 가 등장하는 횟수는 평균적으로 n p ( x i ) np(x_{i}) n p ( x i ) 이다. 알파벳을 k ≥ 2 k \ge 2 k ≥ 2 개 써서 만든 길이가 n n n 인 메세지의 수는 다음과 같다.
n ! ∏ 1 ≤ i ≤ k ( n p ( x i ) ) !
\dfrac{n!}{\prod\limits_{1\le i \le k}(np(x_{i}))!}
1 ≤ i ≤ k ∏ ( n p ( x i ))! n !
이 메세지들에 이진법으로 번호를 붙이면,
log 2 n ! ∏ 1 ≤ i ≤ k ( n p ( x i ) ) ! = log 2 n ! − ∑ 1 ≤ i ≤ k log 2 ( n p ( x i ) ) ! ≈ ( n log 2 n − n log 2 e ) − ∑ 1 ≤ i ≤ k ( n p ( x i ) log 2 ( n p ( x i ) ) − n p log 2 e ) = − n ∑ 1 ≤ i ≤ k p ( x i ) log 2 p ( x i ) = − n H
\begin{align*}
&\log_{2} \dfrac{n!}{\prod\limits_{1\le i \le k}(np(x_{i}))!} \\
&= \log_{2}n! - \sum\limits_{1\le i \le k}\log_{2}(np(x_{i}))! \\
&\approx \left( n \log_{2} n - n \log_{2}e \right) - \sum\limits_{1\le i \le k}\Big( np(x_{i})\log_{2}(np(x_{i})) - np\log_{2}e \Big) \\
&= - n\sum\limits_{1\le i \le k} p(x_{i})\log_{2}p(x_{i}) \\
&= - nH
\end{align*}
log 2 1 ≤ i ≤ k ∏ ( n p ( x i ))! n ! = log 2 n ! − 1 ≤ i ≤ k ∑ log 2 ( n p ( x i ))! ≈ ( n log 2 n − n log 2 e ) − 1 ≤ i ≤ k ∑ ( n p ( x i ) log 2 ( n p ( x i )) − n p log 2 e ) = − n 1 ≤ i ≤ k ∑ p ( x i ) log 2 p ( x i ) = − n H