VAE 정리 — 왜 이런 구조인가?
개인적으로 학습하며 정리한 내용입니다.
목차
- VAE의 출발점: 우리가 진짜 하고 싶은 것
- 잠재변수 모델과 p(x)의 문제
- 변분추론이란 무엇인가
- ELBO의 등장
- ELBO의 구조 분석
- Prior의 역할: 왜 N(0, I)를 쓰는가
- VAE 전체 구조 정리
- Reparameterization Trick: 왜 필요하고 어떻게 동작하는가
- 흔한 오해 정정: VAE는 분포-분포 매핑 모델인가?
1. VAE의 출발점
VAE를 처음 접하면 흔히 이런 설명을 듣는다.
"AE는 점-점 매핑이고, VAE는 분포-분포 매핑이라서 latent 공간이 정돈된다."
그런데 이것은 결과에 대한 직관일 뿐, VAE가 이 구조를 갖게 된 근본적인 이유가 아니다.
VAE의 출발점은 딱 하나다.
데이터 분포를 잘 모델링하는 생성모델을 만들고 싶다.
즉, 모델이 만들어내는 데이터 확률 pθ(x)를 실제 데이터처럼 만들고 싶은 것이다.
2. 잠재변수 모델과 p(x)의 문제
잠재변수 모델을 아래와 같이 세운다고 하자.
x∼pθ(x∣z)
그러면 모델이 만들어내는 데이터 확률은 다음과 같다.
pθ(x)=∫pθ(x∣z)p(z)dz
이 모델을 학습하는 가장 표준적인 방법은 Maximum Likelihood Estimation (MLE)이다.
θmaxi∑logpθ(x(i))
데이터가 모델에서 높은 확률로 나오게 만들자.
여기까지는 VAE 이전의, 잠재변수 생성모델의 기본 목표다.
문제: 이 적분이 계산이 불가능하다
pθ(x)=∫pθ(x∣z)p(z)dz
고차원 z에서 이 적분은 closed form이 없고, 샘플링으로 추정하려 해도 분산이 너무 커서 사실상 계산이 막힌다.
즉:
- 최대화하고 싶은 것: logpθ(x)
- 그런데 이걸 직접 계산하거나 미분하기 어렵다
그래서 우회가 필요하다.
3. 변분추론이란 무엇인가
우회를 이해하기 위해, 먼저 변분추론(Variational Inference) 자체를 정리하자.
3-1. 우리가 알고 싶은 것: posterior
어떤 관측 데이터 x가 주어졌을 때,
pθ(z∣x)
를 알고 싶다.
"이 데이터가 어떤 latent에서 나왔을까?"
예를 들어:
- x: 흐릿한 고양이 사진
- z: 진짜 고양이의 자세, 조명, 배경 같은 숨은 요인
pθ(z∣x)는 "이 사진을 만들었을 법한 latent 상태들의 분포"다.
3-2. 왜 posterior를 직접 못 구하나
베이즈 공식을 쓰면:
pθ(z∣x)=pθ(x)pθ(x∣z)p(z)
분자는 계산 가능하다.
문제는 분모인 pθ(x)=∫pθ(x∣z)p(z)dz 가 계산이 어렵다는 것이다.
그 결과 pθ(z∣x)도 막혀버린다.
3-3. 발상: 비슷한 쉬운 분포로 대신하자
진짜 posterior를 직접 구하는 대신, 다루기 쉬운 근사 분포를 하나 만들자.
qϕ(z∣x)
예를 들어:
qϕ(z∣x)=N(μϕ(x),diag(σϕ2(x)))
처럼 Gaussian family 안에서 찾겠다고 제한한다.
3-4. 변분추론의 핵심 목표
qϕ(z∣x)≈pθ(z∣x)
이것이 변분추론의 본질이다.
3-5. "비슷하다"를 어떻게 측정하나: KL divergence
ϕminKL(qϕ(z∣x)∥pθ(z∣x))
이것이 변분추론의 핵심 최적화 목표다.
3-6. 그런데 이 KL도 직접 계산이 안 된다
KL 식 안에 pθ(z∣x)가 들어가는데, 이것을 모르기 때문에 또다시 막힌다.
그래서 한 번 더 우회가 필요하다. 이것이 ELBO다.
4. ELBO의 등장
4-1. 핵심 등식
임의의 분포 qϕ(z∣x)를 도입하면 다음 등식이 성립한다.
logpθ(x)=ELBO(ϕ,θ)Eqϕ(z∣x)[logqϕ(z∣x)pθ(x,z)]+KL(qϕ(z∣x)∥pθ(z∣x))
4-2. 왜 ELBO가 lower bound인가
KL divergence는 항상 0 이상이므로:
KL(qϕ(z∣x)∥pθ(z∣x))≥0
따라서:
ELBO(ϕ,θ)≤logpθ(x)
그리고:
logpθ(x)−ELBO(ϕ,θ)=KL(qϕ(z∣x)∥pθ(z∣x))
4-3. 왜 ELBO를 최대화하면 되는가
logpθ(x)는 ϕ에 대해 상수다 (즉, q를 바꿔도 logp(x)는 안 변한다).
따라서:
ELBO를 크게 만들수록⇔KL(q∥pθ(z∣x))이 작아진다
즉:
- KL을 직접 최소화하고 싶지만 pθ(z∣x)를 모른다
- 대신 ELBO를 최대화하면, 동치 관계에 의해 자동으로 KL이 줄어든다
이것이 ELBO를 최적화하는 핵심 이유다.
5. ELBO의 구조 분석
ELBO를 전개하면 두 항으로 나뉜다.
ELBO(ϕ,θ)=Reconstruction termEqϕ(z∣x)[logpθ(x∣z)]−Regularization termKL(qϕ(z∣x)∥p(z))
각 항의 의미
| 항 | 의미 |
|---|
| Reconstruction term | encoder가 준 z로 decoder가 x를 얼마나 잘 재현하는가 |
| KL term | encoder가 만든 posterior가 prior p(z)와 얼마나 비슷한가 |
이것이 우리가 흔히 말하는 reconstruction loss + KL regularization의 수학적 근거다.
qϕ(z∣x)=N(μ,σ2I)이고 p(z)=N(0,I)이면:
KL(qϕ(z∣x)∥p(z))=−21j=1∑d(1+logσj2−μj2−σj2)
샘플링이나 추정 오차 없이 정확하게 계산된다. 이것이 학습을 매우 안정적으로 만든다.
6. Prior의 역할
6-1. Prior는 "현실의 잠재요인 분포"가 아니다
VAE의 prior p(z)=N(0,I)는:
"현실에서 z가 정말 정규분포를 따른다"는 주장이 아니다.
정확히는:
"표준정규라는 편한 좌표계를 출발점으로 정해두고, decoder가 그 좌표계를 실제 데이터에 맞게 비선형 변환해준다."
즉:
- prior → 샘플링 가능한 기준 좌표계
- decoder → 그 좌표계를 현실 데이터 공간으로 매핑하는 비선형 변환
6-2. 표준정규를 prior로 쓰는 세 가지 이유
① 실용적 이유: 샘플링이 쉽다
z∼N(0,I)
임의의 z를 뽑아 decoder에 넣으면 새로운 데이터를 생성할 수 있다.
② 수학적 이유: KL이 closed form으로 계산된다
encoder를 Gaussian으로 두면, KL(qϕ∥N(0,I))가 위 식처럼 해석적으로 계산된다.
③ 기하학적 이유: latent 공간이 연결된다 (manifold 관점)
prior 없이 AE처럼 학습하면:
- latent가 데이터 포인트 주변에 제멋대로 흩어짐
- 사이 공간이 "비어있는 구멍(hole)"이 됨
- 임의의 z를 샘플링하면 이상한 x가 나옴
KL term이 모든 qϕ(z∣x)를 N(0,I) 근처로 당겨주기 때문에:
- latent 공간이 하나의 덩어리로 묶임
- 어떤 z를 뽑아도 그럴듯한 x가 나옴
- latent walk / interpolation이 자연스럽게 됨
7. VAE 전체 구조 정리
7-1. 두 모델의 역할
z ~ p(z)
│
▼
decoder pθ(x|z) ← 생성 모델 (generative model)
│
▼
x
▲
│
encoder qφ(z|x) ← posterior 근사 모델 (inference model)
| 구성요소 | 역할 |
|---|
| decoder pθ(x∣z) | 생성 모델. z가 주어지면 x를 생성 |
| encoder qϕ(z∣x) | posterior 근사. x가 주어지면 z의 분포를 예측 |
| 변분추론 | qϕ(z∣x)가 pθ(z∣x)에 가까워지도록 학습 |
7-2. Amortized Inference
원래 변분추론에서는 데이터 하나마다 따로 q(z)를 최적화해야 한다.
- x1→q1(z)
- x2→q2(z)
- ...
데이터가 수백만 개면 이 방법은 너무 느리다.
VAE는 encoder를 neural network로 두어서:
x↦(μϕ(x),σϕ(x))
즉, x가 입력되면 바로 posterior parameter를 예측한다.
이를 Amortized Inference라 한다.
7-3. Reparameterization Trick (요약)
z∼qϕ(z∣x)=N(μϕ(x),σϕ2(x))에서 샘플링이 필요한데, 샘플링 자체는 미분이 안 된다.
랜덤성을 ϕ와 분리해서 아래처럼 다시 쓰는 것이 핵심이다.
z=μϕ(x)+σϕ(x)⊙ε,ε∼N(0,I)
이 변환 덕분에 μϕ와 σϕ에 대한 gradient가 흐를 수 있게 된다. 자세한 내용은 8절에서 다룬다.
8. Reparameterization Trick
8-1. 왜 필요한가: gradient가 막히는 문제
VAE 학습 목표는 ELBO 최대화다.
(ϕ,θ)=argϕ,θmaxx∈X∑ELBOϕ,θ(x)
이를 위해 ϕ (encoder 파라미터)에 대한 gradient가 필요하다.
∇ϕELBO(x)=∇ϕEqϕ(z∣x)[logpθ(x,z)−logqϕ(z∣x)]
그런데 기댓값의 정의를 적용하면:
Eqϕ(z∣x)[f(z)]=∫f(z)⋅qϕ(z∣x)dz
문제는 샘플링 z∼qϕ(z∣x) 자체가 ϕ에 의존하는 확률적 연산이라는 점이다. 샘플링 노드를 통해서는 gradient가 흐르지 않는다.
계산 그래프로 보면:
φ → q_φ(z|x) → [샘플링] → z → f(z)
↑
여기서 gradient가 막힌다
ϕ를 바꾸면 샘플링 분포 자체가 바뀌기 때문에, 단순히 역전파로 ∇ϕ를 계산할 수 없다.
8-2. 핵심 아이디어: 랜덤성을 분리하자
랜덤성을 ϕ와 분리해서, ϕ에는 결정론적 경로만 남기자.
z∼N(μϕ(x),σϕ2(x)I) 를 직접 샘플링하는 대신:
z=μϕ(x)+σϕ(x)⊙ε,ε∼N(0,I)
로 다시 쓴다. 두 식은 수학적으로 완전히 동일한 분포를 만들어낸다. 그런데 계산 그래프가 달라진다.
Before (gradient 불가):
φ → q_φ(z|x) → [샘플링, 여기서 막힘] → z → f(z)
After (Reparameterization, gradient 가능):
ε ~ N(0,I) → [여기서만 샘플링, φ와 무관]
↓
φ → μ_φ(x), σ_φ(x) → z = μ + σ⊙ε → f(z)
↑
gradient가 여기까지 흐른다
ε은 ϕ와 완전히 독립이므로, ∇ϕ는 결정론적 경로 μϕ,σϕ를 통해 흐를 수 있다.
8-3. 수학적으로 왜 동치인가
z=g(ε,ϕ,x)=μϕ(x)+σϕ(x)⊙ε 로 변수 변환하면, change of variables에 의해:
Eqϕ(z∣x)[f(z)]=∫f(z)⋅qϕ(z∣x)dz
=∫f(g(ε))⋅qϕ(g(ε)∣x)∣∣∣∣∣det∂ε∂g∣∣∣∣∣dε
reparameterization의 조건 qϕ(z∣x)⋅∣∣∣det∂ε∂z∣∣∣=p(ε) 을 이용하면:
=∫f(g(ε))⋅p(ε)dε=Ep(ε)[f(z)]
이로써 기댓값을 qϕ에서 p(ε)으로 옮겼다. 이제 p(ε)은 ϕ와 무관하므로 ∇ϕ를 기댓값 안으로 넣을 수 있다.
∇ϕEqϕ[f(z)]=∇ϕEp(ε)[f(z)]=Ep(ε)[∇ϕf(g(ε,ϕ,x))]
이를 Monte Carlo로 추정하면 (실제 구현):
≈L1l=1∑L∇ϕf(μϕ(x)+σϕ(x)⊙ε(l)),ε(l)∼N(0,I)
이제 backpropagation이 가능해진다.
8-4. 직관적 비유
주사위를 던져서 나온 숫자에 ϕ를 곱하는 함수 f=ϕ⋅z를 생각해보자.
| 방법 | 내용 | gradient 계산 |
|---|
| 직접 샘플링 | z∼Uniform(0,ϕ) | ❌ 불가. ϕ를 바꾸면 샘플링 분포 자체가 바뀜 |
| Reparameterization | ε∼Uniform(0,1), z=ϕ⋅ε | ✅ 가능. dϕdz=ε |
랜덤성(ε)은 고정된 채 ϕ는 결정론적으로 작용하기 때문에, 미분이 가능해진다.
8-5. VAE 학습에서의 최종 형태
encoder의 샘플링:
z(l)=μϕ(x)+σϕ(x)⊙ε(l),ε(l)∼N(0,I)
이를 decoder에 넣어 reconstruction term을 계산하면:
Eqϕ(z∣x)[logpθ(x∣z)]≈−M1m=1∑M2σdec2∥x−fθ(μϕ(x)+σϕ(x)ε(m))∥2
gradient는 fθ→z→μϕ,σϕ→ encoder weights 순서로 역전파된다.
한 줄 요약: 샘플링의 랜덤성(ε)을 ϕ와 분리함으로써, ϕ에 대한 gradient가 결정론적 경로를 통해 흐를 수 있게 만드는 trick이다.
9. 흔한 오해 정정
"VAE는 분포-분포 매핑을 만들기 위한 모델이다" — 이것은 틀렸다
VAE의 목적은:
"분포를 분포로 매핑하고 싶어서"가 아니다.
VAE의 목적은 오직:
logpθ(x)를 최대화하고 싶어서
이다.
그런데 ELBO를 최대화하는 과정에서:
- 같은 x에 대해 여러 z∼q(z∣x)로도 복원이 되도록 학습되고
- KL 항 때문에 모든 q(z∣x)가 prior 근처로 정렬된다
그 결과로 latent 공간이 연속적으로 정돈되는 것이다.
"매핑" 이야기는 원인이 아니라, ELBO 최적화의 결과적 해석이다.
정리: VAE의 흐름 한눈에
진짜 목표θ,ϕmaxlogpθ(x)⟶적분 문제계산 불가⟶실제 최적화θ,ϕmaxELBO
ELBO=ReconstructionEqϕ[logpθ(x∣z)]−RegularizationKL(qϕ(z∣x)∥p(z))
| 구성 | 수학적 역할 | 실질적 효과 |
|---|
| Reconstruction term | logpθ(x) 최대화 기여 | 데이터를 잘 재현 |
| KL term | qϕ≈pθ(z∣x) 보장 | latent 공간 정돈 |
| prior N(0,I) | KL closed form 보장 | 샘플링 가능한 공간 형성 |
| encoder (amortized inference) | posterior 근사를 빠르게 | 모든 x에 대해 z 분포 예측 |
| reparameterization | ∇ϕ 역전파 가능하게 (ε으로 랜덤성 분리) | end-to-end 학습 |
VAE의 출발점은 "latent space를 예쁘게 만들고 싶다"가 아니라,
잠재변수 생성모델의 데이터 우도 logpθ(x)를 최대화하고 싶다는 것이다.
다만 이 우도는 직접 계산하기 어려우므로 ELBO를 도입해 최적화한다.
이때 ELBO 안의 KL 항이 encoder가 만든 posterior를 prior에 맞추도록 강제하고,
그 결과 latent space가 연속적이고 샘플링 가능한 구조로 정돈된다.
즉, latent space의 연속성과 regularity는 VAE의 최초 목적 자체는 아니지만, ELBO 최적화에 내장된 regularization이 의도적으로 유도하는 핵심 성질이다.