8장 — 분배함수와 자유에너지

변분 원리: 아무 분포에 매기는 자유에너지

지금까지 자유에너지는 볼츠만 분포 하나에만 붙은 숫자였다. 그런데 상태가 너무 많아 Z를 다 더할 수 없으면 볼츠만 분포 자체를 손에 쥘 수 없고, 그때는 계산할 수 있는 더 단순한 분포로 대신해야 한다. VAE의 인코더가 데이터마다 내놓는 분포가 바로 그런 대역이다. 다행히 ⟨E⟩ − TS라는 모양은 어떤 분포에도 계산할 수 있다. 볼츠만 분포가 아닌 분포에 같은 셈을 하면 그 값은 볼츠만 분포의 F보다 클까 작을까, 그리고 얼마나 차이가 날까?

볼츠만 분포가 가장 낮다

먼저 숫자로 보자. βε = ln 2인 2준위 입자 하나에서 kT를 단위로 쓰면 들뜬 상태의 에너지는 ln 2 = 0.693이다. 바닥 상태와 들뜬 상태에 확률을 나눠 주는 분포 셋을 골라, 각각 평균 에너지에서 엔트로피를 뺀 값(kT 단위)을 매겨 보자.

분포 (바닥, 들뜸) 평균 에너지 엔트로피 평균 에너지 − 엔트로피 볼츠만 분포보다 높은 만큼
(1, 0): 바닥 상태에 몰림 0 0 0 0.405
(0.5, 0.5): 고르게 0.347 0.693 −0.347 0.059
(2/3, 1/3): 볼츠만 분포 0.231 0.637 −0.405 0

볼츠만 분포의 값 −0.405는 −ln 1.5, 곧 이 입자의 자유에너지 F를 kT로 잰 값이고 셋 가운데 가장 낮다. 바닥 상태에 몰린 분포는 에너지로는 가장 좋지만 엔트로피를 통째로 잃고, 고른 분포는 엔트로피는 가장 크지만 에너지를 너무 많이 치른다. 그런데 마지막 칸의 0.405와 0.059는 두 분포가 볼츠만 분포와 얼마나 다른지 재는 KL 발산 Σ pᵢ ln(pᵢ/p_볼츠만,ᵢ)을 계산해 보면 소수 셋째 자리까지 그대로 나온다. 우연이 아니다.

미시상태 위의 아무 분포 p에 대해 평균 에너지에서 온도 × 엔트로피를 뺀 값을 p의 자유에너지라 부르자. 그러면 다음 등식이 성립한다.

F[p]≡⟨E⟩p−kT H(p)=F+kT DKL(p ∥ p볼츠만)\textcolor{#a000c8}{F}[\textcolor{#e377c2}{p}] \equiv \langle \textcolor{#ff7f0e}{E} \rangle_{\textcolor{#e377c2}{p}} - \textcolor{#7f7f7f}{k}\textcolor{#8c564b}{T}\, \textcolor{#9467bd}{H}(\textcolor{#e377c2}{p}) = \textcolor{#a000c8}{F} + \textcolor{#7f7f7f}{k}\textcolor{#8c564b}{T}\, \textcolor{#9467bd}{D_{\mathrm{KL}}}(\textcolor{#e377c2}{p} \,\|\, \textcolor{#e377c2}{p_{\text{볼츠만}}})
F[p]분포 p에 매긴 자유에너지p미시상태 위의 아무 분포⟨E⟩pp로 평균한 에너지H(p)p의 엔트로피 (nat)F볼츠만 분포의 자유에너지 −kTln⁡ZDKLKL 발산 (두 분포가 얼마나 다른지 재는 양, nat)p볼츠만같은 온도의 볼츠만 분포 e−βEi/Z\begin{array}{ll} \textcolor{#a000c8}{F}[\textcolor{#e377c2}{p}] & \text{분포 p에 매긴 자유에너지} \\ \textcolor{#e377c2}{p} & \text{미시상태 위의 아무 분포} \\ \langle \textcolor{#ff7f0e}{E} \rangle_{\textcolor{#e377c2}{p}} & \text{p로 평균한 에너지} \\ \textcolor{#9467bd}{H}(\textcolor{#e377c2}{p}) & \text{p의 엔트로피 (nat)} \\ \textcolor{#a000c8}{F} & \text{볼츠만 분포의 자유에너지 } -\textcolor{#7f7f7f}{k}\textcolor{#8c564b}{T} \ln \textcolor{#667733}{Z} \\ \textcolor{#9467bd}{D_{\mathrm{KL}}} & \text{KL 발산 (두 분포가 얼마나 다른지 재는 양, nat)} \\ \textcolor{#e377c2}{p_{\text{볼츠만}}} & \text{같은 온도의 볼츠만 분포 } e^{-\textcolor{#8c564b}{\beta} \textcolor{#ff7f0e}{E_i}}/\textcolor{#667733}{Z} \end{array}

증명은 KL의 정의에 볼츠만 분포의 로그 ln pᵢ = −βEᵢ − ln Z를 넣기만 하면 된다. D_KL(p‖p_볼츠만) = Σpᵢ ln pᵢ − Σpᵢ ln p_볼츠만,ᵢ = −H(p) + β⟨E⟩_p + ln Z이고, 여기에 kT를 곱하면 ⟨E⟩_p − kT H(p) + kT ln Z, 곧 F[p] − F다.

위 표를 들뜬 상태에 주는 확률의 함수로 이어 그린 곡선(βε = ln 2인 2준위 입자 하나, kT 단위). 곡선은 볼츠만 분포인 1/3에서 가장 낮은 −0.405이고, 다른 분포에서 곡선이 그 바닥보다 높은 만큼이 그 분포와 볼츠만 분포 사이의 KL이다(바닥에 몰린 분포 0.405, 고른 분포 0.059).
위 표를 들뜬 상태에 주는 확률의 함수로 이어 그린 곡선(βε = ln 2인 2준위 입자 하나, kT 단위). 곡선은 볼츠만 분포인 1/3에서 가장 낮은 −0.405이고, 다른 분포에서 곡선이 그 바닥보다 높은 만큼이 그 분포와 볼츠만 분포 사이의 KL이다(바닥에 몰린 분포 0.405, 고른 분포 0.059).

이 등식에서 세 가지를 읽을 수 있다. 첫째, KL은 0 이상이고 두 분포가 같을 때만 0이므로, 모든 분포 가운데 자유에너지가 가장 낮은 것은 볼츠만 분포 하나뿐이고 그 최솟값이 F다. 가능한 모든 분포를 후보로 놓고 어떤 양을 최소로 만드는 분포를 찾는 이런 원리를 변분 원리 (분포 전체를 후보로 두는 최적화 원리, variational principle)라 한다. 둘째, 볼츠만 분포에서 벗어난 분포는 KL 1 nat마다 kT만큼 자유에너지를 더 치른다. 셋째, 온도는 엔트로피 항 앞에 붙은 계수다. k = 1로 두고 에너지를 로짓의 마이너스 Eᵢ = −zᵢ, 온도를 τ로 쓴 뒤 양변에 마이너스를 붙이면 다음을 얻는다.

τln⁡∑iezi/τ=max⁡p(∑ipi zi+τ H(p))\textcolor{#8c564b}{\tau} \ln \sum_i e^{\textcolor{#ff7f0e}{z_i}/\textcolor{#8c564b}{\tau}} = \max_{\textcolor{#e377c2}{p}} \Big( \sum_i \textcolor{#e377c2}{p_i}\,\textcolor{#ff7f0e}{z_i} + \textcolor{#8c564b}{\tau}\, \textcolor{#9467bd}{H}(\textcolor{#e377c2}{p}) \Big)
τsoftmax의 온도 (엔트로피 항의 계수)zi로짓 (음의 에너지)p최대화하는 분포 (답은 온도 τ의 softmax)H엔트로피 (nat)\begin{array}{ll} \textcolor{#8c564b}{\tau} & \text{softmax의 온도 (엔트로피 항의 계수)} \\ \textcolor{#ff7f0e}{z_i} & \text{로짓 (음의 에너지)} \\ \textcolor{#e377c2}{p} & \text{최대화하는 분포 (답은 온도 τ의 softmax)} \\ \textcolor{#9467bd}{H} & \text{엔트로피 (nat)} \end{array}

왼쪽은 −F이고, 오른쪽의 최댓값은 온도 τ인 softmax에서 얻어진다. 로짓의 평균을 키우려는 힘과 엔트로피를 키우려는 힘이 겨룰 때, 엔트로피 쪽에 붙는 계수가 바로 온도다. 온도가 0으로 가면 엔트로피 항이 사라져 argmax만 남고, 온도가 크면 엔트로피 항이 이겨 분포가 고르게 퍼진다.

직접 움직여 보기엔트로피 항의 계수새 창에서 열기 ↗

ML에서: 강화학습의 엔트로피 보너스

같은 식은 강화학습에도 나온다. 정책 π가 행동의 가치 Q의 평균에 엔트로피 보너스 αH(π)를 더한 목표를 키우면, 위 식에서 로짓 자리에 Q가, τ 자리에 α가 선다. 그래서 Haarnoja 외(2018)의 SAC(soft actor-critic)는 이 α를 아예 온도(temperature)라 부른다.

문제 9. 질리지 않는 급식표

학교 급식에서 날마다 메뉴 A와 B 가운데 하나를 낸다. 학생들의 만족도는 A가 1점, B가 0점이다. 한 가지만 계속 나오면 질리므로, 영양사는 한 달 식단을 「평균 만족도 + 메뉴 비율의 엔트로피(nat) × 1」로 평가한다. A를 내는 날의 비율 p를 얼마로 잡아야 이 평가 점수가 가장 큰가? 그때 점수는 얼마인가?

김민준 M01
김민준

엔트로피는 반반일 때 가장 크니까 질리지 않으려면 반반이 제일 좋겠죠. 점수는 0.5 + ln 2 = 1.193이에요.

이서연 S01
이서연

A만 내면 1점이고 반반이면 1.193이니까 반반이 낫긴 해. 그런데 반반이 가장 좋은지는 모르겠어. 평균 만족도는 p를 키울수록 오르잖아.

선생님 T01
선생님

반반에서 A 쪽으로 조금 옮기면 두 항이 각각 어떻게 변하죠?

이서연 S11
이서연

평균 만족도는 p에 대한 기울기가 1이고, 엔트로피는 반반에서 기울기가 0이에요. 그러니 A 쪽으로 옮기면 점수가 올라가요. 두 기울기의 합 1 + ln((1 − p)/p)가 0이 되는 곳은 p/(1 − p) = e, 곧 p = e/(1 + e) = 0.731이에요.

김민준 M08
김민준

그때 점수는 0.731 + 엔트로피 0.582 = 1.313이고, ln(1 + e) = 1.313이랑 같아요. 만족도를 로짓으로 두고 온도 1짜리 softmax를 한 거네요. 시험 기간에 좋아하는 과목만 공부하면 질리니까 다른 과목도 섞되, 좋아하는 과목을 더 많이 하는 거랑 같네요.

문제 10. 엔트로피 항의 계수

로짓 z = (2, 0)에 대해 Σpᵢzᵢ + τH(p)를 가장 크게 하는 분포 p와 그 최댓값을 τ = 0.5, 1, 2에서 구하라. 가장 큰 로짓에 몰아준 분포 (1, 0)과 균등 분포 (0.5, 0.5)의 값과도 비교하라.

이서연 S11
이서연

제가 숙제로 가져간 거예요. 엔트로피 항에 계수를 붙이면 균형점이 옮겨 갈 거라고 했었죠. p₁ = t, p₂ = 1 − t로 두고 t로 미분하면 z₁ − z₂ + τ ln((1 − t)/t) = 0이니까 t/(1 − t) = e^((z₁ − z₂)/τ)예요. 온도가 τ인 softmax가 맞아요.

김민준 M11
김민준

그럼 최댓값은 바로 나오지. τ = 1일 때 최댓값이 ln Z였으니까 τ = 0.5면 ln(e^(2/0.5) + e⁰) = ln(e⁴ + 1) = 4.018이에요.

이서연 S06
이서연

잠깐, 그건 나올 수가 없는 숫자야. p가 뭐든 로짓 평균은 2를 못 넘고, 두 상태짜리 분포의 엔트로피는 ln 2 = 0.693을 못 넘어. τ = 0.5면 최댓값이 2 + 0.347 = 2.347 이하여야 하는데 4.018이 나왔잖아.

김민준 M05
김민준

어… 그럼 직접 넣어 볼게. softmax(z/0.5) = (0.982, 0.018)이고 로짓 평균이 1.964, 엔트로피가 0.0901이니까 1.964 + 0.5 × 0.0901 = 2.009. 4.018의 딱 절반이네?

선생님 T14
선생님

왜 절반인지 찾아봐요. 최대화하는 식 전체를 τ로 나누면 무엇이 되죠?

김민준 M07
김민준

Σpᵢ(zᵢ/τ) + H(p)요. 로짓이 z/τ인 원래 식이니까 최댓값이 ln Σe^(zᵢ/τ)이고… 아, τ로 나눈 식의 최댓값이니까 τ를 다시 곱해야 해요. τ ln Σe^(zᵢ/τ) = 0.5 × 4.018 = 2.009예요.

이서연 S08
이서연

단위로 봐도 그래. ln Σe^(z/τ)는 nat 단위고, τ를 곱해야 로짓 단위가 돼. 물리에서 ln Z에 kT를 곱해야 에너지가 되는 거랑 똑같아.

선생님 T13
선생님

그래요. 계수 τ를 붙인 식의 최댓값은 τ ln Σe^(z/τ), 곧 온도 τ인 계의 −F예요. τ = 2도 해 볼까요?

이서연 S03
이서연

softmax(z/2) = (0.731, 0.269)이고 1.462 + 2 × 0.582 = 2.627, 2 ln(e + 1)도 2.627이에요. 그런데 이번엔 균등 분포가 1 + 2 ln 2 = 2.386으로 argmax의 2를 이겨요. τ = 0.5에서는 argmax가 2, 균등이 1 + 0.5 ln 2 = 1.347이라 순서가 반대였는데요.

선생님 T14
선생님

온도가 엔트로피 1 nat을 로짓 몇 점으로 쳐 줄지 정하는 환율이라서, 환율이 오르면 고르게 퍼진 분포가 더 비싸게 쳐지는 거예요. 서연 학생의 숙제는 이걸로 풀렸어요.

김민준 M09
김민준

LLM 샘플링에서 temperature를 올리는 게 엔트로피 값을 올려 쳐 주는 거였네요. 저는 그냥 「랜덤하게 만드는 손잡이」인 줄 알았어요.

선생님 T01
선생님

로짓 자리에 강화학습의 행동 가치 Q를 넣고 엔트로피 앞의 계수를 α라 부르면, 가장 좋은 정책은 무엇이 되죠?

이서연 S01
이서연

같은 식이니까 e^(Q/α)에 비례하는 softmax예요. α가 온도 자리에 서니까 α를 키우면 여러 행동을 고르게 시도하는 정책이 되고, 0으로 보내면 가치가 가장 큰 행동 하나만 고르는 정책이 돼요.