English ver.

Interactive Information Theory

Date: |Estimated Reading Time: 35 min|Author: Seungheon Doh

참고: Claude E. Shannon, A Mathematical Theory of Communication (1948), Goodfellow, Bengio & Courville, Deep Learning — 3.13 Information Theory, Cover & Thomas, Elements of Information Theory, 그리고 John Schulman, Approximating KL Divergence. 확률의 기초는 앞선 Interactive Probability에서 다뤘습니다.

정보이론(information theory)은 가능한 여러 메시지 가운데 하나가 선택되어 송신자에서 수신자로 전달되는 과정을 수학적으로 다루는 이론입니다. Shannon은 1948년 A Mathematical Theory of Communication에서 통신의 근본 문제를 한 지점에서 선택된 메시지를 다른 지점에 정확하게 또는 허용 가능한 오차 안에서 재현하는 일로 보았습니다. 여기서 정보는 메시지의 의미나 중요도가 아니라, 수신 전에 남아 있던 가능성의 불확실성이 메시지를 관측한 뒤 얼마나 줄었는가를 나타냅니다. 이 관점은 메시지를 얼마나 짧게 압축할 수 있는지, 잡음이 있는 채널을 통해 얼마나 빠르고 신뢰성 있게 보낼 수 있는지에 정량적인 한계를 부여합니다.

앞선 확률 글은 하나의 결론에 도달했습니다 — 머신러닝의 손실함수는 거의 예외 없이 음의 로그가능도라는 것. 분류에서는 \(-\log p_c\), 회귀에서는 \((y-\hat{y})^2\), 로버스트 회귀에서는 \(|y-\hat{y}|\)가 각각 카테고리·가우시안·라플라스 분포에서 유도되었습니다.

그런데 분류 손실은 왜 하필 크로스엔트로피라는 이름으로 불릴까요? 엔트로피는 물리학 용어인데 왜 확률분포에 붙었고, 무엇을 "가로지른다(cross)"는 걸까요? 이 질문에 답하려면 확률을 다른 각도에서 봐야 합니다. 확률이 "무엇이 얼마나 자주 일어나는가"를 묻는다면, 정보이론은 "그 일이 일어났다는 소식이 얼마나 놀라운가"를 묻습니다.

이 관점 전환의 대가는 크지 않습니다. \(-\log p\)라는 하나의 양을 도입하면 됩니다. 그런데 그 대가로 얻는 것은 놀라울 만큼 많습니다. 분류 손실의 정체, VAE의 ELBO, 그리고 두 분포가 얼마나 다른지를 재는 KL divergence가 전부 이 한 양의 기대값으로 설명됩니다. 심지어 왜 로그가능도를 쓰는가에 대한 두 번째 답 — 그것이 부호화 길이이기 때문 — 도 여기서 나옵니다.

이 글은 자기정보에서 시작해 엔트로피와 부호화, 크로스엔트로피와 KL divergence, 두 개념이 분류 손실에서 만나는 방식, KL의 비대칭성과 상호정보량을 거쳐 실제 손실함수들로 돌아옵니다. Shannon이 통신 문제를 풀며 만든 도구가 어떻게 딥러닝의 목적함수가 되었는지를, 각 단계마다 직접 조작해보며 따라갈 수 있습니다.

자기정보 Self-Information

정보이론 전체가 하나의 양 위에 세워진다. 어떤 사건이 일어났을 때 그것이 얼마나 놀라운지를 재는 값, 그리고 그 값이 왜 하필 확률의 음의 로그여야 하는지가 출발점이다.

정의. 확률 \(p\)로 일어나는 사건의 자기정보(self-information)는 \(I(x) = -\log p(x)\)다. 로그의 밑을 2로 잡으면 단위는 비트(bit), 자연로그를 쓰면 내트(nat)다. 머신러닝에서는 미분이 깔끔한 자연로그를 쓰는 것이 관례이므로, 이 글의 손실함수는 모두 nat 단위다.

직관: 놀라움의 크기. "내일 해가 뜬다"는 소식은 아무것도 알려주지 않는다 — 확률이 1이고 자기정보는 0이다. "내일 눈이 온다"는 소식은 조금 놀랍고, "내일 이 도시에 운석이 떨어진다"는 소식은 대단히 놀랍다. 드문 사건일수록 그것이 일어났다는 사실이 더 많은 것을 알려준다. 자기정보는 이 알려주는 양을 수치화한다.

왜 하필 로그인가. 임의로 고른 함수가 아니다. 우리가 "정보량"에 요구하는 성질은 세 가지다. ① 확률이 1이면 정보량이 0이다. ② 확률이 낮을수록 정보량이 크다(단조감소). ③ 독립인 두 사건이 함께 일어나면 정보량이 더해진다 — 동전을 두 번 던져 얻는 정보는 한 번 던져 얻는 정보의 두 배여야 한다. 독립이면 확률은 곱해지므로(\(p(x,y)=p(x)p(y)\)), 곱을 합으로 바꾸는 함수가 필요하다. 연속성과 같은 자연스러운 조건까지 요구하면 가능한 함수는 로그의 양의 상수배 형태로 결정되며, 로그의 밑이 그 상수와 정보량의 단위를 정한다.

확률 글과의 연결. 앞 글에서 로그가능도를 도입한 이유는 실용적이었다 — 언더플로를 피하고 미분을 분해하기 위해서였다. 지금 우리는 같은 \(-\log p\)에 의미를 부여하고 있다. 그것은 단지 계산상의 편의가 아니라 놀라움의 양이며, 다음 절에서 보듯 부호화에 필요한 비트 수이기도 하다. 손실을 최소화한다는 것은 모델이 데이터를 보고 덜 놀라도록 만드는 일이다.

발산. \(p\to 0\)이면 \(I\to\infty\)다. 모델이 실제로 일어난 사건에 확률 0을 배정하면 손실이 무한대가 된다. 수학적인 실수 연산에서 소프트맥스 확률은 정확히 0이 아니지만, 실제 부동소수점 계산에서는 아주 작은 값이 0으로 언더플로될 수 있다. 그래서 구현에서는 확률을 먼저 계산한 뒤 로그를 취하기보다 logits에서 log-sum-exp를 사용하는 log_softmax처럼 수치적으로 안정한 연산을 쓴다.

\[\begin{aligned} I(x) &= -\log p(x) \\ I(x,y) &= I(x) + I(y) \quad \text{(독립일 때)} \\ 1\ \text{nat} &= \log_2 e \approx 1.443\ \text{bit} \end{aligned}\]

p 슬라이더를 1에서 0 쪽으로 줄여보세요. 곡선이 p=1에서 0으로 출발해 p→0에서 급격히 치솟습니다. 단위 토글로 bit와 nat을 비교하면 로그 밑만 바뀔 뿐 모양은 같다는 것을 확인할 수 있습니다.

엔트로피 Entropy

자기정보는 하나의 사건에 대한 양이다. 그것을 분포 전체에 대해 평균 내면 그 분포가 담고 있는 불확실성의 총량, 곧 엔트로피가 된다.

정의. 분포 \(p\)의 엔트로피는 자기정보의 기대값이다: \(H(p) = \mathbb{E}_{x\sim p}[-\log p(x)] = -\sum_x p(x)\log p(x)\). "이 분포에서 표본을 하나 뽑았을 때 평균적으로 얼마나 놀라게 되는가"를 재는 값이며, 곧 그 분포의 불확실성이다.

언제 최대이고 언제 최소인가. 어떤 결과 하나가 확률 1을 가지면(완전한 확신) \(H=0\)이다 — 뽑아봐야 놀랄 일이 없다. 반대로 \(K\)개의 결과가 모두 같은 확률 \(1/K\)를 가지면 엔트로피가 최대 \(\log K\)에 도달한다. 균등분포는 가장 예측하기 어려운 분포다. 오른쪽에서 막대를 드래그하며 이 두 극단 사이를 오갈 수 있다.

이진 엔트로피. \(K=2\)일 때 \(H(p)=-p\log p-(1-p)\log(1-p)\)는 \(p=0.5\)에서 최댓값 \(\log 2\)를 갖고 양 끝에서 0으로 떨어지는 대칭적인 종 모양이다. 이 곡선의 모양 하나가 "불확실성"이라는 개념 전체를 요약한다 — 아래 그림에 함께 그려두었다.

확률 글과의 연결: 왜 가우시안인가. 앞 글에서 가우시안을 고르는 두 번째 이유로 "최대 엔트로피"를 들었다. 이제 그 말을 정확히 할 수 있다 — 평균과 분산이 주어졌다는 제약 아래에서 엔트로피를 최대화하는 연속분포가 정확히 가우시안이다. 마찬가지로 아무 제약이 없을 때는 균등분포가, 평균만 주어진 양수 확률변수에서는 지수분포가 답이다. 최대 엔트로피 원리는 "아는 것만 반영하고 모르는 것은 지어내지 말라"를 수식으로 옮긴 것이다.

머신러닝에서. 엔트로피는 그 자체로 목적함수에 등장한다. 강화학습의 엔트로피 정규화(SAC, PPO)는 정책의 엔트로피를 보상에 더해 조기 수렴과 탐험 부족을 막고, 결정트리는 분할 기준으로 엔트로피 감소량(정보 이득)을 쓴다. 반대로 엔트로피를 낮추는 쪽으로 미는 기법도 있다 — 준지도학습의 entropy minimization은 모델이 확신 있는 예측을 하도록 유도한다.

\[\begin{aligned} H(p) &= -\sum_x p(x)\log p(x) = \mathbb{E}_{p}[-\log p(x)] \\ 0 \le H(p) &\le \log K \\ H(p) &= \log K \iff p \text{ 가 균등분포} \end{aligned}\]

막대를 위아래로 드래그해 분포를 바꿔보세요. 한 막대에 확률을 몰면 H가 0으로, 다섯 막대를 고르게 펴면 H가 최댓값 log 5 ≈ 1.609로 갑니다. "균등하게" 버튼으로 최댓값을 바로 확인할 수 있고, 아래 이진 엔트로피 곡선에서 현재 상태의 위치도 표시됩니다.

이진 엔트로피 H(p) — p=0.5에서 최대, 양 끝에서 0

부호화 길이 Coding Length

엔트로피가 "불확실성"이라는 추상적인 말에 그치지 않는 이유는 그것이 물리적인 양이기 때문이다. 메시지를 저장하는 데 필요한 비트 수의 하한이 정확히 엔트로피다.

정의 (섀넌의 소스 코딩 정리). 분포 \(p\)에서 뽑히는 심볼들을 무손실로 부호화할 때, 심볼당 평균 부호 길이는 \(H(p)\) 비트보다 짧을 수 없다. 그리고 이 하한은 임의로 가깝게 달성할 수 있다. 최적 부호는 확률 \(p(x)\)인 심볼에 \(-\log_2 p(x)\)비트를 배정한다.

왜 그런 길이인가. 짧은 부호는 개수가 적다 — 길이 \(\ell\)비트의 부호는 \(2^\ell\)개뿐이다. 그러니 짧은 부호는 아껴서 자주 나오는 심볼에 줘야 한다. 심볼에 길이 \(\ell(x)\)를 배정하면 그것은 사실상 확률 \(2^{-\ell(x)}\)를 가정하는 것과 같다. \(-\log_2p(x)\)는 대개 정수가 아니므로 단일 심볼의 실제 이진 코드 길이와 정확히 같지는 않고, 이상적인 정보 길이로 이해해야 한다. 여러 심볼을 묶는 블록 코딩이나 산술 부호화를 쓰면 심볼당 평균 길이를 이 값에 임의로 가깝게 만들 수 있다.

이것이 정보이론과 머신러닝을 잇는 다리다. 모델 \(q\)가 데이터에 확률을 배정하는 것은 곧 부호 길이를 배정하는 것이다. 그러므로 음의 로그가능도를 최소화하는 것은 데이터를 가장 짧게 압축하는 부호를 찾는 것과 정확히 같은 문제다. "좋은 모델"과 "좋은 압축기"는 같은 말이다 — 언어 모델의 성능을 압축률로 보고하는 관행이 여기서 나온다.

왜 정수가 아니어도 되는가. \(-\log_2 p\)는 대개 정수가 아니지만, 심볼 하나씩이 아니라 여러 개를 묶어 부호화하면(블록 코딩) 심볼당 평균 길이를 엔트로피에 임의로 가깝게 만들 수 있다. 산술 부호화가 실제로 이 일을 한다. 그래서 엔트로피는 도달 가능한 하한이지 느슨한 하한이 아니다.

\[\begin{aligned} \ell^*(x) &= -\log_2 p(x) \quad \text{(이상적인 정보 길이)} \\ \mathbb{E}_p[\ell^*(x)] &= -\sum_x p(x)\log_2 p(x) = H(p) \\ \textstyle\sum_x 2^{-\ell(x)} &\le 1 \quad \text{(크라프트 부등식)} \end{aligned}\]

막대를 드래그해 심볼의 확률을 바꿔보세요. 각 심볼 옆에 이상적인 정보 길이 −log₂p가 비트로 표시되고, 아래에 그 평균이 계산됩니다. 이 이상적 평균은 엔트로피와 정확히 일치하며, 실제 부호는 블록 코딩으로 그 값에 가까워질 수 있습니다. 다음 절에서는 이 부호를 틀린 분포로 만들면 어떻게 되는지 봅니다.

크로스엔트로피 Cross-Entropy

데이터는 분포 p를 따르는데 우리가 가진 모델은 q다. 잘못된 분포로 만든 부호를 써서 실제 데이터를 인코딩하면 평균 몇 비트가 드는가 — 이 질문의 답이 분류 손실의 정체다.

정의. \(p\)에 대한 \(q\)의 크로스엔트로피는 \(H(p,q) = -\sum_x p(x)\log q(x) = \mathbb{E}_{x\sim p}[-\log q(x)]\)다. 앞의 엔트로피와 딱 한 곳이 다르다 — 기대값은 \(p\)로 취하고, 로그 안에는 \(q\)가 들어간다. 이 어긋남이 "cross"라는 이름의 유래다.

부호화로 읽으면. \(-\log_2 q(x)\)는 \(q\)가 옳다고 믿고 만든 부호의 길이다. 그런데 심볼은 실제로 \(p\)에서 나온다. 그 부호로 실제 데이터를 인코딩할 때 드는 평균 비트 수가 크로스엔트로피다. 틀린 믿음으로 만든 코드북을 쓰는 대가인 셈이다.

언제 최소인가. \(H(p,q)\ge H(p)\)이며, 등호는 \(q=p\)일 때만 성립한다. 즉 내 모델이 진짜 분포와 정확히 일치할 때 크로스엔트로피가 최소가 되고, 그 최솟값이 엔트로피다. 오른쪽에서 \(q\)를 \(p\)에 맞춰가면 값이 \(H(p)\)로 내려가되 결코 그 아래로 내려가지 않는 것을 확인할 수 있다. 데이터 자체의 불확실성은 어떤 모델로도 없앨 수 없다 — 이것이 손실이 0이 되지 않는 근본적인 이유다.

NLL과 같은 것이다. 학습에서 \(p\)는 실제로 데이터셋의 경험분포이고, 그것은 관측된 예제에 균등한 질량을 얹은 분포다. 그러면 \(H(p,q)=-\frac{1}{N}\sum_i \log q(x^{(i)})\)가 되는데, 이것은 앞 글에서 유도한 평균 NLL과 글자 그대로 같은 식이다. 분류 손실을 크로스엔트로피라 부르는 것과 음의 로그가능도라 부르는 것은 같은 대상을 두 언어로 부르는 일이다.

KL과 무엇이 다른가. 크로스엔트로피 \(H(p,q)\)는 실제 데이터를 모델 \(q\)의 코드로 표현할 때 필요한 전체 비용이고, KL \(D_{\mathrm{KL}}(p\|q)\)은 그중 진짜 분포 자체의 불가피한 불확실성 \(H(p)\)을 뺀 추가 비용이다. 따라서 \(H(p,q)=H(p)+D_{\mathrm{KL}}(p\|q)\)다. 학습 중 데이터 분포 \(p\)가 고정되어 있으면 \(H(p)\)도 상수이므로 cross-entropy를 최소화하는 것과 KL을 최소화하는 것은 같은 \(q\)를 찾는다. 그러나 값 자체는 일반적으로 같지 않으며, 원-핫 정답처럼 \(H(p)=0\)인 특별한 경우에만 같아진다.

\[\begin{aligned} H(p,q) &= -\sum_x p(x)\log q(x) \\ H(p,q) &\ge H(p), \qquad \text{등호} \iff q = p \\ H(\hat{p}_{\text{data}}, q) &= -\frac{1}{N}\sum_{i=1}^{N}\log q(x^{(i)}) = \text{평균 NLL} \end{aligned}\]

q 막대를 드래그해 회색 참분포 p에 맞춰보세요. 정확히 일치시키는 순간 H(p,q)가 H(p)와 같아지고, 그것이 도달 가능한 최솟값입니다. 어긋나게 만들면 값이 올라가지만 결코 H(p) 아래로는 내려가지 않습니다.

KL divergence Kullback–Leibler Divergence

크로스엔트로피에서 어쩔 수 없는 부분(엔트로피)을 빼면 순수하게 모델이 틀린 만큼만 남는다. 그것이 두 분포 사이의 거리 아닌 거리, KL divergence다.

정의. \(D_{\mathrm{KL}}(p\,\|\,q) = \sum_x p(x)\log\frac{p(x)}{q(x)} = H(p,q) - H(p)\). 크로스엔트로피에서 엔트로피를 뺀 초과분이며, "\(q\)로 만든 부호를 쓰는 바람에 심볼당 추가로 지불한 비트 수"로 읽으면 정확하다.

항상 0 이상이다. \(D_{\mathrm{KL}}(p\|q)\ge 0\)이고 등호는 \(p=q\)일 때만 성립한다(깁스 부등식). 직관적으로 최적 코드인 \(p\) 대신 다른 코드 \(q\)를 사용해서 평균 길이가 더 짧아질 수는 없다는 뜻이다. 수학적으로는 로그의 오목성과 젠센 부등식으로 증명한다. 이 비음수성이 뒤에 나올 ELBO와 여러 정보이론 부등식의 뼈대다.

거리가 아니다. 두 가지 이유로 KL은 수학적 의미의 거리(metric)가 아니다. 첫째, 대칭이 아니다: \(D_{\mathrm{KL}}(p\|q)\ne D_{\mathrm{KL}}(q\|p)\). 둘째, 삼각부등식을 만족하지 않는다. 그래서 "거리"가 아니라 divergence라 부른다. 비대칭성은 결함이 아니라 의미 있는 성질이며, 다음 절 전체가 그 이야기다.

학습이 실제로 최소화하는 것. \(H(p) = H(\hat{p}_{\text{data}})\)는 데이터가 정해지면 상수라 파라미터에 무관하다. 따라서 크로스엔트로피를 최소화하는 것과 \(D_{\mathrm{KL}}(\hat{p}_{\text{data}}\|q_\theta)\)를 최소화하는 것은 완전히 같은 최적화 문제다. 손실을 줄인다는 것은 모델 분포를 데이터 분포 쪽으로 끌어당기는 일이며, 손실의 절댓값이 0에 닿지 않는 것은 상수항 \(H(p)\) 때문이다.

지지집합 문제. \(p(x)>0\)인데 \(q(x)=0\)이면 KL이 무한대다. 모델이 실제로 일어나는 사건에 확률 0을 준다는 것은 무한한 벌점을 받는 일이다. 이론적인 소프트맥스가 유한한 logits에서 양의 확률을 주는 이유와, 실제 구현에서 log-softmax 같은 안정화가 필요한 이유도 이 극단적인 벌점과 연결된다.

\[\begin{aligned} D_{\mathrm{KL}}(p\,\|\,q) &= \sum_x p(x)\log\frac{p(x)}{q(x)} = H(p,q) - H(p) \\ D_{\mathrm{KL}}(p\,\|\,q) &\ge 0, \qquad \text{등호} \iff p = q \\ \arg\min_\theta H(p, q_\theta) &= \arg\min_\theta D_{\mathrm{KL}}(p\,\|\,q_\theta) \end{aligned}\]

q를 움직이며 세 값 H(p), H(p,q), KL을 함께 보세요. 언제나 H(p,q) = H(p) + KL이고 KL ≥ 0입니다. "방향 바꾸기"를 누르면 p와 q의 역할이 뒤바뀌는데, 같은 두 분포인데도 값이 달라지는 것 — 그것이 비대칭성입니다.

Cross Entropy vs KL Divergence What the Classification Loss Really Is

지금까지의 도구를 모아 가장 익숙한 분류 손실로 돌아온다. 원-핫 정답과 소프트맥스 출력 사이에서 cross-entropy와 KL divergence가 언제 같고 언제 다른지, 그리고 label smoothing이 이 관계를 어떻게 바꾸는지 살펴본다.

정의. 정답이 클래스 \(c\)일 때 원-핫 분포 \(p=\mathbf{e}_c\)와 모델 출력 \(q=\mathrm{softmax}(\boldsymbol{z})\) 사이의 크로스엔트로피는 \(H(p,q)=-\sum_k p_k\log q_k=-\log q_c\)로, 한 항만 남는다. 이것이 우리가 매일 쓰는 분류 손실이다.

KL과 같아지는 이유. 일반적으로 \(H(p,q)=H(p)+D_{\mathrm{KL}}(p\|q)\)이므로 둘은 같은 값이 아니다. 하지만 원-핫 정답은 불확실성이 없어 \(H(p)=0\)이다. 따라서 이 특별한 경우에는 \(D_{\mathrm{KL}}(p\|q)=H(p,q)\)로 크로스엔트로피와 KL이 정확히 일치한다.

최적화할 때는 왜 같은가. 원-핫이 아니더라도 학습 중 정답 분포 \(p\)가 고정되어 있다면 \(H(p)\)는 모델 파라미터와 무관한 상수다. 따라서 cross-entropy와 KL의 숫자는 \(H(p)\)만큼 다르지만, 둘을 최소화해 얻는 최적의 \(q\)와 gradient는 같다. Cross-entropy는 전체 예측 비용이고 KL은 모델이 틀려서 추가된 비용이라는 해석상의 차이는 남는다.

원-핫 손실의 압력. 손실 \(-\log q_c\)를 0으로 만들려면 \(q_c=1\)이어야 하고, 소프트맥스에서는 정답 logit과 나머지 logit의 차이가 무한히 커져야 한다. 그래서 모델은 정답 logit을 계속 키우는 압력을 받아 실제 정확도보다 지나치게 확신하는 과잉 확신에 빠질 수 있다.

Label smoothing이 하는 일. 정답 분포를 \(p=(1-\varepsilon)\mathbf{e}_c+\frac{\varepsilon}{K}\mathbf{1}\)로 살짝 뭉개면 \(H(p)>0\)이 된다. 이제 cross-entropy와 KL은 더 이상 같은 숫자가 아니며 둘의 차이는 \(H(p)\)다. 최적해도 \(q_c=1\)이 아니라 유한한 값으로 옮겨져, 모델에게 “완전히 확신하지 말라”고 목표 자체를 바꿔준다.

\[\begin{aligned} H(p,q) &= H(p)+D_{\mathrm{KL}}(p\|q) \\ p=\mathbf e_c &\Rightarrow H(p)=0,\quad H(p,q)=D_{\mathrm{KL}}(p\|q)=-\log q_c \\ p^{\text{smooth}} &= (1-\varepsilon)\mathbf e_c+\tfrac{\varepsilon}{K}\mathbf 1 \end{aligned}\]

정답 logit을 키우며 원-핫 정답에서 손실이 0을 향하는 모습을 확인해보세요. ε을 올리면 타깃 엔트로피가 양수가 되어 손실 곡선의 바닥이 들리고, 최소점이 유한한 logit으로 이동합니다.

Approximating KL Divergence Monte Carlo Estimators

언어모델을 학습할 때는 새 policy가 보상을 높이면서도 원래의 reference model과 지나치게 다른 언어를 만들지 않도록 KL을 사용한다. 문제는 두 모델이 만들 수 있는 문장이 사실상 무한히 많아 모든 문장의 확률을 하나씩 더해 정확한 KL을 계산할 수 없다는 것이다. 대신 policy에서 실제 응답 몇 개를 생성하고, 그 응답이 policy와 reference에서 각각 얼마나 그럴듯한지 비교해 전체 분포의 차이를 추정한다. 즉 비교하고 싶은 대상은 분포 전체지만 실제로 관찰할 수 있는 것은 유한한 표본뿐이기 때문에 KL 추정량이 필요하다. 이 절에서는 같은 KL을 재는 세 추정량이 정확성·안정성·비음수성에서 어떻게 다른지 비교한다.

설정. 구하려는 값이 \(D_{\mathrm{KL}}(q\|p)=\mathbb E_{x\sim q}[\log(q(x)/p(x))]\)라고 하자. \(x\sim q\)인 표본을 뽑을 수 있고 각 표본에서 확률비 \(r(x)=p(x)/q(x)\)를 계산할 수 있다면, 기대값을 표본평균으로 바꿔 KL을 근사할 수 있다. 아래 식의 방향은 \(q\|p\)로 고정되어 있으므로 \(p\|q\)를 구할 때는 표본을 뽑는 분포와 비율도 함께 뒤집어야 한다.

추정량이란. 알고 싶은 참값 \(D\)는 하나로 고정되어 있지만, 유한한 표본 \(x_1,\ldots,x_N\)으로 계산한 값 \(\widehat D=T(x_1,\ldots,x_N)\)은 표본을 다시 뽑을 때마다 달라진다. 이렇게 표본을 입력받아 모르는 참값을 추측하는 계산 규칙을 추정량(estimator)이라 한다. 오른쪽의 “다시 뽑기”를 누를 때 점이 움직이는 이유가 \(D\)가 변해서가 아니라 \(\widehat D\)가 표본에 따라 변하기 때문이다.

편향과 불편추정량. 같은 크기의 표본을 무한히 여러 번 새로 뽑아 추정값들을 평균 냈다고 생각하자. 그 평균이 참값과 얼마나 다른지가 편향 \(\mathrm{Bias}(\widehat D)=\mathbb E[\widehat D]-D\)이다. 편향이 0이면 불편추정량(unbiased estimator)이라 부른다. 불편은 “한 번 계산하면 정확하다”는 뜻이 아니라, 반복했을 때 참값의 위아래 오차가 평균적으로 상쇄된다는 뜻이다. 따라서 불편추정량도 작은 표본에서는 크게 흔들리거나 음수가 될 수 있다.

편향이 있으면 나쁜가. 반드시 그렇지는 않다. 추정량의 오차는 보통 \(\mathrm{MSE}=\mathbb E[(\widehat D-D)^2]=\mathrm{Bias}^2+\mathrm{Variance}\)로 평가한다. 약간의 편향을 허용해 분산을 크게 줄이면 전체 오차는 오히려 작아질 수 있다. \(k_2\)가 정확한 불편추정량은 아니지만 두 분포가 가까울 때 안정적인 진단값으로 쓰일 수 있는 이유다.

추정량을 설계하는 대표 방법. 첫째, 기대값의 정의를 그대로 표본평균으로 바꾸는 몬테카를로 추정이 가장 직접적이며 \(k_1\)이 여기에 해당한다. 둘째, 계산하기 어려운 함수를 관심 지점 주변에서 Taylor 전개해 단순한 식으로 바꾸는 국소 근사가 있고 \(k_2\)가 그 예다. 셋째, 기대값이 0인 항을 더하거나 빼 평균은 보존하면서 흔들림을 줄이는 control variate가 있으며 \(k_3\)의 \(r-1\)이 그 역할을 한다. 넷째, 볼록함수와 접선의 관계를 이용하면 참 divergence처럼 표본별 값도 0 이상이 되도록 만들 수 있다. 실제 설계에서는 불편성 하나만 고집하지 않고 편향, 분산, 계산비용, 수치 안정성, 지지집합을 함께 비교한다.

\[\begin{aligned} \widehat D &= T(x_1,\ldots,x_N) \\ \mathrm{Bias}(\widehat D) &= \mathbb E[\widehat D]-D \\ \mathbb E[\widehat D]=D &\quad\Longleftrightarrow\quad \widehat D\text{ is unbiased} \\ \mathrm{MSE}(\widehat D) &= \mathrm{Bias}(\widehat D)^2+\mathrm{Var}(\widehat D) \end{aligned}\]

첫 번째 추정량 \(k_1=-\log r\). 정의를 그대로 한 표본씩 계산한다. \(\mathbb E_q[k_1]=D_{\mathrm{KL}}(q\|p)\)이므로 불편추정량이지만, 개별 표본에서는 \(r>1\)일 때 음수가 될 수 있다. KL의 참값은 0 이상이어도 작은 배치의 추정값은 음수가 될 수 있고, \(p\)와 \(q\)의 꼬리가 다르면 로그비가 크게 흔들려 분산도 커질 수 있다.

두 번째 추정량 \(k_2=\tfrac12(\log r)^2\). 항상 0 이상이고 두 분포가 가까울 때 더 안정적이다. \(p\approx q\)이면 KL은 log-ratio의 제곱에 대한 이차 근사로 읽을 수 있기 때문이다. 하지만 이것은 일반적으로 편향된 근사이며, 두 분포가 멀어지면 실제 KL과 차이가 커질 수 있다. 안정적인 숫자와 정확한 기대값 사이의 교환이다.

세 번째 추정량 \(k_3=(r-1)-\log r\). \(\log r\le r-1\)이므로 모든 표본에서 \(k_3\ge0\)이다. 동시에 \(\mathbb E_q[r-1]=\int q(x)(p(x)/q(x)-1)\,dx=0\)이므로 \(k_1\)에 평균이 0인 항을 더했을 뿐이다. 따라서 \(k_3\)도 \(D_{\mathrm{KL}}(q\|p)\)의 불편추정량이면서 표본별로 음수가 되지 않는다. 이 \(r-1\) 항은 기대값은 바꾸지 않고 분산을 줄이는 control variate로 작동한다.

왜 \(k_3\)가 자연스러운가. 함수 \(-\log r\)의 \(r=1\)에서의 접선 \(-(r-1)\)을 빼면 \((r-1)-\log r\)가 남는다. 볼록함수는 접선보다 위에 있으므로 결과는 항상 0 이상이고, \(p=q\), 즉 \(r=1\)에서 정확히 0이다. 더 일반적인 \(f\)-divergence에서도 함수에서 \(r=1\)의 접선을 빼는 같은 아이디어로 비음수 표본 추정량을 만들 수 있다.

실제로 사용할 때. \(N\)개 표본에 대해 \(\widehat D=\frac1N\sum_i k(x_i)\)로 평균 낸다. \(k_1\)은 정의와 가장 직접적이고, \(k_2\)는 두 분포가 매우 가깝다는 전제에서 간단한 진단값으로 유용하며, \(k_3\)는 불편성과 표본별 비음수성을 함께 원할 때 좋은 선택이다. 다만 어느 식도 확률비를 안정적으로 계산하지 못하거나 \(q(x)>0\)인 곳에서 \(p(x)=0\)인 지지집합 문제까지 해결해주지는 않는다.

\[\begin{aligned} r(x)&=\frac{p(x)}{q(x)},\qquad x\sim q \\ k_1&=-\log r &&\text{(unbiased, high variance)} \\ k_2&=\tfrac12(\log r)^2 &&\text{(biased, local approximation)} \\ k_3&=(r-1)-\log r &&\text{(unbiased, nonnegative)} \\ \widehat D_{\mathrm{KL}}(q\|p)&=\frac1N\sum_{i=1}^N k(x_i) \end{aligned}\]

핵심은 “KL이 0 이상”과 “한 표본의 추정값이 0 이상”은 다른 요구라는 점입니다. \(k_1\)은 평균적으로 정확하지만 개별 값은 음수일 수 있고, \(k_3\)는 평균을 바꾸지 않는 항을 더해 두 성질을 함께 얻습니다.

같은 q 표본으로 계산한 세 추정량 — 점은 현재 표본평균, 가로선은 참 KL

Forward vs Reverse KL Mode-Covering vs Mode-Seeking

같은 두 분포에 대해 KL을 어느 방향으로 재느냐에 따라 최적해가 전혀 달라진다. 표현력이 부족한 모델로 복잡한 분포를 근사할 때, 이 선택이 결과의 성격을 결정한다.

두 방향. 참분포 \(p\)를 모델 \(q\)로 근사할 때, \(D_{\mathrm{KL}}(p\|q)\)를 최소화하는 것을 forward KL(moment matching), \(D_{\mathrm{KL}}(q\|p)\)를 최소화하는 것을 reverse KL(information projection)이라 한다.

Forward KL은 덮는다. \(D_{\mathrm{KL}}(p\|q)=\sum p\log(p/q)\)에서 기대값은 \(p\)로 취해진다. 그래서 \(p(x)\)가 큰 곳에서 \(q(x)\)가 작으면 큰 벌점을 받고, \(p(x)=0\)인 곳에서 \(q\)가 무엇을 하든 가중치가 0이라 벌점이 없다. 결과적으로 \(q\)는 \(p\)의 질량이 있는 모든 곳을 덮으려 하며, 봉우리 사이의 빈 골짜기까지 뒤덮는 넓고 뭉툭한 해가 나온다. 이를 mode-covering이라 한다.

Reverse KL은 고른다. \(D_{\mathrm{KL}}(q\|p)\)에서는 기대값이 \(q\)로 취해진다. 그래서 \(q(x)\)가 큰 곳에서 \(p(x)\)가 작으면 큰 벌점을 받는다. \(q\)는 \(p\)가 작은 영역을 피하는 것이 최선이므로, 봉우리 하나에 몸을 웅크리고 나머지를 포기한다. 이를 mode-seeking 또는 zero-forcing이라 한다.

어느 쪽이 옳은가. 목적에 따라 다르다. "빠뜨리면 안 된다"가 중요하면 forward, "생성한 표본이 그럴듯해야 한다"가 중요하면 reverse가 낫다. 최대가능도 학습은 본질적으로 forward KL이라, 표현력이 부족한 생성 모델이 흐릿한 평균적 표본을 내놓는 경향(예: VAE의 흐릿한 이미지)은 여기서 일부 설명된다.

머신러닝에서. 변분추론과 VAE의 ELBO에 등장하는 것은 reverse KL \(D_{\mathrm{KL}}(q_\phi(z\mid x)\,\|\,p(z))\)이다 — 계산 가능한 쪽이 그쪽이기 때문이다(기대값을 \(q\)로 취하므로 \(q\)에서 표본을 뽑아 추정할 수 있다). 반면 지식 증류에서 학생이 교사를 따라갈 때 쓰는 것은 대개 forward KL이다. Expectation Propagation은 forward를, 평균장 근사는 reverse를 쓴다.

\[\begin{aligned} \text{forward: } &\min_q D_{\mathrm{KL}}(p\,\|\,q) \;\Rightarrow\; \text{mode-covering} \\ \text{reverse: } &\min_q D_{\mathrm{KL}}(q\,\|\,p) \;\Rightarrow\; \text{mode-seeking} \\ p>0, q\approx 0 &\Rightarrow \text{forward 폭발} \\ q>0, p\approx 0 &\Rightarrow \text{reverse 폭발} \end{aligned}\]

회색 참분포는 봉우리가 둘인 분포이고, 주황색 q는 봉우리가 하나뿐인 가우시안입니다. "최적해 찾기"를 누르면 선택한 방향에 대해 q가 최적 위치와 폭으로 이동합니다 — forward는 두 봉우리를 다 덮으려 넓게 퍼지고, reverse는 한쪽 봉우리에 좁게 달라붙습니다. 같은 p, 같은 모델족인데 답이 다릅니다.

JS divergence Jensen–Shannon Divergence

KL의 비대칭성과 무한대 발산이 곤란할 때, 두 분포의 중간 지점을 경유해 대칭화한 척도를 쓴다. GAN의 원래 목적함수가 바로 이것이었다.

정의. 두 분포의 평균 \(m=\frac{1}{2}(p+q)\)를 경유해 대칭화한다: \(D_{\mathrm{JS}}(p,q)=\frac{1}{2}D_{\mathrm{KL}}(p\|m)+\frac{1}{2}D_{\mathrm{KL}}(q\|m)\). 정의상 \(D_{\mathrm{JS}}(p,q)=D_{\mathrm{JS}}(q,p)\)이고, 값은 \([0,\log 2]\)에 갇힌다.

왜 발산하지 않는가. \(p(x)>0\)이면 \(m(x)\ge p(x)/2>0\)이므로, KL을 무한대로 만들던 "분모가 0" 상황이 원천적으로 발생하지 않는다. 지지집합이 전혀 겹치지 않는 극단적인 경우에도 값은 \(\log 2\)에서 멈춘다. 유계이고 대칭이라는 두 성질 덕분에 최적화 대상으로 다루기 편하다.

머신러닝에서: GAN. 원래의 GAN 목적함수에서 판별자가 최적일 때, 생성자가 최소화하는 것이 정확히 \(2D_{\mathrm{JS}}(p_{\text{data}}, p_g)-\log 4\)임을 보일 수 있다. 그런데 유계라는 성질에는 대가가 있다 — 두 분포가 거의 겹치지 않으면 JS가 \(\log 2\)에서 포화되어 gradient가 사라진다. 고차원에서 데이터 다양체와 생성 다양체가 잘 겹치지 않는다는 점이 GAN 학습을 불안정하게 만들었고, Wasserstein 거리로 갈아탄 WGAN이 그 대응이었다.

참고: 제곱근은 거리다. \(\sqrt{D_{\mathrm{JS}}}\)는 삼각부등식까지 만족하는 진짜 metric(Jensen-Shannon distance)이다. 분포들 사이의 거리 행렬을 만들거나 클러스터링할 때 쓸 수 있다는 뜻이다.

\[\begin{aligned} m &= \tfrac{1}{2}(p+q) \\ D_{\mathrm{JS}}(p,q) &= \tfrac{1}{2}D_{\mathrm{KL}}(p\|m) + \tfrac{1}{2}D_{\mathrm{KL}}(q\|m) \\ 0 \le D_{\mathrm{JS}} &\le \log 2 \quad (\text{nat}) \end{aligned}\]

q를 p에서 멀리 떨어뜨려보세요. KL은 급격히 커지다 발산하지만 JS는 log 2 ≈ 0.693에서 멈춥니다. 바로 그 포화가 GAN에서 gradient를 사라지게 만든 원인입니다 — 아무리 더 멀어져도 값이 변하지 않으니 어느 쪽으로 가야 할지 알 수 없습니다.

거리에 따른 KL과 JS의 변화 — JS는 log 2에서 포화된다

상호정보량 Mutual Information

한 변수를 알게 되면 다른 변수에 대한 불확실성이 얼마나 줄어드는가. 이 감소량이 두 변수가 공유하는 정보의 양이며, 상관계수와 달리 비선형 관계까지 잡아낸다.

정의. \(I(X;Y) = D_{\mathrm{KL}}\big(p(x,y)\,\|\,p(x)p(y)\big) = \sum_{x,y} p(x,y)\log\frac{p(x,y)}{p(x)p(y)}\). 즉 결합분포가 독립인 경우로부터 얼마나 떨어져 있는가를 KL로 잰 값이다. 앞 글의 "잔차 \(P(x,y)-P(x)P(y)\)" 데모를 정보량으로 정량화한 것이라 보면 된다.

불확실성의 감소로 읽기. 같은 값을 \(I(X;Y)=H(Y)-H(Y\mid X)\)로도 쓸 수 있다. \(H(Y)\)는 \(X\)를 모를 때 \(Y\)에 대한 불확실성이고, \(H(Y\mid X)\)는 \(X\)를 알고 난 뒤 남은 불확실성이다. 그 차이가 \(X\)를 앎으로써 얻은 \(Y\)에 대한 정보다. 이 표현은 대칭이라 \(I(X;Y)=I(Y;X)\)임이 자명하지 않아 보이지만, 정의 형태를 보면 명백하다.

직관: 두 원이 겹친 넓이. 위 식의 마지막 형태 \(I(X;Y)=H(X)+H(Y)-H(X,Y)\)는 집합의 포함배제 원리와 글자 그대로 같은 모양이다(\(|A\cap B|=|A|+|B|-|A\cup B|\)). 그래서 엔트로피를 넓이로 그린 그림이 잘 통한다 — \(H(X)\)와 \(H(Y)\)를 두 원의 넓이, 합동엔트로피 \(H(X,Y)\)를 두 원의 합집합 넓이로 두면, 상호정보량은 두 원이 겹친 부분이다. 겹치지 않는 초승달 부분이 각각 조건부엔트로피 \(H(X\mid Y)\)와 \(H(Y\mid X)\), 즉 "상대를 알고도 남는 고유한 불확실성"이다. \(I(X;Y)=I(Y;X)\)라는 대칭성이 당연해 보이는 것도 이 그림에서다 — 겹친 넓이에는 순서가 없다. 두 원이 완전히 떨어지면 독립(\(I=0\)), 완전히 포개지면 한쪽이 다른 쪽을 완전히 결정하는 경우다.

단, 비유의 한계. 이 그림은 변수가 둘일 때만 안전하다. 셋 이상에서는 "세 원이 함께 겹친 넓이"에 해당하는 양(상호정보량의 삼변수 확장)이 음수가 될 수 있어 넓이로서 말이 되지 않는다. 두 변수에 한해 기억을 붙잡아 두는 도구로 쓰고, 그 이상에서는 정의식으로 돌아가는 편이 안전하다.

독립이면 정확히 0이다. \(p(x,y)=p(x)p(y)\)이면 로그 안이 1이 되어 \(I=0\)이다. 그리고 KL의 비음수성 덕분에 역도 성립한다 — \(I(X;Y)=0\)이면 반드시 독립이다. 앞 글에서 상관계수가 갖지 못했던 성질이 바로 이것이다. \(Y=X^2\)처럼 상관은 0인데 완전히 종속인 관계도 상호정보량은 0이 아니다. 선형에 국한되지 않기 때문이다.

왜 직접 계산하기 어려운가. 상호정보량에는 결합밀도 \(p(x,y)\)와 두 주변밀도 \(p(x),p(y)\)의 비가 필요하다. 저차원 이산변수라면 빈도표로 셀 수 있지만, 이미지나 임베딩 같은 고차원 연속공간에서는 가능한 위치가 너무 많아 유한한 표본이 공간을 거의 채우지 못한다. 밀도 세 개를 조금만 틀리게 추정해도 로그 비율의 오차가 커지고, 신경망 표현이 학습 중 계속 변하므로 한 번 추정한 밀도도 곧 낡는다. 그래서 실제 고차원 문제에서는 MI 값을 직접 계산하기보다 계산 가능한 변분 하한이나 다른 대리목표를 사용하는 경우가 많다.

머신러닝에서. 표현학습의 목표를 "입력에 대한 정보는 최대한 담되 잡음은 버린다"로 정식화하면 그것이 정보 병목(Information Bottleneck)이다. 특징 선택에서는 레이블과의 상호정보량이 기준으로 쓰이지만, 고차원에서는 앞서 설명한 추정의 어려움 때문에 실제 목적함수와 MI의 이론적 관계를 구분해 해석해야 한다.

\[\begin{aligned} I(X;Y) &= D_{\mathrm{KL}}\big(p(x,y)\,\|\,p(x)p(y)\big) \\ &= H(Y) - H(Y\mid X) = H(X) - H(X\mid Y) \\ &= H(X) + H(Y) - H(X,Y) \\ I(X;Y) &\ge 0, \qquad = 0 \iff X \perp Y \end{aligned}\]

격자 셀을 드래그해 결합분포를 바꿔보세요. 대각선에 질량을 몰면 X와 Y가 강하게 연결되어 I가 커지고, "독립으로" 버튼을 누르면 I가 정확히 0으로 떨어집니다. H(X), H(Y), H(X,Y)가 함께 표시되니 세 항의 관계도 확인할 수 있습니다.

ELBO Evidence Lower Bound

관측된 데이터의 가능도를 직접 계산하기 어려울 때, 계산 가능한 점수를 그 아래에 놓고 끌어올린다. 이 점수가 Evidence Lower Bound, 즉 증거의 하한이며 VAE를 비롯한 변분 잠재변수 모델의 핵심 학습목표다.

문제. 잠재변수 모델은 먼저 보이지 않는 원인 \(z\)를 뽑고 그 원인에서 데이터 \(x\)를 만든다고 가정한다: \(p_\theta(x,z)=p(z)p_\theta(x\mid z)\). 우리가 원하는 것은 \(p_\theta(x)=\int p_\theta(x,z)\,dz\)지만, 복잡한 decoder에서는 가능한 모든 \(z\)를 합치는 이 적분과 참 사후분포 \(p_\theta(z\mid x)\)를 정확히 계산하기 어려운 경우가 많다.

핵심 아이디어: 어려운 분포를 쉬운 분포로 대신한다. encoder \(q_\phi(z\mid x)\)를 도입해 “이 \(x\)를 만들었을 법한 \(z\)”에 확률을 준다. 참 사후분포를 이미 알기 때문에 \(q\)를 쓰는 것이 아니다. 오히려 참 사후분포를 계산할 수 없으므로, 표본을 쉽게 뽑고 밀도를 계산할 수 있는 가우시안 같은 분포족으로 그것을 근사해 함께 학습한다.

하한이 나오는 과정. \(q_\phi(z\mid x)\)를 적분 안에 곱했다가 나누면 \[\log p_\theta(x)=\log\mathbb{E}_{q_\phi(z\mid x)}\!\left[\frac{p_\theta(x,z)}{q_\phi(z\mid x)}\right].\] 로그는 오목하므로 젠센 부등식 \(\log\mathbb{E}[A]\ge\mathbb{E}[\log A]\)를 적용할 수 있다. 그 결과 \(\mathcal L_{\mathrm{ELBO}}=\mathbb{E}_{q_\phi}\!\left[\log\frac{p_\theta(x,z)}{q_\phi(z\mid x)}\right]\le\log p_\theta(x)\)가 된다. 즉 계산하기 어려운 지붕 \(\log p(x)\) 아래에 계산 가능한 바닥을 깐 셈이다.

젠센 부등식은 왜 성립하는가. 이 한 걸음이 유도의 전부이므로 직관을 붙여둘 값어치가 있다. 로그는 오목한 함수, 즉 위로 볼록해서 어떤 두 점을 이은 현(chord)이 언제나 곡선보다 아래에 놓인다. 그런데 \(\mathbb{E}[\log A]\)는 곡선 위 여러 점들의 가중평균이라 그 현들 위에 있고, \(\log\mathbb{E}[A]\)는 먼저 \(x\)좌표를 평균 낸 뒤 곡선 위로 올라간 점이다. 그래서 언제나 \(\log\mathbb{E}[A]\ge\mathbb{E}[\log A]\)다. 구체적인 숫자로 확인하면 분명해진다 — \(A\)가 \(1\)과 \(100\)을 각각 절반의 확률로 취하면 \(\log\mathbb{E}[A]=\log 50.5\approx 3.92\)지만 \(\mathbb{E}[\log A]=\tfrac12(\log 1+\log 100)\approx 2.30\)이다. "평균을 내고 로그를 취하는 것"이 "로그를 취하고 평균을 내는 것"보다 항상 크거나 같고, 그 차이가 곧 우리가 포기한 간격이다. \(A\)가 흔들리지 않을수록(모든 값이 같을수록) 두 값이 가까워지는데, 이것이 바로 아래에서 \(q_\phi\)가 참 사후분포에 가까울수록 간격이 줄어든다는 이야기의 다른 얼굴이다.

간격의 정확한 의미. 이 부등식은 사실 다음 항등식이다: \[\log p_\theta(x)=\mathcal L_{\mathrm{ELBO}}+D_{\mathrm{KL}}\big(q_\phi(z\mid x)\|p_\theta(z\mid x)\big).\] 두 번째 항이 0 이상이므로 ELBO가 하한이고, 그 KL이 바로 지붕과 바닥 사이의 간격이다. \(q_\phi\)가 참 사후분포에 가까워지면 간격이 줄어든다. 참 사후분포가 선택한 \(q\)의 분포족으로 표현되지 못하면 간격이 완전히 0이 되지 않을 수도 있다.

왜 실제로 계산하기 쉬운가. ELBO의 기대값은 우리가 설계한 \(q_\phi\)에 대한 것이므로 \(z\sim q_\phi(z\mid x)\)를 뽑아 몬테카를로로 추정할 수 있다. VAE에서는 \(z=\mu_\phi(x)+\sigma_\phi(x)\odot\varepsilon\), \(\varepsilon\sim\mathcal N(0,I)\)로 쓰는 재매개변수화 덕분에 무작위 표본을 거쳐서도 encoder 파라미터 \(\phi\)까지 gradient를 전달할 수 있다.

VAE의 두 요구사항. ELBO를 정리하면 \(\mathbb{E}_{q_\phi}[\log p_\theta(x\mid z)]-D_{\mathrm{KL}}(q_\phi(z\mid x)\|p(z))\)다. 첫 항은 선택한 \(z\)로 \(x\)를 잘 설명하고 복원하라는 재구성 항이고, 둘째 항은 각 입력의 잠재분포가 공통 prior에서 지나치게 벗어나지 않게 하는 정규화 항이다. 직관적으로 첫 항은 “각 데이터를 구별할 만큼 자세히 적어라”, 둘째 항은 “그 메모들을 하나의 정돈된 잠재공간 안에 모아라”라고 요구한다. 둘 사이의 균형이 재구성 품질과 생성 가능한 잠재공간을 함께 만든다.

최대화와 손실의 부호. 이론에서는 ELBO를 최대화하지만 구현에서는 대개 \(-\mathcal L_{\mathrm{ELBO}}\), 즉 재구성 NLL과 KL의 합을 최소화한다. 여기서 정규화 항 \(D_{\mathrm{KL}}(q_\phi(z\mid x)\|p(z))\)과 하한의 간격 \(D_{\mathrm{KL}}(q_\phi(z\mid x)\|p_\theta(z\mid x))\)은 서로 다른 KL이므로 혼동하면 안 된다. 전자는 계산 가능한 VAE 손실의 일부이고, 후자는 일반적으로 직접 계산할 수 없는 근사 오차의 크기다.

확산 모델과의 관계. 원래의 variational diffusion 유도에서는 여러 노이즈 상태를 잠재변수로 두고 데이터 로그가능도의 변분하한을 만든다. 가우시안 전이 덕분에 단계별 KL이 계산 가능하며, 특정 가중과 파라미터화를 택하면 널리 쓰는 노이즈 예측 MSE 형태로 단순화된다. 다만 모든 확산 모델의 모든 학습목표가 동일한 ELBO 그 자체인 것은 아니며, 실무에서는 가중을 바꾼 단순화 목적함수를 자주 사용한다.

\[\begin{aligned} \log p_\theta(x) &= \mathcal{L}_{\text{ELBO}}(\theta,\phi;x) + D_{\mathrm{KL}}\big(q_\phi(z|x)\,\|\,p_\theta(z|x)\big) \\ \mathcal{L}_{\text{ELBO}} &= \mathbb{E}_{q_\phi}[\log p_\theta(x\mid z)] - D_{\mathrm{KL}}\big(q_\phi(z|x)\,\|\,p(z)\big) \\ &\le \log p_\theta(x) \quad \text{(항상)} \end{aligned}\]

근사 사후분포 q의 평균과 폭을 참 사후분포(회색)에 맞춰보세요. 막대 그림에서 ELBO(파랑)가 올라가고 KL 간격(주황)이 줄어들며, 둘의 합인 log p(x)는 q가 무엇이든 변하지 않는다는 점이 핵심입니다. 완전히 일치시키면 간격이 0이 되고 하한이 정확해집니다.

log p(x) = ELBO + KL — 총합은 q와 무관하게 고정

← Back to all posts