놀라움을 재는 법
"정보"는 뜻이 모호한 일상어처럼 보이지만, 1948년 클로드 섀넌은 그것을 전압이나 길이처럼 잴 수 있는 양으로 바꿔 놓았습니다. 잣대는 놀라움입니다. 뻔한 소식은 정보가 적고, 드문 소식은 정보가 많습니다. 이 한 가지 생각에서 압축 파일이 얼마나 작아질 수 있는지, 잡음 많은 전선으로 초당 몇 비트까지 보낼 수 있는지, 찢긴 QR 코드가 어떻게 원래 내용을 되살리는지가 차례로 따라 나옵니다.
- 사건의 정보량 \(-\log_2 p\)와 평균 정보량인 엔트로피를 계산하고, 스무고개·이진 탐색과 연결할 수 있다.
- 허프만 부호를 직접 만들고, 무손실 압축이 엔트로피 아래로 내려갈 수 없는 이유를 설명할 수 있다.
- 이진 대칭 채널, 반복 부호, 해밍(7,4) 부호의 신드롬 복호를 손으로 해 볼 수 있다.
- 섀넌–하틀리 채널 용량 \(C = B\log_2(1+\mathrm{SNR})\)으로 통신 링크의 한계를 어림할 수 있다.
- 리드–솔로몬 부호를 "다항식 보간"으로 이해하고, QR 코드의 오류 정정 레벨이 무엇을 뜻하는지 안다.
QR 코드는 귀퉁이가 찢기거나, 가운데에 회사 로고를 덮어 씌워도 읽힙니다. 그림의 일부가 사라졌는데 어떻게 원래 내용이 남아 있을까요? 비결은 데이터 뒤에 덧붙인 리드–솔로몬 오류 정정 부호입니다. 오류 정정 레벨 L·M·Q·H에 따라 전체 부호어의 약 7·15·25·30%가 망가져도 복원됩니다.
그런데 "얼마나 덧붙이면 얼마나 견디는가"를 따지려면 먼저 정보 자체를 잴 수 있어야 합니다. 섀넌은 1948년 논문 「통신의 수학적 이론」에서 정보를 확률의 로그로 재고, 잡음 있는 채널에도 넘을 수 없는 속도 한계와 그 한계까지는 오류를 얼마든지 줄일 수 있다는 사실을 보였습니다. 오류 정정 부호 이론은 거기서 출발했습니다.
정보 = 놀라움
사막 관측소가 매일 날씨를 전신으로 본사에 보냅니다. 1년 중 360일은 "맑음"입니다. 매일 "맑음"이라는 글자를 꼬박꼬박 보내는 것은 낭비처럼 느껴지고, 어쩌다 오는 "비"는 반드시 전해야 할 큰 소식입니다. 회선 용량을 설계하려면 메시지의 뜻과 무관하게 "얼마나 많은 정보가 오가는가"를 숫자로 재야 합니다. 글자 수로 재면 "맑음"과 "비"는 거의 같은 길이라 이 차이를 놓칩니다.
직관을 정리하면 정보량 \(I\)이 가져야 할 성질은 셋입니다. (1) 확률 \(p\)가 작을수록, 즉 놀라울수록 크다. (2) 반드시 일어나는 일(\(p=1\))은 정보가 0이다. (3) 서로 독립인 두 사건을 함께 들으면 정보가 더해진다. 그런데 독립 사건의 확률은 곱해집니다: \(p(A\cap B) = p(A)\,p(B)\). 곱을 합으로 바꾸는 함수는 로그뿐이므로 답이 정해집니다.
| 사건 | 확률 p | 정보량 −log₂p |
|---|---|---|
| 공정한 동전이 앞면 | 1/2 | 1 bit |
| 주사위가 6 | 1/6 | 2.585 bit |
| 1~1,048,576 중 특정한 수 | 2⁻²⁰ | 20 bit |
| 로또 6/45 1등 번호 조합 | 1/8,145,060 | 22.96 bit |
| 사막에서 "맑음"(360/365) | 0.986 | 0.020 bit |
| 사막에서 "비"(5/365) | 0.0137 | 6.19 bit |
스무고개는 20비트다
"예/아니오" 질문 한 번의 답은 최대 1비트입니다. 후보를 정확히 반으로 가르는 질문을 던지면 어느 답이 나와도 확률이 1/2이므로 매번 1비트를 얻습니다. 20번이면 \(2^{20} = 1{,}048{,}576\)개, 대략 100만 개 중 하나를 맞힐 수 있습니다. 거꾸로, \(N\)개 중 하나를 확실히 맞히려면 최소 \(\lceil\log_2 N\rceil\)번은 물어야 합니다. 이진 탐색이 \(O(\log N)\)인 이유도, 8비트 ADC가 256단계를 구별하는 이유도 같은 계산입니다.
숫자 맞히기: 질문 하나는 몇 비트인가
아래쪽 막대(현재 후보 구간)를 클릭하면 그 위치의 수 x에 대해 "비밀 수 ≤ x?"라고 묻습니다. 마우스를 올리면 답마다 얻을 정보량이 미리 보입니다.
엔트로피 = 평균 놀라움
공장 장비가 1초마다 상태를 보냅니다. 상태는 4가지(정상·주의·경고·정지)이고, 고정 길이로 보내면 2비트입니다. 그런데 99%가 "정상"이라면 평균 2비트는 지나치게 많아 보입니다. 기호 하나당 평균적으로 몇 비트면 충분할까요? 사건 하나의 놀라움이 아니라 "정보원"의 평균 놀라움을 재야 합니다.
확률 \(p_i\)인 기호 \(i\)가 나올 때마다 \(-\log_2 p_i\)비트의 놀라움을 얻으므로, 기대값을 취하면 정보원의 엔트로피(Entropy)가 됩니다.
위 문제의 상태 신호가 (0.99, 0.006, 0.003, 0.001)이라면 \(H \approx 0.093\)비트입니다. 기호당 2비트를 쓰는 고정 길이 방식보다 이론적으로 20배 이상 줄일 여지가 있다는 뜻입니다. 두 기호(동전)의 경우는 따로 이름이 있는 이진 엔트로피 함수입니다.
확률 막대를 끌어 엔트로피 바꾸기
압축의 한계: 허프만 부호
로그 파일이 매일 수 GB씩 쌓입니다. 글자마다 고정된 8비트(ASCII) 또는 한글 한 글자 24비트(UTF-8)를 쓰는 대신, 자주 나오는 글자에 짧은 부호를, 드문 글자에 긴 부호를 주면 줄어들 것입니다. 모스 부호가 가장 흔한 글자 E에 점 하나를 준 것과 같은 생각입니다. 그런데 (1) 구분자 없이 이어 붙여도 해독이 되도록 하려면 어떻게 부호를 정하고, (2) 어디까지 줄일 수 있을까요?
첫째 문제: a=0, b=01, c=1로 정하면 "01"이 "ab"인지 "ac"…가 아니라 "b"인지 "a c"인지 구별되지 않습니다. 해결책은 어떤 부호도 다른 부호의 앞부분(접두어)이 되지 않게 하는 접두어 부호(Prefix-free Code)입니다. 이진 트리의 잎에만 기호를 두고 왼쪽=0, 오른쪽=1로 경로를 읽으면 자동으로 접두어 부호가 됩니다. 비트를 읽으며 트리를 내려가다 잎에 닿으면 한 기호가 끝난 것입니다.
둘째 문제의 답이 섀넌의 원천 부호화 정리(Source Coding Theorem)입니다. 길이 \(\ell_i\)인 접두어 부호는 크래프트 부등식 \(\sum_i 2^{-\ell_i} \le 1\)을 만족해야 하고, 이 제약 아래 평균 길이를 최소화하면 \(\ell_i = -\log_2 p_i\)가 이상적인 길이입니다. 부호 길이는 정수여야 하므로 정확히 그렇게는 못 하지만 1비트 이내로 다가갈 수 있습니다.
1952년 MIT 대학원생이던 데이비드 허프만은 이 최적 부호를 만드는 놀랍도록 단순한 방법을 학기 과제로 제출했습니다. 가장 드문 두 기호를 묶어 하나로 만들고, 기호가 하나 남을 때까지 반복한다. 묶을 때마다 두 가지에 0과 1을 붙이면 트리가 아래에서 위로 완성됩니다. 같은 길이 조건에서 이보다 평균이 짧은 접두어 부호는 없다는 것이 증명되어 있습니다.
허프만 트리 만들기
잡음 채널: 비트가 뒤집힌다
압축으로 잉여를 다 짜낸 데이터를 이제 잡음 있는 선로로 보냅니다. 무선 링크든, 플래시 메모리 셀이든, 우주 탐사선 신호든 일정 확률로 0이 1로, 1이 0으로 바뀝니다. 압축된 데이터는 잉여가 없어서 한 비트만 틀려도 뒤가 통째로 망가집니다. 그렇다면 일부러 잉여를 다시 넣어야 합니다. 얼마나, 어떻게?
가장 단순한 잡음 모델은 이진 대칭 채널(Binary Symmetric Channel, BSC)입니다. 각 비트가 독립적으로 확률 \(p\)로 뒤집힙니다. 가장 단순한 대책은 같은 비트를 여러 번 보내고 다수결로 정하는 반복 부호(Repetition Code)입니다. 3번 반복하면 2번 이상 뒤집혀야 틀리므로
잡음 채널로 그림 보내기: 반복 부호의 비용
여기서 섀넌의 결론은 거의 믿기 어렵습니다. 이진 대칭 채널에는 용량(Capacity) \(C = 1 - H_2(p)\)가 있고, 전송률이 \(R \lt C\)이기만 하면 블록 길이를 늘려 오류 확률을 원하는 만큼 0에 가깝게 만드는 부호가 존재합니다. \(p = 0.01\)이면 \(C \approx 0.919\): 보낸 비트의 91.9%까지를 데이터로 쓰고도 오류를 사실상 없앨 수 있다는 뜻입니다. 반복 부호(R = 1/11에서 \(10^{-10}\) 수준)와는 비교가 안 됩니다. 섀넌의 증명은 "무작위로 고른 긴 부호가 평균적으로 잘 된다"는 존재 증명이어서, 실제로 그런 부호를 만드는 데 그 뒤 수십 년이 걸렸습니다. 첫 걸음이 다음 절의 해밍 부호입니다.
해밍(7,4) 부호: 오류의 주소를 알려 주는 패리티
1940년대 말 벨 연구소의 해밍은 주말에 계전기식 컴퓨터로 긴 계산을 돌리곤 했습니다. 기계는 패리티 검사로 오류를 찾을 수는 있었지만, 오류가 나면 작업을 버리고 다음 작업으로 넘어갔다고 합니다. 월요일에 와서 결과가 없는 것을 본 해밍은 "기계가 오류를 찾을 수 있다면, 왜 그 위치까지 알아내 고치지 못하는가"라고 물었다고 전해집니다. 그 답이 1950년에 발표된 해밍 부호입니다.
패리티 비트 하나는 "1의 개수가 짝수인가"만 알려 줍니다. 오류가 있다는 것은 알지만 어디인지는 모릅니다. 해밍의 착상은 패리티 여러 개가 데이터의 서로 다른 부분집합을 겹치게 감시하도록 하는 것입니다. 7개 위치를 1~7로 번호 매기고, 위치 1·2·4(2의 거듭제곱)에 패리티, 나머지 3·5·6·7에 데이터 4비트를 둡니다. 패리티 \(p_1\)은 번호의 이진수 첫 자리가 1인 위치(1,3,5,7), \(p_2\)는 둘째 자리가 1인 위치(2,3,6,7), \(p_4\)는 셋째 자리가 1인 위치(4,5,6,7)의 짝수 패리티를 맞춥니다.
해밍(7,4): 비트를 뒤집으면 신드롬이 위치를 가리킨다
비용을 비교해 봅시다. 3회 반복은 1비트 정정에 데이터 1비트당 2비트를 덧붙여 전송률 1/3이지만, 해밍(7,4)은 같은 1비트 정정을 4비트당 3비트로 해 전송률 4/7 ≈ 0.571입니다. 일반적으로 패리티 \(m\)개로 \(2^m - 1\)비트 블록을 감시하는 해밍\((2^m-1,\,2^m-1-m)\) 부호를 만들 수 있고, \(m=7\)이면 (127,120)으로 전송률 0.945입니다. 여기에 전체 패리티 1비트를 더한 확장 해밍 부호는 1비트 정정과 2비트 검출(SECDED)을 함께 합니다.
섀넌 채널 용량: 넘을 수 없는 속도 제한
음성 전화선은 대략 300~3400 Hz 대역만 통과시키고 잡음도 있습니다. 1990년대 모뎀은 2400, 9600, 14400, 28800 bps로 해마다 빨라졌습니다. 이 경쟁은 끝이 있을까요? 더 영리한 변조 방식을 쓰면 무한히 빨라질 수 있을까요? 대역폭과 잡음만 알면 답이 나오는 공식이 있습니다.
대역폭 \(B\) [Hz]인 채널은 초당 약 \(2B\)개의 독립적인 표본을 실어 나를 수 있고(6장 나이퀴스트), 표본 하나가 구별할 수 있는 레벨 수는 잡음이 정합니다. 가우스 잡음이 더해지는 채널에서 이를 정확히 계산한 결과가 섀넌–하틀리 정리(Shannon–Hartley Theorem)입니다.
이 공식은 두 방향의 놀라움을 담고 있습니다. 하나는 한계입니다. 어떤 변조·부호를 쓰더라도 \(C\)보다 빠르게 오류 없이 보낼 수는 없습니다. 다른 하나는 가능성입니다. \(C\)보다 느리기만 하면 오류율을 원하는 만큼 낮출 수 있습니다. 잡음은 속도를 제한할 뿐 신뢰성을 제한하지 않습니다.
대역폭과 SNR로 채널 용량 재기
리드–솔로몬과 QR 코드: 점 몇 개로 곡선을 되살린다
QR 코드가 찢기거나 얼룩이 지면 비트 하나가 아니라 근처 수십 개가 한꺼번에 사라집니다. CD의 긁힘, 무선의 순간 페이딩도 마찬가지인 버스트 오류(Burst Error)입니다. 해밍(7,4)처럼 블록당 1비트를 고치는 부호는 이런 오류에 속수무책입니다. 바이트 단위로 통째로 사라진 것을 되살리려면 다른 발상이 필요합니다.
1960년 리드(I. Reed)와 솔로몬(G. Solomon)의 아이디어는 고등학교 수학 하나에 기댑니다. 서로 다른 \(k\)개의 점을 지나는 \(k-1\)차 이하 다항식은 단 하나뿐이다. 두 점이 직선을, 세 점이 포물선을 정하는 것과 같습니다. 그러니 데이터 \(k\)개로 \(k-1\)차 다항식을 정하고, 그 곡선 위의 점을 \(k\)개보다 많은 \(n\)개 보내면 됩니다. 받는 쪽은 아무 점이든 \(k\)개만 살아 있으면 곡선을 되살리고 사라진 값을 모두 복원합니다.
다항식 부호: 점을 지우고 곡선 되살리기
QR 코드 안의 리드–솔로몬
QR 코드는 1994년 일본 덴소 웨이브가 공장 부품 추적용으로 개발했습니다. 내용은 8비트 부호어(codeword) 단위로 나뉘어 데이터 부호어 뒤에 RS 오류 정정 부호어가 붙고, 그림 전체에 흩어져 배치됩니다. 큰 심볼은 여러 RS 블록으로 나눈 뒤 부호어를 블록끼리 번갈아 섞어(인터리빙) 배치하므로, 한 귀퉁이가 찢겨도 손상이 여러 블록에 분산되어 각 블록의 정정 능력 안에 들어가기 쉽습니다.
| 오류 정정 레벨 | 복원 가능한 부호어 비율(약) | 버전 1의 데이터 / RS 부호어 | 주 용도 |
|---|---|---|---|
| L (Low) | 7% | 19 / 7 | 깨끗한 인쇄, 최대 용량 |
| M (Medium) | 15% | 16 / 10 | 일반 용도 |
| Q (Quartile) | 25% | 13 / 13 | 공장·물류 환경 |
| H (High) | 30% | 9 / 17 | 로고 삽입, 훼손 위험 |
버전 1은 총 26개 부호어를 담습니다. H 레벨에서는 26개 중 17개가 RS 검사 부호어라 데이터는 9바이트뿐이지만, 위치를 모르는 오류도 8개까지 고칠 수 있습니다. 가운데에 로고를 덮는 "디자인 QR"은 이 정정 능력을 일부러 소모하는 셈이라, 보통 H 레벨로 만들고 로고 면적을 정정 한도보다 넉넉히 작게 잡습니다. CD 역시 두 단계의 RS 부호를 인터리빙으로 엮은 CIRC를 써서 긁힘으로 인한 수천 비트의 연속 손실을 복원합니다.
교차 엔트로피: AI가 줄이는 바로 그 숫자
허프만 부호를 영어 글자 빈도로 만들어 놓고 한국어 로마자 텍스트를 압축하면 어떻게 될까요? 실제 분포 \(p\)인 데이터를 다른 분포 \(q\)에 맞춘 부호(길이 \(-\log_2 q_i\))로 보내면 평균 길이가 늘어납니다.
분류 신경망의 학습이 정확히 이 숫자를 줄이는 일입니다. 정답이 "고양이"인 사진에서 실제 분포 \(p\)는 고양이에 1, 나머지에 0이므로 교차 엔트로피는 \(-\log q_{\text{고양이}}\), 즉 모델이 정답에 준 확률의 놀라움 하나만 남습니다. 모델이 정답에 0.7을 주면 \(-\ln 0.7 \approx 0.357\) nat(0.515 bit), 0.01을 주면 4.6 nat입니다. 확신하며 틀릴수록 손실이 폭발적으로 커집니다. 딥러닝 프레임워크는 보통 자연로그(nat)를 씁니다. 대형 언어 모델의 학습 손실도 "다음 토큰에 대한 교차 엔트로피"이고, 흔히 보고하는 퍼플렉서티(perplexity)는 그 지수 \(e^{H}\)입니다. 손실을 낮추는 것은 곧 데이터를 더 짧게 압축할 수 있는 모델을 만드는 것과 같습니다. 이 손실을 경사 하강법으로 줄이는 과정은 9장에서, 실제 모델 구조는 AIBook에서 이어집니다.
| 모델이 정답에 준 확률 q | 0.99 | 0.9 | 0.7 | 0.5 | 0.1 | 0.01 |
|---|---|---|---|---|---|---|
| 교차 엔트로피 손실 −ln q [nat] | 0.010 | 0.105 | 0.357 | 0.693 | 2.303 | 4.605 |
이 도구가 쓰이는 곳
정보 이론은 "데이터를 다루는 모든 기계"의 바닥에 깔려 있습니다. 시리즈의 다른 책에서 이 장의 도구를 만나는 곳들입니다.
이더넷·Wi-Fi·광통신의 변조 차수와 FEC, CRC 오류 검출, 압축 프로토콜. PHONEBOOK5G 모뎀의 LDPC · 폴라 부호
SNR에 따라 변조·부호율을 바꾸는 링크 적응은 섀넌 용량을 따라가는 일이다. MEMORYBOOKDRAM ECC · NAND LDPC
(72,64) SECDED, 온다이 ECC, 다치 셀 플래시의 연판정 복호. COMPUTERBOOK부호화 · 압축 · 저장
허프만·LZ 압축, RAID 6의 리드–솔로몬 패리티, 문자 인코딩. AIBOOK교차 엔트로피 손실
분류·언어 모델의 학습 목표, KL 발산, 퍼플렉서티. SOCBOOK오류 정정 하드웨어
칩 안의 ECC 엔진, 고속 직렬 링크의 FEC, 영상·음성 코덱 블록. SENSORBOOK이미지 데이터와 잡음
센서 잡음이 정하는 유효 비트 수, 원본(RAW) 데이터 압축. MUSICBOOK오디오 압축
MP3·AAC 같은 손실 압축과 그 마지막 단계의 엔트로피 부호화.
MathBook 안에서는 7장 확률이 이 장의 재료이고, 채널 용량의 \(2B\) 표본은 6장 샘플링, 해밍 부호의 행렬 \(H\)는 3장 선형대수, 교차 엔트로피를 줄이는 학습은 9장 최적화와 이어집니다. 유한체 GF(256)의 구조는 12장 대칭의 대수의 군·체 이야기와 맞닿아 있습니다.
핵심 정리
- 사건의 정보량은 놀라움 \(I = -\log_2 p\) [bit]. 독립 사건의 정보가 더해지도록 로그를 쓴다. 반으로 가르는 예/아니오 질문 하나가 1비트이고, \(N\)개 중 하나를 고르려면 \(\log_2 N\)비트가 필요하다.
- 엔트로피 \(H = -\sum p_i\log_2 p_i\)는 정보원의 평균 놀라움이다. 균등할 때 최대 \(\log_2 K\), 확실할 때 0.
- 무손실 압축의 평균 길이는 엔트로피 아래로 내려갈 수 없고, 허프만 부호는 \(H \le \bar L \lt H+1\)을 달성한다.
- 잡음 채널에서는 계획된 잉여를 넣어야 한다. 반복 부호는 오류를 줄이려면 전송률이 0으로 가지만, 섀넌은 \(R \lt C\)면 오류를 얼마든지 줄이는 부호가 있음을 보였다(BSC의 \(C = 1-H_2(p)\)).
- 해밍(7,4)은 겹치는 패리티 3개로 1비트 오류의 위치를 신드롬 \((s_4s_2s_1)\)으로 직접 알려 준다. 최소 거리 3이라 2비트 오류는 잘못 고친다.
- 가우스 잡음 채널의 용량은 \(C = B\log_2(1+S/N)\). 대역폭에는 비례, 신호 전력에는 로그로만 늘어난다.
- 리드–솔로몬 부호는 데이터 \(k\)개로 정한 \(k-1\)차 다항식의 값 \(n\)개를 보내고, 아무 \(k\)개로 복원한다. 소실 \(s\)·오류 \(e\)는 \(2e+s \le n-k\)까지 고친다. 실제로는 GF(256) 위에서 바이트 단위로 계산하며, QR 코드의 L/M/Q/H 레벨이 그 정정 능력(약 7/15/25/30%)이다.
- 교차 엔트로피 \(H(p,q) = H(p) + D_{\mathrm{KL}}(p\|q)\)는 틀린 모델의 대가이며, 분류·언어 모델 학습의 손실 함수다.
확인 퀴즈
확률이 1/8인 사건이 일어났다는 소식의 정보량은?
네 기호의 확률이 (1/2, 1/4, 1/8, 1/8)일 때 허프만 부호의 평균 길이는?
비트가 1% 확률로 뒤집히는 채널(BSC, p = 0.01)에 대한 설명으로 옳은 것은?
해밍(7,4) 부호어에서 위치 3과 위치 5의 비트가 동시에 뒤집혔다. 복호기는?
대역폭 1 MHz, SNR 0 dB(신호 전력 = 잡음 전력)인 가우스 잡음 채널의 용량은?
데이터 4개(k = 4)로 3차 다항식을 정하고 그 값 8개(n = 8)를 보내는 다항식(리드–솔로몬식) 부호가 견딜 수 있는 손상은?