테마 선택

📚 지식 노트

AI·하드웨어·주변기기·게임·컴퓨터 시스템·이론 컴퓨터 과학·수학·개발과 운영·보안·응용 분야에 대해 알아 두면 좋은 내용을 정리한 노트다. 위에서 분야를 고르고 아래에서 노트를 고른다.

정보 이론과 부호화

정보를 비트로 잴 수 있을까. 놀라움을 재는 정보량에서 시작해 엔트로피가 압축의 한계를, 채널 용량이 통신의 한계를 정하는 과정을 따라가고, 그 한계에 다가가는 실제 부호 — 허프만, LZ77, CRC, 해밍, 리드–솔로몬, LDPC·폴라 — 를 직접 계산한 그림으로 본다.

목차 (15)
  1. 정보량: 놀라움을 비트로 재기
  2. 엔트로피: 평균 놀라움
  3. 결합·조건부 엔트로피와 상호 정보량
  4. 소스 부호화 정리: 평균 부호 길이 ≥ H
  5. 허프만 부호
  6. 산술 부호와 사전 기반 압축(LZ77)
  7. 압축의 한계: 무작위 데이터는 줄지 않는다
  8. 통신 채널과 잡음
  9. 섀넌 채널 용량: C = B log₂(1 + SNR)
  10. 오류 검출: 패리티, 체크섬, CRC
  11. 오류 정정: 해밍 거리와 해밍(7,4)
  12. 리드–솔로몬: QR 코드와 CD
  13. LDPC와 폴라 부호: 5G
  14. 정보 이론과 AI: 교차 엔트로피와 KL
  15. 핵심 자료

정보량: 놀라움을 비트로 재기

1948년 클로드 섀넌은 "정보"를 뜻과 상관없이 재는 방법을 내놓았다. 핵심 발상은 정보 = 놀라움이다. 해가 동쪽에서 떴다는 소식은 거의 아무것도 알려 주지 않고, 드문 일이 일어났다는 소식은 많은 것을 알려 준다. 그래서 확률 p인 사건이 일어났을 때 얻는 정보량을 −log₂p로 정의한다. 단위는 비트다.

로그를 쓰는 이유는 독립인 두 사건의 정보량이 더해지기를 바라서다. 확률은 곱해지고(p × q), 로그는 곱을 합으로 바꾼다. 공정한 동전의 앞면은 −log₂(1/2) = 1비트, 즉 예/아니오 질문 하나의 답이다. 동전 10번이 모두 앞면이면 확률이 1/1024라 10비트이고, 이는 동전 한 번의 정보 1비트를 열 번 모은 것과 같다. 확실한 사건(p = 1)은 0비트다.

로그의 밑이 단위를 정한다. 밑이 2면 비트(섀넌), 자연로그 ln이면 내트(nat), 밑이 10이면 하틀리다. 1내트 = 1/ln 2 ≈ 1.443비트로, 식은 같고 상수배만 다르다. 자연로그로 계산한 머신러닝 손실은 내트 단위이므로, 이 노트의 비트 값과 견줄 때는 ln 2로 나눠 맞춘다.

확률 p에 따른 정보량 −log₂p 곡선과 동전, 주사위, 드문 사건의 정보량024681000.51정보량(비트)사건의 확률 p1/1024 (동전 10번 모두 앞면) → 10.00비트주사위 한 눈 1/6 → 2.58비트동전 앞면 1/2 → 1.00비트거의 확실 0.99 → 0.01비트
정보량 −log₂p. 확률이 절반으로 줄 때마다 1비트씩 는다. 곡선 위의 수치는 정보량 함수로 계산했다.

엔트로피: 평균 놀라움

사건 하나가 아니라 정보원 전체를 보면, 다음에 나올 기호가 평균적으로 얼마나 놀라운지를 물을 수 있다. 이것이 엔트로피 H = Σ −pᵢ log₂pᵢ다. 각 결과의 정보량을 그 확률로 가중 평균한 값이고, "결과를 알기 전의 불확실성"이라고 읽어도 된다.

  • 공정한 동전: 1비트. 두 결과가 똑같이 그럴듯해 불확실성이 가장 크다.
  • 공정한 주사위: log₂6 ≈ 2.58비트. 결과가 n개로 고르면 엔트로피는 log₂n이고, 이것이 n개 결과에서 낼 수 있는 최댓값이다.
  • 앞면이 90%인 동전: 약 0.47비트. 대부분 앞면이라 결과를 들어도 덜 놀랍다. 다음 절에서 보듯 이런 동전 던지기 결과는 압축하면 던질 때마다 1비트보다 훨씬 적게 적을 수 있다.
동전의 앞면 확률 p에 따른 엔트로피 H(p) 곡선. p = 0.5에서 1비트, p = 0.9에서 약 0.47비트00.5100.51앞면 확률 pH(p)공정한 동전: 1비트p = 0.9인 동전: 0.47비트
앞면 확률 p인 동전의 엔트로피 H(p). 0.5에서 1비트로 가장 크고, p = 0.9면 0.47비트로 떨어진다. 결과가 정해져 있는 p = 0이나 1에서는 0이다.

결합·조건부 엔트로피와 상호 정보량

변수가 둘이면 관계를 잴 수 있다. X를 "오늘 비가 오는가", Y를 "우산을 들고 나왔는가"라고 하자. 결합 엔트로피 H(X,Y)는 둘을 한꺼번에 알 때의 불확실성이다. 조건부 엔트로피 H(X|Y)는 Y를 이미 알 때 X에 남는 불확실성이다. 우산을 든 사람을 보면 비가 왔을 가능성이 높으니, H(X|Y)는 H(X)보다 작다.

그 차이 I(X;Y) = H(X) − H(X|Y)가 상호 정보량이다. Y를 보고 X에 대해 알게 된 양이다. 식을 바꾸면 H(Y) − H(Y|X)와도 같아 대칭이고, 둘이 독립이면 0이다. 상관 계수와 달리 직선 관계가 아니어도 잡아내서, 특징 선택이나 의사 결정 나무의 정보 이득 같은 데 쓴다. 아래 벤 그림의 넓이 관계(H(X,Y) = H(X) + H(Y|X) 등)가 그대로 성립한다.

날씨 X와 우산 Y의 엔트로피를 두 원으로 그린 벤 그림. 왼쪽만 H(X|Y), 겹친 부분 I(X;Y), 오른쪽만 H(Y|X)H(X) 날씨 = 0.88H(Y) 우산 = 0.93H(X|Y)0.56I(X;Y)0.32H(Y|X)0.61두 원 전체 = H(X,Y) = 1.49비트단위는 비트. 우산을 보면 날씨에 대한 불확실성이 0.32비트 줄어든다
벤 그림으로 본 세 양. 비 확률 0.3, 비 오는 날 우산 확률 약 0.83, 맑은 날 약 0.14로 둔 표에서 계산했다. 가운데 겹친 부분이 상호 정보량이다.

소스 부호화 정리: 평균 부호 길이 ≥ H

엔트로피가 중요한 이유는 섀넌이 이것이 압축의 한계임을 증명했기 때문이다. 기호마다 0과 1로 된 부호를 붙여 이어 쓰되 다시 풀 수 있어야 한다면, 기호당 평균 부호 길이는 엔트로피 H보다 짧을 수 없다(소스 부호화 정리). 반대로 기호를 충분히 길게 묶어 부호화하면 평균 길이를 H에 원하는 만큼 가깝게 만들 수 있다. 엔트로피는 "이 정보원을 적는 데 정말로 필요한 비트 수"다.

직관은 이렇다. 자주 나오는 기호에는 짧은 부호를, 드문 기호에는 긴 부호를 주면 평균이 준다. 확률 p인 기호에 길이 −log₂p를 주는 것이 이상적인데, 부호 길이는 정수여야 하니 정확히 맞추지 못하는 만큼 손해를 본다. 아래는 ABRACADABRA(11글자, 5종류)의 예다.

ABRACADABRA를 고정 길이 부호, 허프만 부호, 엔트로피 하한으로 적을 때 글자당 비트 수 비교 막대고정 길이(5글자 → 3비트)3.00비트 × 11 = 33.0허프만 부호 평균2.09비트 × 11 = 23.0엔트로피 H (하한)2.04비트 × 11 = 22.4어떤 부호도 점선(엔트로피)보다 왼쪽으로 갈 수 없다. 글자당 평균, 원문 11글자
글자당 비트 수. 5종류를 고정 길이로 적으려면 3비트씩 필요하다. 허프만 부호는 엔트로피 바로 위까지 내려가지만, 엔트로피(점선)보다 왼쪽으로는 어떤 부호도 갈 수 없다.

허프만 부호

데이비드 허프만은 1952년 논문에서 주어진 빈도에 대해 기호마다 부호를 따로 붙이는 방식 가운데 평균 길이가 가장 짧은 부호를 만드는 방법을 보였다. 방법은 단순하다. 기호마다 빈도를 무게로 가진 마디를 만들고, 가장 가벼운 두 마디를 합쳐 무게를 더한 새 마디로 바꾸기를 마디가 하나 남을 때까지 되풀이한다. 다 만든 나무에서 뿌리부터 왼쪽은 0, 오른쪽은 1로 읽으면 부호다.

ABRACADABRA의 글자 빈도로 허프만 트리를 아래에서 위로 합쳐 만드는 단계 그림01010011115A62R421C1D2B남은 마디(무게 순): C1 · D1 · B2 · R2 · A5남은 마디(무게 순): ○2 · B2 · R2 · A5남은 마디(무게 순): R2 · ○4 · A5남은 마디(무게 순): A5 · ○6부호: A 0 · R 10 · C 1100 · D 1101 · B 111
1 / 5

ABRACADABRA의 글자 빈도: A 5, B 2, R 2, C 1, D 1. 모든 글자가 잎 하나로 시작한다. 숫자는 빈도(무게)다.

허프만 트리. 자주 나오는 A는 뿌리 가까이(짧은 부호), 드문 C·D는 깊이(긴 부호) 놓인다. 어떤 부호도 다른 부호의 앞부분이 아니라(접두 부호) 구분 기호 없이 이어 써도 풀린다.

글자가 나무의 잎에만 있으므로 어떤 부호도 다른 부호의 앞부분이 되지 않는다(접두 부호). 그래서 0과 1을 구분 기호 없이 이어 붙여도 앞에서부터 하나씩 떼어 읽을 수 있다. 허프만 부호는 DEFLATE(ZIP·gzip·PNG)와 JPEG 같은 형식의 마지막 단계에 쓰인다. 한계도 있다. 기호마다 적어도 1비트를 써야 해서, 한 기호가 압도적으로 흔하면(앞면 90% 동전처럼) 엔트로피에서 멀어진다. 이 틈을 메우는 것이 다음 절의 산술 부호다.

산술 부호와 사전 기반 압축(LZ77)

산술 부호는 기호마다 부호를 붙이지 않고 메시지 전체를 0과 1 사이의 수 하나로 적는다. [0, 1) 구간을 기호 확률만큼 나누고, 메시지의 첫 기호에 해당하는 조각을 고르고, 그 조각을 다시 같은 비율로 나누기를 되풀이한다. 마지막 구간의 폭은 각 기호 확률의 곱이므로, 그 구간 안의 수 하나를 가리키는 데 필요한 비트 수가 메시지의 정보량에 가깝다. 기호당 정수 비트라는 허프만의 제약이 없어, 확률이 치우친 정보원에서도 엔트로피에 거의 붙는다.

확률 A 0.6, B 0.3, C 0.1로 메시지 ABA를 산술 부호화하며 구간이 좁아지는 그림시작01ABCA 뒤00.6ABCB 뒤0.360.54ABCA 뒤0.360.468최종 폭 0.108 = 0.6 × 0.3 × 0.6 → 약 3.21비트면 이 구간 안의 수 하나를 가리킬 수 있다
A 0.6, B 0.3, C 0.1인 정보원으로 ABA를 산술 부호화한다. 줄마다 그 줄의 구간을 같은 비율로 다시 나눈 것이고, 색칠한 조각이 다음 줄의 구간이 된다. 경계값은 구간 함수로 계산했다.

지금까지는 기호의 확률을 안다고 가정했다. 실제 파일은 확률을 미리 모르고, 같은 낱말이나 패턴이 되풀이되는 구조가 있다. 야코브 지브와 아브라함 렘펠의 LZ77은 이미 지나간 글을 사전으로 삼는다. 앞으로 읽을 글이 최근 창(window) 안 어딘가와 같으면, 글자 대신 "몇 칸 앞에서 몇 글자 복사"라는 짝을 적는다. 확률 표가 없어도 되풀이가 많으면 저절로 줄어든다. DEFLATE는 LZ77로 되풀이를 걷어 낸 뒤 남은 토큰을 허프만 부호로 한 번 더 줄이며, 창 크기는 32K 바이트다.

ABABABAC를 LZ77 토큰 세 개로 바꾸는 그림. 세 번째 토큰은 두 칸 앞에서 다섯 글자를 복사한다2칸 앞에서 5글자 복사(겹쳐도 됨)ABABABAC(0, 0, A)(0, 0, B)(2, 5, C)토큰 = (몇 칸 앞, 몇 글자 복사, 다음 글자). 8글자가 토큰 3개가 됐다ZIP·PNG·gzip의 DEFLATE는 이 토큰들을 다시 허프만 부호로 줄인다
LZ77. 세 번째 토큰은 두 칸 앞부터 다섯 글자를 복사하는데, 복사하는 동안 막 쓴 글자를 다시 읽어 ABAB…가 이어진다. 인코더가 낸 토큰을 디코더로 되살려 원문과 같은지 확인했다.

압축의 한계: 무작위 데이터는 줄지 않는다

"어떤 파일이든 조금씩이라도 줄이는 압축기"는 있을 수 없다. 세어 보면 바로 나온다. 길이 n 비트인 파일은 2ⁿ개인데, 그보다 짧은 파일(빈 파일 포함)은 1 + 2 + … + 2ⁿ⁻¹ = 2ⁿ − 1개뿐이다. 무손실 압축은 서로 다른 입력을 서로 다른 출력으로 보내야 하니, 비둘기집 원리에 따라 적어도 하나는 줄지 않는다. 1바이트(8비트)만 해도 256개를 255개 자리에 넣어야 한다.

길이 3 비트열 여덟 개를 더 짧은 비트열 일곱 개에 짝지으면 하나가 남는 비둘기집 원리 그림길이 3 비트열 8개더 짧은 비트열 7개000001010011100101110111← 보낼 곳이 없다(빈 문자열)0100011011모든 입력을 줄이는 무손실 압축은 없다. 일부를 줄이면 다른 일부는 반드시 늘어난다
길이 3 비트열 8개와 그보다 짧은 비트열 7개. 하나씩 짝지으면 반드시 하나가 남는다. 압축기가 어떤 입력을 줄이면 그 대가로 다른 입력은 늘어난다.

압축은 데이터에 치우침이나 되풀이(낮은 엔트로피)가 있을 때만 이긴다. 이미 압축한 파일, 암호문, 좋은 난수는 엔트로피가 거의 최대라 다시 압축해도 줄지 않고 머리글만큼 오히려 늘어난다. 그래서 압축은 암호화보다 먼저 해야 한다. 거꾸로 암호문이 잘 압축된다면 암호가 약하다는 신호다. 좋은 암호가 출력을 무작위처럼 보이게 하는 원리는 암호학 노트에 있다.

헷갈리기 쉬운 세 낱말을 갈라 두자. 압축은 군더더기를 걷어 길이를 줄이고, 부호화(인코딩)는 같은 정보를 다른 기호로 바꿔 적을 뿐이며, 암호화는 열쇠 없이는 읽지 못하게 한다. Base64는 부호화다. 3바이트(24비트)를 6비트씩 네 글자로 적으므로 길이가 4/3배로 오히려 늘고, 표준 문서 RFC 4648도 기밀성을 전혀 주지 않는다고 밝힌다. 바이너리를 글자만 다니는 통로(이메일, JSON, URL)에 실으려는 것이지, 비밀번호를 Base64로 바꿔 두는 것은 숨긴 것이 아니다.

통신 채널과 잡음

섀넌의 논문 후반부는 보내는 쪽과 받는 쪽 사이의 채널을 다룬다. 전선, 전파, 광섬유, 디스크 표면 모두 채널이고, 모두 잡음이 있다. 열잡음, 간섭, 긁힘 때문에 보낸 것과 받은 것이 다를 수 있다. 가장 단순한 모형인 이진 대칭 채널은 비트마다 독립적으로 확률 p로 뒤집는다.

섀넌은 통신을 두 단계로 나눴다. 먼저 정보원의 군더더기를 걷어 내고(소스 부호화, 앞 절의 압축), 그다음 채널 잡음에 맞서도록 계획된 군더더기를 다시 붙인다(채널 부호화, 뒤 절의 오류 정정). 무턱대고 반복하는 것은 비싸다. 비트를 세 번 보내 다수결을 하면 p = 0.1에서 오류율이 0.028로 줄지만 전송량이 세 배가 된다. 섀넌의 놀라운 결과는, 이 채널이 전송 한 번에 실어 나를 수 있는 정보가 1 − H(p) = 0.53비트이고, 이보다 낮은 속도라면 오류율을 0에 가깝게 만드는 부호가 존재한다는 것이다.

정보원, 부호기, 잡음이 끼는 채널, 복호기, 수신자로 이어지는 통신 모형과, 비트를 확률 p로 뒤집는 이진 대칭 채널잡음정보원부호기채널복호기수신자부호기는 남는 것을 걷어 내고(압축) 다시 계획된 여분을 붙인다(오류 정정)0101그대로 1 − p그대로 1 − p보낸 비트점선: 확률 p로 뒤집힘p = 0.1이면 용량1 − H(p) = 0.53비트/전송
섀넌의 통신 모형(위)과 이진 대칭 채널(아래). 뒤집힘 확률이 0.1이면 비트 하나를 보낼 때마다 실어 나를 수 있는 정보는 0.53비트다. 나머지는 잡음과 싸우는 데 써야 한다.

섀넌 채널 용량: C = B log₂(1 + SNR)

전파나 전선처럼 연속 신호를 쓰는 채널이라면 용량은 두 가지로 정해진다. 쓸 수 있는 주파수 폭인 대역폭 B(Hz)와, 신호 세기를 잡음 세기로 나눈 신호 대 잡음비(SNR)다. 백색 가우스 잡음이 낀 채널의 용량은 C = B log₂(1 + SNR) 비트/초다(섀넌–하틀리 정리). 여기서 SNR은 dB가 아닌 선형 비다. 30 dB는 1000배이므로, 대역폭 3 kHz 전화선이라면 상한은 약 29,902 비트/초다.

식에서 두 가지를 읽을 수 있다. 대역폭은 용량에 정비례하지만 SNR은 로그 안에 있다. 신호를 두 배로 세게 해도 용량은 조금만 늘고, 대역폭을 두 배로 넓히면 두 배가 된다. 그래서 무선 통신은 더 넓은 주파수 대역(5G의 밀리미터파, 와이파이의 넓은 채널)과 여러 안테나로 공간을 나눠 쓰는 MIMO에 매달린다. 대역폭 20 MHz라면 SNR 0 dB에서 20 Mbit/s, 20 dB에서 133 Mbit/s, 30 dB에서 199 Mbit/s가 상한이다. 변조와 다중 안테나 이야기는 무선 통신 노트, 대역폭과 샘플링은 신호 처리 노트에 있다.

대역폭 20 MHz 채널에서 SNR이 −10 dB부터 40 dB까지 변할 때 섀넌 용량 곡선0100200-10010203040용량(Mbit/s), B = 20 MHz신호 대 잡음비 SNR(dB)0 dB → 20 Mbit/s20 dB → 133 Mbit/s30 dB → 199 Mbit/s
대역폭 20 MHz 채널의 섀넌 용량. SNR이 높을 때는 10 dB(10배) 늘 때마다 대역폭 1 Hz당 약 3.3비트씩만 는다. 실제 시스템은 이 곡선 아래 어딘가에서 동작한다.

오류 검출: 패리티, 체크섬, CRC

고칠 수는 없어도 "틀렸다"는 것만 알면 다시 보내 달라고 할 수 있다. 가장 싼 방법이 패리티 비트다. 1의 개수가 짝수가 되도록 비트 하나를 덧붙이면 비트 하나가 뒤집힌 오류를 잡는다. 두 개가 뒤집히면 다시 짝수가 되어 놓친다.

인터넷 체크섬은 IP·TCP·UDP 머리글에 쓰인다. 데이터를 16비트 낱말로 잘라 1의 보수 덧셈(넘친 자리는 맨 아래로 다시 더함)으로 모두 더하고, 그 합을 뒤집어 적는다. 받는 쪽이 체크섬까지 함께 더하면 모든 비트가 1이 나와야 한다. 계산이 아주 싸지만 낱말 순서가 바뀐 오류는 못 잡는다.

CRC(순환 중복 검사)는 비트열을 GF(2) 위의 다항식으로 보고, 정해 둔 생성 다항식으로 나눈 나머지를 덧붙인다. GF(2)에서 덧셈과 뺄셈은 모두 XOR이라 나눗셈은 "맨 앞 1에 생성 다항식을 맞대고 XOR"의 반복이다. 받는 쪽이 같은 다항식으로 나눠 나머지가 0이 아니면 오류다. 하드웨어로 아주 빠르게 계산되고, 생성 다항식 길이보다 짧은 연속 오류(버스트)는 모두 잡는다. 이더넷 프레임과 ZIP 파일이 CRC-32를 쓴다.

이 셋은 모두 우연한 오류를 잡는 장치다. 데이터를 일부러 고치는 사람은 체크섬이나 CRC도 다시 계산해 붙이면 그만이라 고의 변조는 막지 못한다. 변조를 막아야 하면 열쇠가 있어야 계산되는 메시지 인증 코드(MAC)나 전자 서명을 쓴다(Wikipedia의 CRC 데이터 무결성 절, 암호학 노트).

메시지 11010011101100을 생성 다항식 1011로 XOR 나눗셈해 나머지 100을 얻는 CRC 계산 과정메시지 + 000110100111011000001. XOR 1011011000111011000002. XOR 1011001110111011000003. XOR 1011000101111011000004. XOR 1011000000011011000005. XOR 1011000000001101000006. XOR 1011000000000110000007. XOR 1011000000000011100008. XOR 1011000000000001010009. XOR 101100000000000000100메시지덧붙인 0나머지 100이 CRC다. 보낼 것: 11010011101100 100
교재에 자주 나오는 예. 메시지 11010011101100 뒤에 0을 셋 붙이고 1011(x³ + x + 1)로 나눈다. 줄마다 색칠한 네 칸이 XOR한 자리이고, 마지막 세 칸이 나머지다. 나눗셈 함수가 계산한 줄을 그대로 그렸다.

오류 정정: 해밍 거리와 해밍(7,4)

고치려면 오류가 어디서 났는지 알아야 한다. 두 비트열의 해밍 거리는 서로 다른 자리의 수다. 쓸 수 있는 부호어끼리의 최소 거리가 d면, d − 1개까지의 오류는 다른 부호어로 착각할 수 없으니 검출할 수 있고, ⌊(d − 1)/2⌋개까지는 가장 가까운 부호어로 되돌려 고칠 수 있다. 오류 정정 부호를 설계한다는 것은 부호어들을 서로 멀리 떨어뜨려 놓는 일이다.

리처드 해밍은 1950년에 해밍 부호를 내놓았다. 해밍(7,4)는 데이터 4비트에 패리티 3비트를 붙여 7비트로 보낸다. 부호어끼리 최소 거리가 3이라 한 비트 오류를 고친다. 비결은 배치다. 자리 번호를 이진수로 쓰고, 패리티를 1·2·4번 자리에 두어 p1은 번호에 1이 있는 자리, p2는 2가 있는 자리, p4는 4가 있는 자리를 검사하게 한다. 그러면 실패한 검사들을 이진수로 읽은 값(증후군)이 곧 틀린 자리 번호다.

해밍(7,4) 부호로 데이터 1011을 부호화하고, 한 비트가 뒤집힌 뒤 세 검사로 틀린 자리를 찾아 고치는 단계 그림자리역할1p12p23d14p45d26d37d4??1?0110?1?011011?011011001101100010110001011000101100010110011검사 1c1 = 0검사 2c2 = 1검사 4c4 = 1보낸 것 0110011 → 받은 것 0110001증후군 110₂ = 6 → 자리 6 고침 → 데이터 1011점 = 그 검사가 보는 자리
1 / 9

데이터 1011을 자리 3·5·6·7에 놓는다. 2의 거듭제곱 자리 1·2·4는 패리티 자리로 비워 둔다.

해밍(7,4) 부호. 패리티 3비트가 서로 다른 자리 묶음을 검사하도록 배치되어, 실패한 검사의 조합이 곧 틀린 자리 번호(이진수)가 된다. 한 비트 오류는 어디서 나든 고친다.

해밍 부호는 지금도 서버용 ECC 메모리에 쓰인다(한 비트를 더 붙여 두 비트 오류를 검출까지 하는 SECDED 꼴). 다만 해밍(7,4)는 7비트에 4비트만 실어 효율이 57%이고 두 비트 오류에는 엉뚱한 자리를 "고친다". 더 센 잡음, 한꺼번에 몰려오는 오류에는 아래의 부호들이 쓰인다. 메모리 쪽 이야기는 RAM 노트에 있다.

리드–솔로몬: QR 코드와 CD

1960년 MIT 링컨 연구소의 어빙 리드와 구스타브 솔로몬이 만든 리드–솔로몬(RS) 부호는 비트가 아니라 기호(보통 8비트 바이트) 단위로 일한다. 데이터 기호 k개를 다항식의 계수로 보고, 그 다항식을 n개 점에서 계산한 값을 보낸다는 발상이다. 점이 몇 개 망가져도 남은 점으로 다항식을 되살릴 수 있다. 패리티 기호를 2t개 붙이면 위치를 모르는 기호 오류 t개까지 고친다.

기호 단위라는 점이 긁힘과 얼룩에 강하다. 연속된 비트 수십 개가 망가져도 바이트 몇 개의 오류로만 셈된다. CD는 RS 부호 두 겹 사이에 데이터를 뒤섞는 인터리빙을 넣은 CIRC를 써서, 대량 생산된 소비자 제품에 강한 오류 정정을 처음 넣은 예로 꼽힌다. QR 코드도 RS 부호를 덧붙여 일부가 가려지거나 더러워져도 읽힌다. 오류 정정 등급을 고를 수 있는데, 가장 많이 쓰는 M 등급은 약 15%, Q 등급은 약 25%의 코드어를 복원한다. DVD도 더 큰 블록으로 같은 구성을 쓴다.

데이터 기호 8개와 패리티 기호 4개로 된 리드–솔로몬 부호어에서 연속 12비트 오류가 기호 두 개만 망가뜨리는 그림데이터 기호 8개 (기호 = 8비트)패리티 4개연속 12비트 오류(긁힘)망가진 기호 2개 ≤ 패리티 4개 ÷ 2 → 고칠 수 있다기호 안에서 비트가 몇 개 틀렸든 그 기호 하나의 오류로 센다CD는 RS 두 겹 사이에 인터리빙을 넣어 긴 긁힘을 여러 부호어로 흩는다
RS 부호어 하나(데이터 기호 8개 + 패리티 4개). 연속 12비트 오류가 기호 두 개에 걸쳤다. 패리티 4개면 기호 2개까지 고치므로 복원된다. 걸친 기호 수는 함수로 계산했다.

LDPC와 폴라 부호: 5G

섀넌은 용량에 다가가는 부호가 "있다"고 증명했을 뿐 만드는 법은 알려 주지 않았다. 반세기 가까이 실용 부호는 용량에서 꽤 떨어져 있었다. 이 간극을 거의 메운 것이 LDPC(저밀도 패리티 검사) 부호다. 해밍 부호처럼 "이 비트들의 합은 짝수"라는 검사를 쓰되, 검사 수천 개가 저마다 몇 개의 비트만 보게 한다(검사 행렬이 거의 0이라 저밀도). 복호기는 검사 마디와 비트 마디가 "내가 보기에 너는 0일 확률이 이만큼"이라는 믿음을 선을 따라 주고받기를 되풀이한다(믿음 전파). 이 과정이 용량에 아주 가까이서도 잘 수렴한다.

폴라 부호는 에르달 아르칸이 내놓은 부호로, 채널을 여러 번 합치고 나누면 일부는 거의 완벽한 채널이, 나머지는 거의 쓸모없는 채널이 된다는 "채널 양극화"를 이용한다. 좋은 채널에만 데이터를 싣고 나쁜 채널에는 미리 정한 값을 넣는다. 부호 길이를 늘리면 용량에 닿는다는 것이 증명되어 있다. 3GPP는 2016년 11월 5G NR에서 eMBB의 제어 채널에 폴라 부호를, 데이터 채널에 LDPC를 쓰기로 정했다. 짧은 제어 메시지와 긴 데이터에 각자 강한 부호를 고른 셈이다.

검사 마디 세 개와 비트 마디 일곱 개를 잇는 해밍(7,4) 부호의 태너 그래프c1c2c41234567검사 마디: 이어진 비트의 합이 짝수여야 한다비트 마디: 받은 값과 "내가 0일 확률" 믿음을 가진다복호 = 선을 따라 믿음을 주고받기를 되풀이(믿음 전파)
해밍(7,4)를 태너 그래프로 그린 것. 네모(검사)와 동그라미(비트)를 검사가 보는 자리끼리 이었다. LDPC는 같은 모양이 수천 개 규모로 커지되, 마디마다 선이 몇 개뿐이다.

정보 이론과 AI: 교차 엔트로피와 KL

분류 모델을 훈련할 때 가장 흔한 손실 함수가 교차 엔트로피 H(p, q) = Σ −p log q다. 정답 분포 p를 모델이 낸 분포 q로 부호화할 때의 평균 부호 길이로 읽을 수 있다. 정답이 한 칸(원-핫)이면 정답 칸에 모델이 준 확률의 −log만 남는다. 정답에 확신할수록 손실이 0에 가깝고, 틀린 쪽에 확신하면 손실이 크게 뛴다. 교차 엔트로피에서 p 자체의 엔트로피를 뺀 것이 KL 발산 D(p‖q)로, "q로 부호화해서 더 쓴 비트"다. 0 이상이고 p = q일 때만 0이지만, 순서를 바꾸면 값이 달라져 거리는 아니다.

언어 모델의 손실도 다음 토큰에 대한 교차 엔트로피이고, 흔히 보는 퍼플렉서티는 그 값을 지수로 되돌린 것이다. 따라서 언어 모델을 잘 훈련하는 일은 글을 잘 압축하는 일과 같은 문제다. 소프트맥스와의 결합, 기울기 모양, 수치 안정성은 AI를 위한 수학 노트에서 다룬다.

정답이 개인 예에서 두 모델이 낸 확률 막대와 각각의 교차 엔트로피 손실모델 A0.2고양이0.7개0.1새손실 −log₂ 0.7 = 0.51비트모델 B0.6고양이0.3개0.1새손실 −log₂ 0.3 = 1.74비트정답을 0.1·0.8·0.1로 부드럽게 주면 KL 발산은 A 0.05, B 0.87비트
정답이 '개'인 사진에 두 모델이 낸 확률. 정답 칸(색칠)에 0.7을 준 A가 0.3을 준 B보다 손실이 작다. 손실과 KL은 함수로 계산했고, 여기서는 밑을 2로 써 비트로 나타냈다(훈련 코드는 보통 자연로그).

핵심 자료

신호와 샘플링은 신호 처리 노트, 실제 무선 링크는 무선 통신 노트, 암호와 난수는 암호학 노트에 있다.

자료종류요지링크
A Mathematical Theory of Communication논문 소개섀넌이 1948년 Bell System Technical Journal에 두 번에 나눠 실은, 정보 이론을 연 논문의 내용과 영향을 정리한 문서.Wikipedia
RFC 1951 — DEFLATE Compressed Data Format표준LZ77과 허프만 부호를 겹쳐 쓰는 DEFLATE의 비트 단위 명세. 거리는 32K 바이트 창 안으로 제한한다.RFC Editor
RFC 1071 — Computing the Internet Checksum표준16비트 낱말의 1의 보수 합으로 만드는 인터넷 체크섬의 정의와 빠르게 계산하는 요령.RFC Editor
QR 코드의 오류 정정 기능제조사 설명QR 코드를 만든 회사의 설명. 리드–솔로몬 부호를 덧붙이며, 복원 가능한 비율에 따라 등급을 고른다.DENSO WAVE