일전에도 몇번 언급했듯이 학창시절 종종 응용 학문들을 배울 기회가 많았는데 그 때는 설렁설렁 듣고 귀로 흘리고 했다. 하지만 살다보면 역시 이런 응용학문들이 먼가 삶에 직접적으로 영향이 있는 것 같다. [물론 Principle involved!]
학창시절 전자과 친구들 따라서 통신관련 수업을 들을 기회가 있었긴 했는데 ..ㅋㅋㅋㅋ 최근에 암호론 교양서를 읽다보니 부호론 이야기가 나오고 부호론 내용을 찾다보니 통신관련 이야기가 나와 어느새 나의 관심사는 그 때 그 학창시절 그 수업으로 돌아갔다.
예전에 내가 즐겨보던 미드 POS(person of interest) 의 한 에피소드에서 획기적인 compress mechanism 을 만든 학생이 있었다. 나름 컴공과에 관심이 많았던 나는 메세지를 받아 압축하고 해독하는 과정들은 어떤 원리로 이루어질까? 압축을 떠나서 일단 메세지를 전달하고 해독하는데 어떤 원리가 들어갈까? 등의 궁금증들이 많이 생겼고, 여기에 부호이론 내용들이 들어간 다는 것을 알았다. [다른 것에 빠져, 다른 수업을 듣느라 관련 컴공 전공 수업들을 못 들은 것이 아쉽다]
생각보다 이런 정보 전달 학문의 역사(?)는 오래(?)되지 않는다. [아, 비둘기를 날리거나 암호문 등의 이야기를 하는 것이 아니다. 이러한 과정에서 에러가 생기면 해당 정보를 거의 잃게 되는데, 여기서 내가 말하는 정보 전달 학문은 에러가 있어도 정보를 어떻게 잘 전달할 것인가에 대한 것을 말한다. 이는 비교적 최근, 1948년 Shannon's 의 "A Mathematical Theory of Communication" 이 논문으로 부터 시작한다.
여기에서 논문 전편을 볼 수[다운받을 수] 있다.
정보 전달은 다음과 같은 과정을 통해 체계화 될 수 있다.
흠 먼가 binary 메세지 하나를 예로 들어서 위 과정을 좀 더 설명해 보자.
[Vera Pless 의 책에서 따옴] 이 그림은 샤논의 논문의 그림보다 좀 더 발전된 그림으로 transmitter 를 단순히 전달자 역할이 아닌 Encoder 로 메세지 1001 을 1001 그대로가 아닌 1001101로 읽어 Noise 가 생겼을 때 그 오차를 줄이는 과정을 담고 있다.
Encode(암호화) 를 하고 나서 노이즈가 끼고 이로 인해 메세지는 오차가 생기는데, (이것이 Received message) 이를 Decode(해독화) 하고 나면 Decode method(Algorithm) 에 따라서 노이즈가 들어가도 원래의 메세지를 읽어낼 수 있다는 것이 샤논의 논문 핵심 주제이다.
이제는 Encoder 와 Noise, Decoder 의 종류와 Mechanism 이 중요하게 되고 이러한 것들에 대한 학문이 부호이론이다. (Coding theory).
가장 대중적으로 잘 알려진 코드(부호) 는 모스부호가 있고(모스부호는 사실 이러한 위의 부호, error-correcting 부호와 거리가 멀다. ) 해밍 부호가 있다. 해밍부호는 대표적인 선형부호이고 [7,4,3] 해밍 부호는 여전히 컴퓨터에서 많이 사용되고 있는 부호중 하나이다.
종종 부호이론 관련된 포스팅을 준비해 봐야겠다. 선형부호와 비선형 부호, attack mechanism 등 이쪽도 흥미로운 이야기 거리들이 많지만 오늘 포스팅 목적과는 거리가 있다.
샤논의 논문은 encoder 와 decoder 를 도입함으로써, 전달 과정 중에 생기는 Noise, error 에 메세지가 오염되도 최종 메세지는 원래의 메세지를 받도록 통신채널을 설계할 수 있다는 것에 있다.
이게 왜 획기적인 일인가 생각해보자. Encoder, decoder 의 개념이 왜 획기적이냐
그냥 단순히 정보 전달을 한다면, 컴퓨터를 생각해 이진법을 생각해보자. 1 이란 숫자를 전달하는데 중간에 오류가 생겨 1을 더 더해지게 되었다고 해보자. 그러면 최종 결과는 1+1=0 (2진법, 마지막 숫자만 카운트) 이 될것이고 이러면 최종 받는 숫자만 가지고 원래의 숫자가 무엇이었는지 파악하기가 힘들어진다.
결국 이를 확률로 생각할 수 있는데, 중간에 1을 더하는, 즉 에러가 들어갈 확률을 p 라고 한다면, encoder , decoder가 없이 직접 정보를 전달할 때 메세지가 전달될 확률은 q=1-p 가 된다.
Encoder 와 decoder 를 도입해 보자.1 이라는 정보가 encoder 에서 111 로 읽힌다고 생각해보자(0을 받으면 000이라 생각하자, 이러한 코드를 repetition code 라고 한다) 왜 3개(홀수개면 가능하다)를 잡았는가하면 에러가 하나(한개 이상도 당연히 가능하다, 홀수개의 개수가 큰 경우 3개의 반복코드일 경우에는 1개의 에러만이 원래의 메세지로 완벽히 해독 가능하다) 생겼을 때, (100, 010, 001) 의 decoder 를 설계할 수 있기 때문이다.
에러 한개의 경우 111+100, 111+010, 111+001 을 하면 011, 101, 110 즉 최종 결과물에는 1이 2개 0이 1개를 얻게 된다. decoder 로 1 혹은 0의 개수가 많은 것을 output 으로 읽게 하면 원래 메세지를 찾을 수 있다. (이는 000 의 경우에도 마찬가지이다)
이러한 encoder 와 decoder 를 도입했을 때 최종적으로 받은 코드가 원래 메세지일 확률은 q^3 + 3pq^2 이다. (두개, 세개의 에러는 잡지 못한다) 이를 q 값과 비교해 보면, 대표적으로 q=0.9 라고 하면 repetition 코드를 통해 인코더, 디코더 된 코드가 제대로 된 코드일 확률은ㅇ 0.729+0.243=0.972 로 원래의 0.9 코드보다 훨씬 정확도가 높다.
이 예시는 아주 간단한 예시로, 실제 압축과정이나 정보 전달 과정에서는 좀 더 복잡한 코드와 과정들이 쓰인다. 내가 하고 싶은 말은 직접 encoder, decoder 가 없는 과정보다 이런 과정들을 거쳐 좀 더 정보를 온전하게 전달할 수 있다는 것이다.
참고로 실생활에서, 대표적으로 핸드폰에서는 LDPC 코드가 사용되고 있다.