VAE 이해: Latent Variable Model부터 ELBO, Reparameterization까지

난이도: 중급

태그: generative,vae,latent_variable_model,elbo,reparameterization

VAE를 제대로 이해하려면 먼저 "데이터 뒤에 직접 보이지 않는 잠재 원인이 있다"는 Latent Variable Model 관점부터 잡아야 한다.

일반 autoencoder는 입력을 압축했다가 복원하는 구조지만, 그 latent vector가 샘플링 가능한 확률공간이라는 보장은 없다. VAE는 latent를 확률변수로 두고, "보이지 않는 원인 변수 \(z\)가 데이터를 생성한다"는 생성 모델 관점으로 문제를 다시 세운다.

그래서 VAE는 단순 압축기가 아니라 확률 생성 모델이다. latent가 단순 숫자 배열이 아니라 분포 위의 변수라는 점이 핵심이고, 이 차이 때문에 ELBO, KL, reparameterization trick이 모두 등장한다.

그림으로 먼저 보기

VAE 기본 구조도
VAE의 큰 흐름. 입력에서 잠재분포 파라미터를 추정하고, 샘플링된 잠재변수로 다시 복원하는 구조를 한 장으로 보여준다.
원본 / 라이선스 · EugenioTL · CC BY-SA 4.0
Reparameterization trick이 포함된 VAE 구조
Reparameterization trick이 어디에서 등장하는지 보여주는 그림. \(\mu, \sigma\)와 \(\epsilon\)이 어떻게 결합되어 \(z\)를 만드는지 시각적으로 확인할 수 있다.
원본 / 라이선스 · EugenioTL · CC BY-SA 4.0

1. Latent Variable Model이란 무엇인가

Latent Variable Model은 데이터 \(x\)를 직접 설명하는 대신, 그 뒤에 숨어 있는 잠재변수 \(z\)가 있다고 가정하는 모델이다.

이 관점이 중요한 이유는 복잡한 데이터를 더 작은 원인 구조로 설명하게 해주기 때문이다. 얼굴 이미지라면 표정, 조명, 시점 같은 잠재 요인이 있을 수 있고, VAE는 이런 숨은 요인을 확률적으로 다루는 틀을 제공한다.

p(x)=p(x,z)dz

이 식의 뜻은 "관측 데이터 \(x\)의 확률은, 모든 가능한 잠재변수 \(z\)를 고려해 합치거나 적분한 결과"라는 것이다.

예를 들어 얼굴 이미지 \(x\)가 있다고 하자. 이 이미지를 직접 설명하는 대신, 그 뒤에

같은 잠재 요인 \(z\)가 있다고 생각하면, 데이터 구조를 훨씬 더 자연스럽게 설명할 수 있다.

2. 생성 모델 관점에서 VAE는 무엇을 배우나

VAE는 두 가지를 같이 배운다.

여기서 중요한 점은 decoder는 생성 모델이고, encoder는 추론 모델이라는 점이다. 즉 decoder는 "원인에서 결과로", encoder는 "결과에서 원인으로" 가는 방향이다.

3. 왜 직접 likelihood를 최대화하지 못하나

우리가 진짜로 최대화하고 싶은 것은 데이터 likelihood \(p(x)\) 또는 데이터셋 전체에 대한 \(\log p(x)\)다.

logp(x)=logp(x,z)dz

문제는 이 적분이 보통 닫힌 형태로 계산되지 않는다는 것이다. 잠재변수 공간이 고차원이고 신경망이 들어가면, 정확한 posterior \(p(z|x)\)도 계산하기 어렵다.

즉 VAE의 핵심 문제는 단순히 생성이 아니라, 잠재변수가 들어간 확률모델의 추론이 어렵다는 데 있다.

4. Variational Inference: 어려운 posterior를 근사하자

그래서 VAE는 진짜 posterior \(p(z|x)\)를 직접 구하려 하지 않고, 계산 가능한 근사 posterior \(q(z|x)\)를 따로 만든다. 이것이 variational inference 관점이다.

핵심 아이디어는 간단하다. "진짜 posterior는 어렵다. 대신 신경망으로 근사 posterior를 만들고, 그게 진짜 posterior와 비슷해지게 학습하자."

이 근사 분포가 보통 encoder 네트워크의 출력이다.

5. ELBO는 왜 등장하나

우리는 \(\log p(x)\)를 직접 최대화하기 어렵기 때문에, 대신 그 아래쪽 경계(lower bound)를 최대화한다. 그 하한이 바로 ELBO다.

logp(x)ELBO

즉 ELBO를 크게 만들면, 직접 다루기 어려운 \(\log p(x)\)도 같이 커지는 방향으로 간다.

6. ELBO 공식

ELBO=𝔼q(z|x)[logp(x|z)]-DKL(q(z|x)p(z))

이 식은 VAE를 이해하는 핵심이다. 두 항의 역할이 완전히 다르다.

즉 VAE는 "복원 잘하기"와 "잠재공간을 정돈하기"를 동시에 요구하는 모델이다.

7. ELBO를 loss로 보면 어떻게 되나

딥러닝에서는 보통 최소화 문제를 쓰므로, 실제 구현에서는 \(-ELBO\)를 loss로 사용한다.

Loss=-ELBO

그러면 해석은 더 익숙해진다.

즉 VAE loss는 "reconstruction loss + latent regularization"으로 읽으면 된다.

8. 왜 KL이 직접 loss에 들어가나

일반 분류 문제에서는 KL이 cross-entropy 안에 숨어 있는 경우가 많다. 하지만 VAE에서는 KL divergence가 수식 속 해석용 개념이 아니라, 실제 loss 함수 항으로 직접 들어간다.

그 이유는 latent posterior \(q(z|x)\)를 prior \(p(z)\) 근처로 유지해야 샘플링이 가능한 잠재공간이 만들어지기 때문이다. 만약 이 항이 없으면 latent space가 제멋대로 흩어져서, 학습 후 \(z \sim p(z)\)로 샘플링했을 때 그럴듯한 데이터가 잘 안 나올 수 있다.

9. Reparameterization Trick은 왜 필요한가

문제는 \(z \sim q(z|x)\)처럼 샘플링이 들어가면, gradient를 encoder 파라미터까지 바로 전달하기 어렵다는 점이다. 샘플링 연산이 미분 경로를 끊어 버리기 때문이다.

그래서 VAE는 샘플링을 다음처럼 다시 쓴다.

z=μ+σϵ,ϵ𝒩(0,I)

이 식의 의미는 "랜덤성은 \(\epsilon\)에서만 가져오고, \(\mu, \sigma\)는 신경망이 결정하게 하자"는 것이다. 이렇게 하면 샘플링을 포함한 전체 계산 그래프가 다시 미분 가능해진다.

10. Encoder는 실제로 무엇을 출력하나

보통 encoder는 latent vector 자체를 바로 내지 않고, 잠재분포의 평균 \(\mu(x)\)와 분산 또는 log-variance \(\log \sigma^2(x)\)를 출력한다.

즉 VAE의 encoder는 deterministic code를 만드는 것이 아니라, "이 입력에 대해 latent가 어디쯤 있고 얼마나 퍼져 있어야 하는가"를 예측하는 네트워크다.

11. VAE와 일반 Autoencoder 차이

그래서 일반 autoencoder는 표현 학습에는 좋을 수 있지만, latent 공간에서 임의 샘플을 뽑아 새로운 데이터를 생성하는 데는 약하다. 반면 VAE는 학습 과정에서 latent space를 정돈하므로, 샘플링 기반 생성이 자연스럽다.

12. VAE의 생성 과정

학습이 끝난 뒤에는 prior에서 latent를 샘플링하고 decoder에 넣으면 된다.

zp(z),xp(x|z)

이게 VAE가 "생성 모델"인 이유다. 학습할 때부터 latent를 prior에 맞춰 두었기 때문에, 추론 시에도 prior에서 바로 샘플링할 수 있다.

13. VAE의 장점과 한계

14. 체크리스트