8장 — 분배함수와 자유에너지
이 장의 물음
VAE(변분 자기부호화기)를 한 번이라도 학습해 본 사람은 그 손실 함수가 두 항으로 되어 있다는 것을 안다. 디코더가 입력을 얼마나 잘 되살리는지 재는 재구성 항과, 인코더가 내놓은 잠재변수의 분포가 사전분포 N(0, I)에서 얼마나 멀어졌는지 재는 KL 항(KL 발산은 두 분포가 얼마나 다른지 재는 양)이다. 이 둘의 합에 마이너스를 붙인 양을 ELBO(evidence lower bound, 증거의 하한. 머리글자를 이어 「엘보」라고 읽는다)라 부르고, 교과서는 이것이 데이터의 로그우도 ln p(x)의 하한이라고 가르친다. 그런데 왜 하필 이 두 항일까? 하한과 참값 사이의 틈은 무엇이고, KL 항 앞에 계수 β를 붙이는 β-VAE는 대체 무엇을 조절하는 걸까?(이 β는 논문이 붙인 이름을 따른 글자로, 아래에서 쓰는 역온도 β와는 다른 양이다.)
이 물음에 답하려면 조금 멀리 돌아가야 한다. 이 장은 다음 물음들에 차례로 답하면서 VAE의 손실로 돌아온다.
- 볼츠만 분포에서 상태 하나는 에너지가 낮을수록 흔한데, 실제로 관찰되는 에너지는 왜 가장 낮은 에너지가 아닐까?
- 우리가 정규화 상수라며 나눠 버리던 합 Z의 로그는 그 관찰되는 에너지에 대해 무엇을 알고 있을까?
- 볼츠만 분포가 아닌 분포, 이를테면 인코더가 내놓는 분포에도 같은 잣대를 댈 수 있을까?
- 고차원 가우시안에서 뽑은 샘플의 에너지 ‖x‖²/2는 왜 확률밀도가 가장 높은 원점이 아니라 d/2 근처에 모일까?
- 분류기가 매번 계산하고 버리던 logsumexp는 입력에 대해 무엇을 말해 줄까?
에너지와 엔트로피의 겨루기: 관찰되는 에너지는 바닥이 아니다
볼츠만 분포에서 미시상태 하나의 확률은 e^(−βE)에 비례하므로(β는 열원의 역온도 1/kT), 에너지가 낮은 상태일수록 흔하다. 그렇다면 열원과 맞닿은 계를 들여다보면 늘 가장 낮은 에너지가 관찰될까? 두 상태만 가질 수 있는 입자 몇 개로 직접 세어 보자.
2준위 입자 세 개와 서른 개
에너지 0인 바닥 상태와 에너지 ε인 들뜬 상태, 이렇게 두 상태만 가질 수 있는 입자 N개가 온도 T인 열원과 맞닿아 있다고 하자. 입자끼리는 에너지를 주고받지 않는다. 계산을 쉽게 하려고 βε = ln 2인 온도, 곧 들뜬 상태의 볼츠만 인자 e^(−βε)가 정확히 1/2인 온도를 고른다.
입자가 세 개이면 미시상태는 2³ = 8개다. 미시상태 하나하나로 보면 모두 바닥 상태인 미시상태의 볼츠만 인자가 1로 가장 크고, 입자 하나가 들뜬 미시상태는 1/2로 그 절반이다. 그런데 입자 하나가 들뜬 미시상태는 세 개이므로, 에너지가 ε인 쪽의 비중은 합쳐서 3 × 1/2 = 1.5가 되어 바닥 상태의 1을 이긴다. 에너지 값별로 정리하면 다음과 같다.
| 들뜬 입자 수 n | 미시상태 수 g | 볼츠만 인자 e^(−βnε) | 비중 g·e^(−βnε) | 점수 ln g − βnε |
|---|---|---|---|---|
| 0 | 1 | 1 | 1 | 0 |
| 1 | 3 | 0.5 | 1.5 | 0.405 |
| 2 | 3 | 0.25 | 0.75 | −0.288 |
| 3 | 1 | 0.125 | 0.125 | −2.079 |
마지막 칸은 비중의 로그다. 로그를 취하면 곱이 합으로 바뀌어서, 에너지 값마다 경우의 수가 보태는 몫 ln g와 에너지가 매기는 벌점 βnε가 따로 보인다. 에너지를 올리면 벌점이 늘지만 그만큼 상태의 수도 늘어 몫을 벌어 온다. 이 차이 ln g − βnε를 앞으로 에너지 값의 「점수」라 부르자. 점수가 가장 큰 에너지 값이 가장 자주 관찰되며, 여기서는 n = 1이다.

입자를 30개로 늘려 같은 계산을 하면 다음 표를 얻는다. 입자들이 서로 독립이라 분배함수는 입자 하나의 분배함수를 거듭제곱한 Z = (1 + e^(−βε))^N = 1.5^N이고, 마지막 칸의 확률은 비중을 이 Z로 나눈 것이다.
| n | ln g | −βnε | 점수 | 확률 |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0.0000 |
| 5 | 11.867 | −3.466 | 8.401 | 0.0232 |
| 9 | 16.476 | −6.238 | 10.238 | 0.1457 |
| 10 | 17.218 | −6.931 | 10.287 | 0.1530 |
| 11 | 17.816 | −7.625 | 10.191 | 0.1391 |
| 15 | 18.860 | −10.397 | 8.462 | 0.0247 |
| 20 | 17.218 | −13.863 | 3.355 | 0.0001 |
| 30 | 0 | −20.794 | −20.794 | 0.0000 |
에너지만 보면 n = 0이 가장 좋고, 경우의 수만 보면 절반이 들뜬 n = 15가 가장 좋다. 실제 승자는 그 사이의 n = 10, 곧 입자의 3분의 1이 들뜬 상태다. 입자 하나가 들떠 있을 확률이 1/(1 + e^(βε)) = 1/3이었으니 당연한 결과이기도 하다.
점수를 물리의 말로
점수를 물리의 말로 옮겨 보자. 경우의 수의 로그에 볼츠만 상수를 곱한 것이 엔트로피 S(E) = k ln g(E)이므로, 점수에 −kT를 곱하면 E − TS(E)가 된다. 그러니 점수가 가장 큰 에너지는 E − TS(E)가 가장 작은 에너지다.
E − TS는 에너지와 엔트로피의 겨루기를 한 줄로 적은 것이다. 에너지 항은 계를 바닥 상태 쪽으로 끌어내리고, −TS 항은 상태가 많은 쪽으로 끌어당기며, 온도 T가 엔트로피 1 단위를 에너지 몇 단위로 쳐 줄지 정하는 환율 노릇을 한다. 온도가 낮으면 환율이 낮아 에너지 항이 이기므로 계는 바닥 상태 근처에 머물고, 온도가 높으면 엔트로피 항이 이겨 가장 상태가 많은 에너지, 2준위 입자라면 절반이 들뜬 곳으로 간다. 미시상태 하나하나로 보면 늘 바닥 상태가 가장 흔한데도 관찰되는 에너지는 온도에 따라 옮겨 가는 이유가 여기 있다.
승자의 위치는 E − TS(E)를 E로 미분해 0으로 놓으면 나온다. 그러면 dS/dE = 1/T, 곧 「계 자신의 온도가 열원의 온도와 같아지는 에너지」가 승자다. 이 최소화에는 더 직접적인 뜻도 있다. 계가 에너지 E를 가지면 열원은 그만큼을 내준 것이므로 열원의 엔트로피는 E/T만큼 줄어 있다. 따라서 계와 열원을 합친 전체 엔트로피는 S(E) − E/T + (상수)이고, 여기에 −T를 곱한 것이 E − TS(E)다. E − TS를 가장 작게 하는 것은 계와 열원을 합친 전체의 경우의 수를 가장 크게 하는 것과 같은 일이다. 새로운 원리가 생긴 것이 아니라, 에너지를 주고받는 두 계는 전체 경우의 수가 가장 큰 나눠 갖기에서 멈춘다는 원리를 열원의 몫까지 계산에 넣어 계 쪽의 말로만 다시 쓴 것이다.
아래 위젯에서 입자 수와 βε를 바꾸며 경우의 수의 몫(빨강), 에너지 벌점(주황), 둘을 더한 점수(검정)가 어디서 가장 커지는지 보자.
문제 1. 비 올 확률 30%인 한 주
월요일부터 금요일까지 날마다 비 올 확률이 30%이고, 날씨는 날마다 따로 정해진다고 하자. (가) 닷새 모두 맑을 확률과, 비 오는 날이 정확히 하루일 확률을 구하라. (나) 비 오는 날 수 가운데 가장 흔한 값은 몇 일이고, 평균과 같은가?

(가)는 0.7⁵ = 0.168이고, 하루만 비 오는 주는 비 오는 요일이 다섯 가지라 5 × 0.3 × 0.7⁴ = 0.360이에요. 모두 맑은 주 하나보다 하루 비 오는 주를 묶은 쪽이 두 배 넘게 흔하네요. (나)는 하루에 0.3일씩 닷새면 평균이 1.5일이니까, 가장 흔한 값은 1.5에 가까운 2일이겠죠.

비 오는 날이 이틀인 주의 확률도 구해 볼까요?

비 오는 요일 두 개를 고르는 방법이 10가지니까 10 × 0.3² × 0.7³ = 0.309요. 하루짜리 0.360보다 작네요. 평균은 1.5일인데 가장 흔한 건 하루예요.

하루씩 늘릴 때 바뀌는 비만 보면 돼. 0일에서 1일로 가면 고르는 방법은 1가지에서 5가지로 늘고 확률 쪽은 0.3/0.7 = 3/7배가 되니까 합쳐서 15/7배로 커져. 1일에서 2일로 가면 방법은 5가지에서 10가지로 두 배인데 확률 쪽이 또 3/7배라 6/7배로 줄어.

2준위 입자로 옮기면 무엇이 무엇이죠?

비 오는 날이 들뜬 입자고 3/7이 볼츠만 인자 e^(−βε)예요. 고르는 방법의 수가 g고요. 승자는 하나 늘릴 때의 비가 1을 넘다가 1 아래로 떨어지는 자리예요.

과제 점수 평균이 7.5점이라고 7.5점 근처를 받은 사람이 제일 많은 건 아닌 거랑 같네요.
문제 2. 바닥 상태가 이기는 온도
2준위 입자 N개가 온도 T인 열원과 맞닿아 있다. (가) 입자가 3개일 때, 모두 바닥 상태인 에너지 값(n = 0)과 하나만 들뜬 값(n = 1)의 점수가 같아지는 βε를 구하라. (나) 입자가 30개일 때 n = 0이 승자가 되려면 βε가 얼마 이상이어야 하는가? βε = 3.5일 때 들뜬 입자 수의 평균은 몇 개인가?

n = 0의 점수는 ln 1 − 0 = 0이고 n = 1의 점수는 ln 3 − βε니까, (가)는 βε = ln 3 = 1.099예요. (나)도 같은 방법이면 ln 30 = 3.401 이상이고요.

30개면 n = 2나 n = 3이 n = 0을 이길 수도 있잖아. n = 1만 보고 끝내도 돼?

점수가 n에서 n + 1로 갈 때 얼마씩 바뀌는지 적어 볼까요?

ln C(N, n + 1) − ln C(N, n) = ln((N − n)/(n + 1))이고 벌점이 βε씩 붙으니까, 하나 늘릴 때 바뀌는 양은 ln((N − n)/(n + 1)) − βε예요. 앞의 로그는 n이 커질수록 작아지니까, n = 0에서 1로 갈 때 이미 내려가면 그 뒤로도 계속 내려가요. n = 1만 보면 되네요.

βε = 3.5에 넣어 보면 점수가 n = 0, 1, 2, 3에서 0, −0.099, −0.925, −2.191이에요. 승자는 0개예요. 그런데 입자 하나가 들뜰 확률이 1/(1 + e^3.5) = 0.029라서 들뜬 입자 수의 평균은 30 × 0.029 = 0.88개네요.

승자는 0개인데 평균은 거의 1개야? 입자 30개에 βε = ln 2일 때는 승자 10과 평균 10이 딱 맞았잖아. 30개면 큰 계라고 생각했는데.

개수는 정수라서 승자와 평균은 1개 안쪽에서 어긋날 수 있어요. 평균이 10개일 때는 그 어긋남이 10분의 1이지만, 평균이 1개 근처면 어긋남이 평균만 해요. 큰 계라는 말은 입자가 많다는 것보다 들뜬 입자가 많다는 쪽에 가까워요.

극한을 쓸 때도 무엇이 커지는지를 먼저 봐야 하는 거네요. N이 크다고 Np도 크다는 보장은 없으니까요.