
크로스 엔트로피와 KL 발산
거리인 듯 거리 아닌, 그리고 딥러닝에서 유용한 이유
지난 글에서는 크로스 엔트로피를 살펴보았다. 핵심은 분명했다. 크로스 엔트로피는 실제 세계의 분포 $P$ 와 모델의 예측 분포 $Q$ 를 비교하는 방식이며, 정답의 입장에서 모델이 얼마나 큰 비용을 치르는지를 측정하는 양이다. 그런데 크로스 엔트로피를 조금 더 공부하다 보면 반드시 만나게 되는 공식이 있다.
$H(P,Q) = H(P) + D_{KL}(P\|Q)$
짧은 식이지만, 이 안에는 매우 많은 이야기가 들어 있다. 엔트로피와 크로스 엔트로피가 어떻게 연결되는지, KL 발산은 왜 등장하는지, 그리고 딥러닝이 왜 크로스 엔트로피를 손실 함수로 사용하는지가 모두 이 식 안에 응축되어 있다. 이번 글에서는 바로 이 관계를 중심으로, KL divergence가 어떤 개념인지 차근차근 이야기해보려 한다.
1. KL 발산은 무엇을 측정하는가
KL 발산은 다음과 같이 정의된다.
$D_{KL}(P\|Q) = \displaystyle \sum_{x} P(x) \log \dfrac{P(x)}{Q(x)}$
이 식을 처음 보면 낯설다.
하지만 구조를 하나씩 뜯어보면 뜻은 비교적 분명하다. 각 사건 $x$에 대해 $\frac{P(x)}{Q(x)}$는 “실제 분포와 모델 분포의 비율”이다. 이 비율에 로그를 취하면, $Q$가 $P$를 얼마나 잘못 설명하고 있는지가 로그 스케일에서 드러난다. 그리고 그것을 $P(x)$로 평균낸 것이 KL 발산이다. 조금 더 직관적으로 말하면 다음과 같다.
KL 발산은, 실제 세계가 $P$를 따를 때 그것을 $Q$로 설명하면서 생기는 평균적인 정보 손실이다.
만약 $P=Q$라면, 즉 모델이 실제 세계를 완벽하게 재현하고 있다면 비율은 항상 $1$이고 로그는 $0$이 된다. 따라서 KL 발산도 $0$이다. 반대로 $Q$가 $P$와 다를수록, 특히 $P$가 큰 곳에서 $Q$가 엉뚱한 값을 줄수록 KL 발산은 커진다. 즉, KL 발산은 두 분포가 얼마나 어긋나 있는지를 측정하는 양이기는 하다. 다만 곧 보게 되겠지만, 이것은 우리가 보통 생각하는 의미의 “거리”와는 조금 다르다.
2. 크로스 엔트로피와 KL 발산의 관계
이제 핵심 공식을 직접 확인해보자. 크로스 엔트로피는
$H(P,Q) = - \displaystyle \sum_{x} P(x) \log Q(x)$
이고, 엔트로피는
$H(P) = - \displaystyle \sum_{x} P(x) \log P(x)$
이다. 한편 KL 발산은
$D_{KL}(P\|Q) = \displaystyle \sum{x} P(x) \log \dfrac{P(x)}{Q(x)}$
였으므로, 로그의 성질을 이용하면
$D_{KL}(P\|Q) = \displaystyle \sum_{x} P(x)\left( \log P(x) = \log Q(x) \right)$
라고 쓸 수 있다. 이를 두 항으로 나누면
$D_{KL} = \displaystyle \sum_{x} P(x) \log P(x) = \sum_{x} P(x) \log Q(x)$
가 된다. 여기에 엔트로피와 크로스 엔트로피의 정의를 대입하면
$D_{KL}(P\|Q) = - H(P) + H(P,Q)$
즉,
$H(P,Q) = H(P) + D_{KL}(P\|Q)$
를 얻는다. 이 식은 정말 아름답다. 왜냐하면 크로스 엔트로피가 두 부분으로 정확히 분해되기 때문이다.
① $H(P)$ : 데이터 자체가 가진 본래의 불확실성
② $D_{KL}(P\|Q)$ : 모델이 틀려서 추가로 부담하는 비용
즉, 크로스 엔트로피는 현실 세계가 원래 가지고 있는 어려움과 모델이 잘못 이해해서 더 만든 어려움의 합이다.
3. 왜 이 분해가 중요한가?
이제 딥러닝의 관점에서 보자. 학습할 때는 보통 데이터가 주어져 있다. 즉, 실제 정답 분포 $P$는 고정되어 있다. 바뀌는 것은 모델 $Q$뿐이다. 그 말은 곧 $H(P)$는 상수라는 뜻이다. 모델이 어떤 파라미터를 갖든, 데이터 자체가 가진 본래의 불확실성은 바뀌지 않는다. 따라서 크로스 엔트로피를 최소화하는 것은 결국 KL 발산을 최소화하는 것과 같다.
$\displaystyle \arg\min_{Q} H(P,Q) = \arg\min_{Q} D_{KL}(P\|Q) $
이것이 바로 크로스 엔트로피가 딥러닝에서 자연스럽게 등장하는 이유다. 겉으로는 하나의 손실 함수를 최소화하는 것처럼 보이지만, 실제로는 모델의 분포 $Q$를 실제 분포 $P$에 최대한 가깝게 만드는 작업을 하고 있는 셈이다. 즉, 크로스 엔트로피 최소화는 단순한 최적화 기술이 아니라, 분포를 근사하는 매우 본질적인 원리와 연결되어 있다.
4. KL 발산은 왜 '거리'가 아닐까?
이쯤 되면 많은 사람이 이렇게 생각한다.
“둘이 같으면 $0$이고, 다를수록 커진다. 그럼 그냥 거리라고 부르면 되지 않나?”
하지만 KL 발산은 엄밀한 의미의 거리(metric)는 아니다. 그 이유는 거리라면 만족해야 할 몇 가지 성질을 KL 발산이 만족하지 않기 때문이다. 가장 대표적인 것이 대칭성이다. 거리라면 일반적으로
$d(P,Q) = d(Q,P)$
가 되어야 한다. 서울에서 부산까지의 거리와 부산에서 서울까지의 거리는 같아야 한다는 뜻이다. 하지만 KL 발산은 일반적으로
$D_{KL}(P\|Q) \neq D_{KL}(Q\|P)$
이다. 왜 이런 일이 생길까? KL 발산은 어디까지나 $P$를 기준으로 평균을 내기 때문이다. 즉, “어느 분포를 기준으로 세상을 보느냐”에 따라 값이 달라진다. KL은 두 분포를 대칭적으로 비교하는 양이 아니라, 한 분포를 다른 분포로 설명할 때 생기는 손실을 측정하는 양이다.
또한 KL 발산은 일반적인 거리처럼 삼각부등식을 만족하지도 않는다. 그래서 KL은 distance가 아니라 divergence라고 부른다. 우리말로는 흔히 “발산”이라고 번역한다. 이 이름은 낯설지만, 오히려 훨씬 정확하다. KL은 두 점 사이의 기하학적 길이라기보다, 한 분포에서 다른 분포로 갈 때 생기는 정보적 어긋남에 더 가깝다.
5. 거리가 아닌데도 왜 그렇게 중요한가?
KL이 진짜 거리가 아니라면, 오히려 더 의문이 생긴다.
“그럼 왜 이렇게 많이 쓰일까?”
답은 분명하다. 통계학과 머신러닝에서 중요한 것은 언제나 “기하학적 거리”가 아니라, 어떤 분포를 다른 분포로 대체해서 설명할 때 생기는 손실이기 때문이다. 예를 들어 모델링에서는 흔히 이런 상황이 벌어진다.
① 실제 세계는 복잡한 분포 $P$를 따른다.
② 하지만 우리는 계산 가능한 더 단순한 분포 $Q$만 다룰 수 있다.
③ 그렇다면 $Q$로 $P$를 얼마나 잘 근사할 수 있는가?
이 질문에 답하는 데 KL 발산은 매우 자연스럽다. 왜냐하면 그것은 바로 “잘못된 분포로 설명했을 때의 평균 정보 손실”을 수량화하기 때문이다. 따라서 KL의 비대칭성은 단점이라기보다, 오히려 무엇을 기준으로 무엇을 근사하는가를 분명히 드러내는 성질이라고 볼 수 있다. 나중에 변분추론이나 생성모델을 공부하게 되면, $D_{KL}(P\|Q)$를 줄이느냐 $D_{KL}(Q\|P)$를 줄이느냐에 따라 전혀 다른 성질이 나타난다는 점을 보게 된다. 그 차이가 중요한 이유도 바로 여기에 있다.
6. 학습에 왜 크로스 엔트로피를 더 자주 사용하는가? - 최대우도추정
이제 다시 딥러닝으로 돌아와 보자. 크로스 엔트로피가 널리 쓰이는 가장 깊은 이유는 그것이 최대우도추정(MLE) 과 정확히 연결되기 때문이다. 데이터 $(x_i, y_i)$가 주어졌다고 하자. 모델은 각 입력 $x_i$에 대해 정답 $y_i$가 나올 확률 $Q(y_i | x_i)$를 예측한다. 그러면 전체 데이터가 관측될 likelihood는
$ \displaystyle \prod_{i} Q(y_i | x_i) $
가 된다. 최대우도추정은 이 likelihood를 최대화하는 파라미터를 찾는 것이다. 그런데 곱은 계산하기 불편하므로 보통 로그를 취한다.
$ \displaystyle \log \prod_{i} Q(y_i | x_i) = \sum_{i} \log Q(y_i | x_i)$
이제 최대화 문제를 최소화 문제로 바꾸기 위해 마이너스를 붙이면
$\displaystyle -\sum_{i} \log Q(y_i |x_i)$
를 최소화하는 것과 같다. 이 식은 분류 문제에서의 크로스 엔트로피 손실과 사실상 동일하다. 즉, 우리가 크로스 엔트로피를 최소화하고 있다는 것은 단순히 “잘 작동하는 함수 하나를 골랐다”는 뜻이 아니다. 통계학적으로 보면, 그것은 관측된 정답 데이터가 가장 그럴듯하게 나오도록 모델을 학습시키고 있다는 뜻이다. 이 점이 굉장히 중요하다. 크로스 엔트로피는 경험적 요령이 아니라, 확률모형의 원리와 정면으로 연결되어 있다.
7. Softmax와 결합했을 때 왜 그렇게 강력한가
분류 문제에서 모델의 마지막 출력층은 보통 softmax다. 모델은 각 클래스에 대한 점수 $z_j$를 내놓고, softmax는 그것을 확률로 바꾼다.
$ Q_j = \dfrac{e^{z_j}}{\sum_{k} e^{z_k}} $
이때 정답 라벨 $y$가 one-hot 벡터라면 손실은
$ L = \displaystyle - \sum_{j} y_j \log Q_j$
가 된다. 그리고 이 손실을 logit $z_j$에 대해 미분하면 아주 유명한 결과가 나온다.
$\dfrac{\partial L}{\partial z_j} = Q_j - y_j$
이 식은 딥러닝에서 정말 예쁜 결과 중 하나다. 겉으로는 지수 함수와 로그가 뒤섞여 있어서 복잡해 보이지만, 최종적으로는 예측 확률 - 정답이라는 단순한 형태의 gradient가 나온다. 이 단순성은 실전에서 매우 중요하다. 역전파 계산이 깔끔하고, 오차 신호의 의미도 분명하다. 모델은 각 클래스에 대해 “내가 얼마나 많이 줬고, 정답은 얼마나 원했는가”를 거의 직접적으로 전달받는다. 그래서 softmax와 cross entropy의 조합은 분류 문제에서 사실상 표준처럼 쓰인다.
여기서 종종 “크로스 엔트로피가 기울기 소실을 해결한다”는 식으로 단정적으로 말하기도 하지만, 그 표현은 조금 조심할 필요가 있다. 더 정확하게는, 분류 문제에서 sigmoid나 softmax와 결합될 때 MSE보다 더 자연스럽고 강한 학습 신호를 주는 경우가 많다고 말하는 편이 좋다. 핵심은 이것이다. 분류 문제의 본질은 정답 클래스의 확률을 끌어올리는 것이고, 크로스 엔트로피는 바로 그 목적에 가장 직접적으로 맞닿아 있다.
8. 그렇다면 KL 발산은 언제 전면에 등장할까?
분류 문제를 처음 배우는 단계에서는 보통 크로스 엔트로피를 더 자주 접한다. 하지만 조금 더 깊이 들어가면 KL 발산이 점점 전면으로 나온다. 왜 그럴까?
분류 문제에서는 정답이 one-hot 라벨인 경우가 많다. 이런 상황에서는 크로스 엔트로피가 손실 함수로 매우 편리하다. 계산도 쉽고, 의미도 직관적이다. 하지만 더 일반적인 문제에서는 단지 “정답 클래스 하나를 맞히는 것”이 아니라, 분포 전체를 다른 분포로 근사하는 문제가 중요해진다. 이때는 KL 발산이 훨씬 본질적인 언어가 된다.
대표적인 예가 몇 가지 있다.
- 지식 증류(Knowledge Distillation)
teacher 모델이 만든 출력 분포를 student 모델이 따라가게 하고 싶다면, 이는 one-hot 정답을 맞히는 문제가 아니라 분포 전체를 모방하는 문제다. 이때 KL 발산이 자연스럽게 등장한다. - 변분추론(Variational Inference)
복잡한 posterior 분포를 계산 가능한 더 단순한 분포로 근사할 때, 그 근사의 질을 재는 핵심 도구로 KL 발산이 등장한다. - ELBO
변분추론을 공부하다 보면 ELBO 안에 KL이 왜 그렇게 자주 나오는지 보게 된다. 그 이유 역시 결국은 “분포 근사”의 문제이기 때문이다.
즉, 크로스 엔트로피가 딥러닝의 실전적인 얼굴이라면, KL 발산은 그 뒤에 있는 더 일반적이고 더 이론적인 얼굴이라고 할 수 있다.
9. 비유로 다시보기 - 원래의 거리와 잘못 든 길의 추가 비용
이 관계를 조금 비유적으로 말해보자. 서울에서 부산까지 가야 한다고 하자. 서울과 부산 사이에 일정한 거리가 있다는 사실은 내가 바꿀 수 없다. 이 부분은 현실 자체가 가진 조건이다. 마치 데이터가 원래 가지고 있는 불확실성 $H(P)$와 비슷하다. 그런데 길을 잘못 들거나 우회하면 추가 비용이 생긴다. 이것이 마치 KL 발산 $D_{KL}(P\|Q)$에 해당한다. 그러면 전체 이동 비용은
- 원래부터 피할 수 없는 비용
- 내가 잘못해서 더 낸 비용
의 합이 된다. 이것이 바로
$H(P,Q) = H(P) + D_{KL}(P\|Q)$
라는 식이 주는 감각이다. 세상이 원래 조금 복잡하고 애매한 것은 어쩔 수 없다. 하지만 모델이 현실을 잘못 이해해서 추가로 낭비하는 비용은 줄일 수 있다. 딥러닝의 학습은 바로 그 추가 비용을 줄여가는 과정이다.
10. 앞으로 더 중요한 이유 - 보이지 않는 분포를 쫓는 문제
지금까지는 실제 분포 $P$가 어느 정도 주어져 있다고 가정했다. 분류 문제에서는 정답 라벨이 있으니 이런 그림이 비교적 분명하다. 하지만 현실의 더 어려운 문제들에서는 $P$를 직접 볼 수 없는 경우가 많다. 관측된 데이터 뒤에 숨겨진 잠재변수가 있고, 보이지 않는 구조가 있고, 직접 계산할 수 없는 진짜 분포가 있다. 그럴 때 우리는 늘 비슷한 문제와 마주한다.
“직접 볼 수 없는 진짜 분포를, 내가 다룰 수 있는 분포로 어떻게 가장 잘 근사할 것인가?”
이 질문의 중심에 KL 발산이 놓여 있다. 그래서 KL 발산은 분류 문제의 손실 함수 설명을 넘어서, 더 넓은 확률모형의 세계로 들어가는 문이 된다. EM 알고리즘, 변분추론, 생성모델, 정보기하학. 조금만 더 들어가면 놀라울 정도로 자주 KL이 다시 등장한다. 처음에는 그저 손실 함수 뒤에 숨어 있던 보조 개념처럼 보일 수 있다. 하지만 조금 더 공부해보면 오히려 그 반대라는 사실을 깨닫게 된다. 크로스 엔트로피가 표면이라면, KL 발산은 구조다.
11. 마무리 - 크로스 엔트로피는 표면이고, KL 발산은 그 뒤의 문법이다.
분류 문제를 처음 배울 때 크로스 엔트로피는 그저 손실 함수처럼 보인다. 정답에 높은 확률을 주면 손실이 줄고, 낮은 확률을 주면 손실이 커지는 함수. 실전적이고 익숙한 도구. 하지만 조금 더 깊이 들어가면, 그 뒤에 훨씬 더 본질적인 구조가 숨어 있다는 것을 알게 된다.
- 엔트로피는 세계 자체의 불확실성이고,
- 크로스 엔트로피는 현실과 모델 사이의 전체 비용이며,
- KL 발산은 모델이 틀려서 추가로 부담하는 비용이다.
그리고 학습이란 결국, 그 추가 비용을 조금씩 줄여나가는 과정이다. 그래서 나는 크로스 엔트로피를 볼 때마다 이것이 단순한 테크닉이 아니라는 생각을 하게 된다. 그것은 딥러닝이 현실과의 차이를 다루는 방식이고, 더 넓게 보면 확률적 세계를 이해하는 하나의 문법에 가깝다. 다음에 EM 알고리즘이나 변분추론을 공부하게 되면 아마 이런 생각이 들 것이다.
“아, 결국 여기서도 또 KL이구나.”
그리고 사실 그건 우연이 아니다. 보이지 않는 세계를 근사하려는 거의 모든 시도 속에서, KL 발산은 반복해서 다시 나타난다.
'단편 강의' 카테고리의 다른 글
| 최대우도추정(Maximum Likelihood Estimation) (0) | 2026.04.13 |
|---|---|
| EM 알고리즘의 수렴성 (0) | 2026.04.09 |
| 크로스 엔트로피와 KL Divergence(1) (0) | 2026.04.07 |
| 엔트로피(Entropy) 이야기(3) - 섀넌 (0) | 2026.04.06 |
| 엔트로피(Entropy) 이야기(2) - 볼츠만 (0) | 2026.04.06 |