엔트로피: 평균 놀라움, 코드 길이의 하한

혼동하기 쉬운 점과 요약

토론 1. 관측하면 늘 덜 헷갈리게 되나

휴대폰을 어디 두었는지 헷갈려 집에 전화를 걸었다. 「집에 없어」라는 답을 들으면 휴대폰이 어디 있는지에 대한 헷갈림은 줄어드는가?

선생님 T01
선생님

아침에 나와서 휴대폰이 없다는 걸 알았어요. 믿음은 집 0.9, 회사 0.05, 버스 0.05예요. 집에 전화를 걸어 물어보면, 어떤 답이 오든 덜 헷갈리게 될까요?

이서연 S01
이서연

관측을 하면 조건부 엔트로피가 엔트로피보다 크지 않다고 했으니까, 전화를 걸면 늘 줄겠죠.

선생님 T01
선생님

그런데 집에 있어도 가족이 못 찾을 확률이 0.2예요. 「집에 없어」라는 답이 오면 믿음이 어떻게 바뀌죠?

이서연 S01
이서연

「없어」의 확률을 곳마다 곱하면 집은 0.9 × 0.2 = 0.18, 회사와 버스는 0.05 그대로예요. 합이 0.28이니까 나누면 (0.643, 0.179, 0.179)요.

김민준 M02
김민준

엔트로피를 재 볼게. 처음은 0.569비트인데, 「없어」를 들은 뒤는 1.297비트야. 두 배 넘게 늘었어.

이서연 S06
이서연

어, 관측했는데 늘었다고? 그럼 부등식이 틀린 거예요?

선생님 T01
선생님

부등식의 왼쪽은 무엇을 평균한 값이었죠?

이서연 S01
이서연

관측 결과마다의 엔트로피를, 그 결과가 나올 확률로 평균한 거요. 아, 「찾았어」라는 답도 있어요. 그 확률이 0.72고, 그러면 휴대폰이 집에 있는 게 확실하니까 엔트로피가 0이에요.

김민준 M01
김민준

그럼 전화 걸기 전에 평균 내면 0.28 × 1.297 + 0.72 × 0 = 0.363비트. 처음 0.569보다 작아.

이서연 S08
이서연

하나의 답은 헷갈림을 키울 수 있는데, 전화를 걸기 전에 가능한 답 전부로 평균을 내면 줄어드는 거네요. 날씨 짝에서도 비 온 날 다음 날은 0.918비트로 처음보다 컸고요. 부등식을 「어떤 답이 와도」로 읽은 게 잘못이었어요.

선생님 T14
선생님

그래요. 「관측은 불확실성을 줄인다」는 말은 관측하기 전에 매기는 평균의 약속이에요. 「집에 없어」를 들은 날 아침에 더 헷갈리는 건 이상한 일이 아니에요.

토론 2. 가공을 잘하면 정보가 늘어나나

날씨 앱의 해·우산 아이콘만 받아 보는 위젯이, 그 아이콘을 보고 「강수 확률 30%」처럼 더 자세한 문장으로 다듬어 보여 준다. 위젯이 날씨에 대해 알려 주는 비트는 아이콘보다 늘어나는가?

선생님 T01
선생님

휴대폰 위젯 하나가 날씨 앱의 아이콘(해, 우산)만 받아요. 그런데 화면에는 아이콘 대신 「강수 확률 30%」, 「강수 확률 75%」처럼 숫자를 보여 준다고 해요. 아이콘보다 날씨에 대해 더 많이 알려 줄까요?

김민준 M01
김민준

숫자가 더 자세하니까 더 알려 주지 않을까요? 아이콘은 두 가지뿐인데 숫자는 여러 값이 나올 수 있잖아요.

선생님 T01
선생님

위젯이 숫자를 정할 때 쓸 수 있는 건 무엇뿐이에요?

김민준 M01
김민준

아이콘뿐이에요. 해면 30%, 우산이면 75%처럼요.

이서연 S01
이서연

그럼 숫자도 두 가지밖에 안 나오겠네. 아이콘과 숫자가 하나씩 짝지어지니까, 날씨에 대해 알려 주는 것도 아이콘과 똑같아.

김민준 M05
김민준

그래도 위젯이 계산을 똑똑하게 하면요? 해일 때도 날마다 다른 숫자를 내게 하면 가짓수가 늘잖아요.

선생님 T01
선생님

날마다 다른 숫자를 무엇으로 정하죠? 위젯이 날씨를 따로 보지 않는다면요.

김민준 M04
김민준

주사위를 굴리든 날짜를 쓰든, 날씨와 상관없는 걸로 정해야 하네요. 그러면 가짓수는 늘어도 날씨에 대해 새로 알려 주는 건 없어요. 오히려 해인 날을 숫자 여럿으로 흩어 놓으면 보는 사람만 헷갈리고요. 자세해 보이는 것과 정보가 많은 걸 같은 걸로 봤어요.

이서연 S07
이서연

날씨 → 예보 → 아이콘 → 위젯 숫자로 이어지는데, 아이콘은 예보만, 위젯 숫자는 아이콘만 보고 만드니까 상호정보량은 0.379, 0.259에서 더 오를 수가 없구나. 데이터 처리 부등식이 바로 그 말이었네.

선생님 T13
선생님

그래요. 날씨에 대해 더 알려 주려면 가공을 다듬을 게 아니라 날씨를 다시 봐야 해요. 레이더 자료를 받아 오든, 예보 앱의 세 가지 예보를 그대로 받든요.

혼동하기 쉬운 점

혼동하기 쉬운 생각 나온 문제 바로잡는 법
정수가 아닌 비트(3.32비트)는 질문 횟수로 뜻이 없다고 봄 1, 4 많이 모아 물을 때 한 번에 드는 질문 수가 그 값에 다가간다
첫 손실의 크기를 보지 않고 학습을 돌림 3 열 클래스면 ln 10 = 2.303 nat. 크게 벗어나면 학습 전부터 엉뚱한 확신이 있다
두 번에 나눠 고를 때 둘째 고르기의 엔트로피를 그대로 더함 5 둘째 고르기가 일어날 확률을 곱해 더한다
손실이 작은 숫자면 잘 학습한 모델이라고 봄, 손실의 바닥을 0으로 봄 6 라벨 분포의 엔트로피(입력을 보지 않는 모델의 손실)와 비교한다
믿은 확률로 코드 길이를 정한 뒤 평균도 믿은 확률로 냄 7 길이는 믿은 q가, 평균의 무게는 실제 p가 정한다
KL을 두 분포 사이의 거리처럼 대칭으로 봄 8 어느 쪽이 실제(평균의 무게)인지 바꾸면 값이 바뀐다. 실제로 일어나는 일에 0을 준 믿음은 한 방향으로 무한대
하드 라벨 손실이 줄면 교사 분포에도 가까워진다고 봄 9 교사 분포의 작은 확률들을 누르면 KL이 커진다. 목표 분포가 무엇인지 본다
독립이 아닌 토큰의 놀라움은 더할 수 없다고 봄, 앞을 모르는 확률로 놀라움을 잼 11 앞 토큰을 조건으로 한 확률로 재면 놀라움은 늘 더해진다(연쇄 법칙)
관측하면 어떤 결과가 오든 덜 헷갈린다고 봄 토론 1 조건부 엔트로피의 부등식은 관측하기 전에 매긴 평균의 약속이다
적중률이 같으면 알려 주는 정보도 같다고 봄 12 상호정보량으로 비교한다. 늘 같은 답을 내는 예보는 0비트다
표에서 센 상호정보량(정보 이득)을 그대로 믿음 13 값의 가짓수에 비해 자료가 적으면 부풀어 오른다. 처음 보는 자료로 확인한다
라벨을 맞힐 확률이 같으면 표현이 담은 정보도 같다고 봄, 층이 정보를 못 만들면 입력을 그대로 쓰는 것이 낫다고 봄 14 맞힐 확률은 「얼마나 확실한가」를 보지 않는다. 층은 비트를 만들지 않고, 남은 비트를 마지막 층이 읽기 쉬운 모양으로 늘어놓는다
가공을 잘하면 정보가 늘어난다고 봄 토론 2 예보만 보고 만든 아이콘처럼, 앞 단계의 결과만 보고 만든 것은 상호정보량을 지키거나 줄일 뿐이다(데이터 처리 부등식)

요약

이 장에서 한 일을 정리해 보자. 확률 p인 결과가 일어났다는 소식의 크기를 놀라움 −log₂ p로 쟀다. 독립인 두 소식을 함께 들으면 크기가 더해져야 한다는 조건이 로그를 고르고, 밑 2는 단위를 비트로 정한다. 분류 모델이 사진마다 매기는 손실은 정답에 준 확률의 놀라움이고, 열 클래스를 고르게 믿는 모델의 손실은 ln 10 = 2.303 nat이다.

놀라움을 확률로 평균한 것이 엔트로피이고, 끊어 읽을 수 있는 어떤 코드도 평균 길이가 엔트로피보다 짧을 수 없다. 하틀리는 가짓수의 로그로 정보를 쟀고, 섀넌은 확률이 다른 경우까지 −Σ p log p로 넓혔다. 믿은 확률 q로 코드표를 만들고 결과가 실제 확률 p로 나오면 평균 길이는 크로스 엔트로피 H(p, q) = H(p) + KL(p‖q)이고, KL은 늘 0 이상이며 두 분포를 바꿔 넣으면 값이 달라진다. 분류와 언어 모델의 손실, 지식 증류의 손실이 모두 크로스 엔트로피이고, 학습이 줄일 수 있는 것은 KL뿐이다.

두 변수를 함께 적는 비트는 하나를 적는 비트와 그것을 안 뒤에 남은 비트(조건부 엔트로피)의 합이다. 섀넌은 이 쪼개기로 영어 글자 하나의 엔트로피를 4.14, 3.56, 3.3비트로 줄여 가며 쟀고, 언어 모델의 손실은 토큰마다의 조건부 놀라움의 합이다. 조건을 알면 남는 비트는 평균으로 줄어들고, 줄어든 양이 상호정보량이다. 상호정보량은 어느 방향에서 재도 같고, 짝의 분포와 「서로 모르는 세계」의 분포 사이의 KL이며, 가공해서 늘릴 수 없다.

flowchart LR
  A["놀라움<br/>−log₂ p"] -- "확률로 평균" --> B["엔트로피 H(p)<br/>평균 코드 길이의 바닥"]
  B -- "q를 믿고 적으면" --> C["크로스 엔트로피<br/>H(p) + KL(p‖q)"]
  B -- "둘을 함께 적으면" --> D["연쇄 법칙<br/>H(X,Y) = H(X) + H(Y|X)"]
  D -- "조건으로 준 비트" --> E["상호정보량<br/>H(Y) − H(Y|X)"]
  C --> F["학습 손실<br/>줄일 수 있는 것은 KL"]

정리 연습문제

물음. 독립인 두 사건의 확률이 각각 0.1이다. 「소식의 크기」를 확률의 함수로 정할 때, 두 사건이 함께 일어났다는 소식의 크기가 따로의 크기를 더한 것과 같아지는 함수는?

  • [ ] 1/p 〔틀림: 따로 더하면 20인데 함께 일어난 일은 100이다.〕
  • [ ] 1 − p 〔틀림: 따로 더하면 1.8인데 함께 일어난 일은 0.99다.〕
  • [x] −log₂ p 〔맞음: 따로 더해도 함께 재도 6.644비트다. 곱을 덧셈으로 바꾸는 함수가 로그다.〕

물음. 사기 거래가 1%인 자료에서 학습한 모델의 검증 손실이 0.06 nat이다. 맞는 말은?

  • [ ] 손실이 0.1보다 작으니 잘 학습한 모델이다 〔틀림: 손실은 자료의 라벨 엔트로피와 비교해야 읽힌다.〕
  • [x] 입력을 보지 않고 늘 0.01을 내는 모델의 손실 0.056 nat보다도 높다 〔맞음: 라벨 분포 (0.01, 0.99)의 엔트로피가 입력을 보지 않는 모델의 바닥이다.〕
  • [ ] 손실의 바닥은 0이므로 0.06만큼 더 줄일 수 있다 〔틀림: 입력이 라벨을 완전히 정하지 않으면 바닥은 0이 아니다.〕

물음. 네 말이 실제로 1/2, 1/4, 1/8, 1/8의 비율로 나오는데 넷을 고르게 믿고 2자리씩 주었다. 잘못 믿은 탓에 한 말마다 더 쓰는 비트는?

  • [x] 0.25비트 〔맞음: 크로스 엔트로피 2비트에서 엔트로피 1.75비트를 뺀 KL이다.〕
  • [ ] 0비트. 「다」와 「라」는 3자리 대신 2자리를 받아 득을 보니 서로 비긴다 〔틀림: 득을 보는 말은 드물고 손해를 보는 「가」는 절반이나 나온다. 평균하면 KL은 늘 0 이상이다.〕
  • [ ] 0.5비트. 넷의 길이 차이 −1, 0, 1, 1을 평균하면 된다 〔틀림: 길이 차이는 실제 비율로 평균한다. ½·1 + ¼·0 + ⅛·(−1) + ⅛·(−1) = 0.25다.〕

물음. 오늘과 내일의 날씨 짝에서 H(오늘) = 0.881, H(내일∣오늘) = 0.690비트다. 날씨 짝 하나를 적는 데 드는 평균 비트의 바닥은?

  • [ ] 0.881 + 0.881 = 1.763비트 〔틀림: 날마다 따로 적는 값이다. 오늘을 안 뒤의 내일은 덜 헷갈린다.〕
  • [x] 0.881 + 0.690 = 1.571비트 〔맞음: 연쇄 법칙 H(X, Y) = H(X) + H(Y∣X)다.〕
  • [ ] 0.690비트 〔틀림: 오늘 날씨를 적는 비트를 빼먹었다.〕

물음. 적중률이 똑같이 80%인 두 날씨 앱이 있다. 앱 B는 늘 「맑음」이라고만 하고, 앱 C는 날마다 다른 예보를 낸다. 맞는 말은?

  • [ ] 적중률이 같으니 날씨에 대해 알려 주는 비트도 같다 〔틀림: 늘 같은 답을 내는 앱은 예보를 본 뒤에도 날씨의 엔트로피가 그대로라 상호정보량이 0이다.〕
  • [x] 상호정보량으로 비교하면 B는 0비트, C는 0보다 크다 〔맞음: 이 동네가 원래 맑은 덕에 오른 적중률은 앱이 알려 준 정보가 아니다.〕
  • [ ] C는 「비」라고 한 날 엔트로피가 오르니 B보다 못하다 〔틀림: 예보를 보기 전에 두 예보의 확률로 평균하면 C가 엔트로피를 줄인다.〕

막힌 곳

엔트로피는 평균 코드 길이가 내려갈 수 있는 바닥이라고 했지만, 이 장은 그 바닥을 스무고개의 질문 수로만 확인했다. 질문 수는 정수라서 확률이 2의 거듭제곱이 아니면 바닥에서 떨어졌고, 많이 모아 물으면 다가간다고만 했다. 실제로 0과 1의 줄을 끊어 읽을 표시 없이 이어 보낼 때, 결과마다 어떤 길이를 줄 수 있고 어떤 길이는 줄 수 없을까? 맑은 날 하나에 0.322비트처럼 1비트보다 짧은 길이를 실제 비트열로 낼 방법이 있을까? 그리고 날씨나 글자를 아주 길게 이어 적으면, 엔트로피라는 바닥에 정말 얼마든지 가까이 다가갈 수 있을까?