2장 — 엔트로피

정보량: 맞히기 어려운 글자일수록 많이 알려 준다

섀넌은 영어 글자 하나가 평균 몇 비트를 알려 주는지 어림했지만, 글자마다 알려 주는 양은 제각각이었다. 그렇다면 글자 하나, 사건 하나가 알려 주는 양을 숫자 하나로 나타낼 수 있을까? 그리고 그 숫자는 −Σ p log₂ p 안에 들어 있는 −log₂ p 한 항과 어떻게 이어질까?

사건 하나의 정보량

베티의 놀이를 받아 적는 쪽에서 보자. LIGH 다음의 T처럼 첫 추측에 맞힐 글자는 전화로 불러 줄 필요가 거의 없다. 받는 사람도 이미 알고 있기 때문이다. 반대로 새 단어의 첫 글자처럼 여러 번 틀린 글자는 따로 알려 주어야 한다. 그러니 글자 하나가 알려 주는 양은 그 글자가 얼마나 맞히기 어려웠는지, 곧 그 글자의 확률에 달려 있다.

이 양을 숫자로 만들 때는 스무고개를 떠올리면 된다. 똑같이 그럴듯한 후보가 8개 있으면 예/아니오 질문 3번으로 답을 찾는다. 확률이 1/8인 결과는 후보 8개 가운데 하나가 나온 것만큼 맞히기 어렵고, 그 결과를 알리는 데는 예/아니오 답 3개가 든다. 그래서 확률 p인 일이 일어났을 때 얻는 정보량 (알리는 데 드는 예/아니오 답의 수, information content)을 다음과 같이 정한다. 단위 bit는 예/아니오 답 하나다.

정보량=−log⁡2p\textcolor{#9467bd}{\text{정보량}} = -\log_2 \textcolor{#e377c2}{p}
정보량그 일이 일어났다는 소식이 알려 주는 양 (bit)p그 일이 일어날 확률\begin{array}{ll} \textcolor{#9467bd}{\text{정보량}} & \text{그 일이 일어났다는 소식이 알려 주는 양 (bit)} \\ \textcolor{#e377c2}{p} & \text{그 일이 일어날 확률} \end{array}
사건 확률 정보량
LIGH 다음의 T (확률을 0.99로 치면) 0.99 0.01 bit
동전 앞면 1/2 1 bit
주사위 6 1/6 2.58 bit
로또 1등 1/8,145,060 23.0 bit
확률 p인 일이 일어났을 때의 정보량 −log₂ p. 확률이 1에 가까운 일은 거의 0 bit이고, 확률이 절반으로 줄 때마다 1 bit씩 늘며, 확률이 0에 다가가면 끝없이 커진다. 점은 위 표의 세 사건이다.
확률 p인 일이 일어났을 때의 정보량 −log₂ p. 확률이 1에 가까운 일은 거의 0 bit이고, 확률이 절반으로 줄 때마다 1 bit씩 늘며, 확률이 0에 다가가면 끝없이 커진다. 점은 위 표의 세 사건이다.

정보량은 흔히 놀라움(surprisal)이라고도 부른다. 거의 확실하던 일이 일어나면 놀라지 않고 드문 일이 일어나면 크게 놀란다는 느낌에서 붙은 이름이다. 하지만 이 책에서 "놀라움"은 느낌이 아니라 늘 위의 숫자, 곧 "그 결과를 전해 듣는 쪽이 새로 받아야 했던 예/아니오 답의 개수"를 가리킨다. 로또 1등의 23.0 bit는 "스무고개를 23번 해야 알아낼 만큼의 소식"이고, LIGH 다음의 T는 굳이 묻지 않아도 되는 소식이다.

엔트로피는 이 놀라움의 평균이다. 각 결과의 놀라움에 그 결과가 나올 확률을 곱해 더하면 다음과 같다.

H=∑ipi(−log⁡2pi)\textcolor{#9467bd}{H} = \sum_i \textcolor{#e377c2}{p_i} \left(-\log_2 \textcolor{#e377c2}{p_i}\right)
H엔트로피 = 놀라움의 평균 (bit)pi결과 i가 나올 확률i결과의 번호\begin{array}{ll} \textcolor{#9467bd}{H} & \text{엔트로피 = 놀라움의 평균 (bit)} \\ \textcolor{#e377c2}{p_i} & \text{결과 i가 나올 확률} \\ i & \text{결과의 번호} \end{array}

섀넌이 어림한 "영어 글자 하나에 0.6~1.3비트"도 이 평균이다. 대부분의 글자는 거의 0비트이고 단어 첫머리의 몇 글자가 큰 값을 내는데, 그것을 모두 평균한 값이다.

직접 움직여 보기놀라움의 평균 H(p)새 창에서 열기 ↗

ML에서: 언어 모델은 섀넌의 맞히기 놀이를 한다

베티가 한 일을 기계에게 시킨 것이 언어 모델이다. 모델은 앞의 토큰들을 보고 다음 토큰마다 확률을 내놓는다. 실제로 온 토큰에 높은 확률을 주었다면 그 토큰은 모델에게 거의 0비트짜리 소식이고, 낮은 확률을 주었다면 큰 소식이다. 섀넌이 사람에게서 잰 "글자 하나에 몇 비트"를 모델에게서 재면, 그 모델이 글을 얼마나 잘 예측하는지 보여 주는 숫자가 된다.

섀넌은 1951년 논문에서 예측과 압축이 같은 일이라는 것도 보였다. 받는 쪽에 똑같이 추측하는 쌍둥이가 있다면, 글자 대신 "몇 번째 추측에 맞았는가"만 보내도 쌍둥이가 원래 글을 되살린다. 그 숫자는 대부분 1이라서 아주 짧게 줄어든다. 언어 모델로 글을 압축하는 오늘날의 방법도 같은 생각 위에 서 있다. 모델이 잘 맞히는 글자에는 짧은 부호를, 못 맞히는 글자에는 긴 부호를 주는 것이다.

문제 11. 평균 질문 수

친구가 A, B, C, D 중 하나를 골랐다. 확률은 1/2, 1/4, 1/8, 1/8이다. 예/아니오 질문으로 맞히려면 평균 몇 번이 필요한가?

김민준 M01
김민준

후보가 4개니까 log₂ 4 = 2번.

이서연 S06
이서연

확률이 다르잖아. 엔트로피를 계산하면 (1/2)·1 + (1/4)·2 + (1/8)·3 + (1/8)·3 = 1.75비트야. 근데 선생님, 질문은 정수 번만 할 수 있잖아요. 1.75번은 말이 안 되는 것 같은데요.

선생님 T14
선생님

한 판에서는 정수지만, 여러 판을 하면 평균은 정수가 아닐 수 있어요. 질문 순서를 이렇게 정해 봐요. 먼저 “A야?” 아니면 “B야?” 그래도 아니면 “C야?”

김민준 M09
김민준

A면 1번, B면 2번, C나 D면 3번. 평균은 0.5×1 + 0.25×2 + 0.125×3 + 0.125×3 = 1.75. 진짜 1.75번이네요.

선생님 T01
선생님

자주 나오는 답을 먼저 물어보는 거예요. 이 방법이 2번보다 나은 건, 확률이 치우쳐 있다는 정보를 썼기 때문이에요. 엔트로피보다 평균 질문 수를 더 줄이는 방법은 없어요. 이게 섀넌이 증명한 압축의 한계예요.

김민준 M02
김민준

모스 부호에서 자주 쓰는 영어 글자 E가 점 하나인 것도 같은 생각이에요?

선생님 T13
선생님

같은 생각이에요. 자주 나오는 것에 짧은 부호를 주는 겁니다.

이서연 S03
이서연

그런데 선생님, 이번엔 확률이 1/2, 1/4, 1/8처럼 딱 떨어져서 질문 수가 엔트로피와 같았던 거 아니에요? 확률이 0.5, 0.3, 0.2인 셋 중 하나를 맞히라면요?

선생님 T12
선생님

직접 해 볼까요? 엔트로피는 몇 비트이고, 가장 좋은 질문 순서로는 평균 몇 번이죠?

이서연 S01
이서연

엔트로피는 −Σ p log₂ p ≈ 1.485비트예요. 질문은 “첫째야?” 다음에 "둘째야?"로 하면 0.5 × 1 + 0.3 × 2 + 0.2 × 2 = 1.5번이요. 이 셋으로는 이보다 줄일 수가 없는데, 엔트로피보다 조금 크네요.

선생님 T14
선생님

한 판마다 정수 번씩 물어야 하니 확률이 2의 거듭제곱이 아니면 조금 남아요. 대신 여러 판을 묶어 한꺼번에 물으면 남는 몫이 줄어요. 세 판씩 묶으면 한 판에 1.496번, 네 판씩 묶으면 1.493번으로 1.485에 다가가요. 엔트로피는 한 판짜리 질문으로는 닿지 못할 수도 있지만, 묶음을 키우면 얼마든지 가까이 갈 수 있는 한계예요.

이서연 S10
이서연

해석학에서 하한(inf)이 꼭 닿는 값은 아니어도 얼마든지 가까이 갈 수 있는 값이었던 거랑 같네요.

문제 12. 문장 하나를 보내는 데 드는 비트

언어 모델이 「나는 / 오늘 / 학교에 / 갔다」라는 문장의 토큰 넷에, 앞 토큰들을 보고 차례로 0.05, 0.10, 0.40, 0.90의 확률을 주었다(설명을 위해 정한 값이다). 보내는 쪽과 받는 쪽이 이 모델을 똑같이 나눠 가졌다면, 이 문장을 보내는 데 몇 비트쯤 들까? 가장 많이 알려 주는 토큰은 무엇인가?

김민준 M01
김민준

네 확률의 평균이 0.3625니까 −log₂ 0.3625 ≈ 1.46비트, 토큰 넷이면 5.86비트요.

선생님 T12
선생님

문장 전체가 나올 확률은 네 확률의 평균이에요, 곱이에요?

김민준 M04
김민준

차례로 다 나와야 하니까 곱이죠. 0.05 × 0.10 × 0.40 × 0.90 = 0.0018이고 −log₂ 0.0018 ≈ 9.12비트네요. 평균부터 내면 안 되는 거였어요.

이서연 S01
이서연

곱의 로그는 로그의 합이니까 토큰마다 따로 구해서 더해도 돼. 4.32 + 3.32 + 1.32 + 0.15 = 9.12비트. 「나는」이 4.32비트로 가장 많이 알려 주고, 「갔다」는 0.15비트뿐이야.

선생님 T13
선생님

「학교에」까지 들었으면 「갔다」는 거의 짐작이 가죠. 베티가 단어가 시작된 뒤의 글자를 거의 한 번에 맞힌 것과 같아요. 모델이 잘 맞히는 토큰에는 짧은 부호를, 못 맞히는 토큰에는 긴 부호를 주면, 문장 하나를 이 합에 가까운 비트로 보낼 수 있어요.

김민준 M08
김민준

그래서 다음 토큰을 잘 맞히는 모델일수록 글을 더 짧게 줄일 수 있는 거네요. 조별 과제 회의록도 다들 아는 얘기는 빼고 새로 정한 것만 적으면 짧아지는 것처럼요.