딥러닝에서 KL Divergence Loss는 모델의 출력 분포(예: softmax 결과)와 정답 분포(예: soft label) 사이의 차이를 측정하는 데 사용됩니다.
특히 soft label이나 Knowledge Distillation을 할 때 자주 등장하는 개념입니다.
클래스 | P (정답 분포) | Q (예측 분포) |
---|---|---|
0 | 0.1 | 0.2 |
1 | 0.6 | 0.3 |
2 | 0.3 | 0.5 |
KL Divergence Loss 계산 공식:
👉 합산하면
KL = -0.06931 + 0.41586 - 0.15324 ≈ 0.19331
import torch
import torch.nn.functional as F
P = torch.tensor([0.1, 0.6, 0.3])
Q = torch.tensor([0.2, 0.3, 0.5])
loss = F.kl_div(Q.log(), P, reduction='sum')
print(loss.item()) # ≈ 0.19331
Variational Autoencoder (VAE)에서는 KL Divergence가 잠재 벡터(latent vector)의 분포를 정규분포로 맞추는 데 사용됩니다.
예) latent vector 차원 = 2
그러면,
계산하면 ≈ 1.5377
import torch
mu = torch.tensor([1.0, -1.0])
logvar = torch.log(torch.tensor([0.5**2, 1.5**2]))
kl_loss = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())
print(kl_loss.item()) # ≈ 1.5377
KL Divergence
: 예측 분포가 정답 분포에서 얼마나 벗어났는지 측정
VAE에서의 역할
: Latent Vector가 정규분포를 따르도록 유도하여 안정적 생성