VAE 정리내용

구름하늘행복·2026년 2월 28일

AI

목록 보기
1/2

VAE 정리 — 왜 이런 구조인가?

개인적으로 학습하며 정리한 내용입니다.


목차

  1. VAE의 출발점: 우리가 진짜 하고 싶은 것
  2. 잠재변수 모델과 p(x)의 문제
  3. 변분추론이란 무엇인가
  4. ELBO의 등장
  5. ELBO의 구조 분석
  6. Prior의 역할: 왜 N(0, I)를 쓰는가
  7. VAE 전체 구조 정리
  8. Reparameterization Trick: 왜 필요하고 어떻게 동작하는가
  9. 흔한 오해 정정: VAE는 분포-분포 매핑 모델인가?

1. VAE의 출발점

VAE를 처음 접하면 흔히 이런 설명을 듣는다.

"AE는 점-점 매핑이고, VAE는 분포-분포 매핑이라서 latent 공간이 정돈된다."

그런데 이것은 결과에 대한 직관일 뿐, VAE가 이 구조를 갖게 된 근본적인 이유가 아니다.

VAE의 출발점은 딱 하나다.

데이터 분포를 잘 모델링하는 생성모델을 만들고 싶다.

즉, 모델이 만들어내는 데이터 확률 pθ(x)p_\theta(x)를 실제 데이터처럼 만들고 싶은 것이다.


2. 잠재변수 모델과 p(x)의 문제

잠재변수 모델을 아래와 같이 세운다고 하자.

zp(z)z \sim p(z)
xpθ(xz)x \sim p_\theta(x \mid z)

그러면 모델이 만들어내는 데이터 확률은 다음과 같다.

pθ(x)=pθ(xz)p(z)dzp_\theta(x) = \int p_\theta(x \mid z) \, p(z) \, dz

이 모델을 학습하는 가장 표준적인 방법은 Maximum Likelihood Estimation (MLE)이다.

maxθilogpθ(x(i))\max_\theta \sum_i \log p_\theta(x^{(i)})

데이터가 모델에서 높은 확률로 나오게 만들자.

여기까지는 VAE 이전의, 잠재변수 생성모델의 기본 목표다.

문제: 이 적분이 계산이 불가능하다

pθ(x)=pθ(xz)p(z)dzp_\theta(x) = \int p_\theta(x \mid z) \, p(z) \, dz

고차원 zz에서 이 적분은 closed form이 없고, 샘플링으로 추정하려 해도 분산이 너무 커서 사실상 계산이 막힌다.

즉:

  • 최대화하고 싶은 것: logpθ(x)\log p_\theta(x)
  • 그런데 이걸 직접 계산하거나 미분하기 어렵다

그래서 우회가 필요하다.


3. 변분추론이란 무엇인가

우회를 이해하기 위해, 먼저 변분추론(Variational Inference) 자체를 정리하자.

3-1. 우리가 알고 싶은 것: posterior

어떤 관측 데이터 xx가 주어졌을 때,

pθ(zx)p_\theta(z \mid x)

를 알고 싶다.

"이 데이터가 어떤 latent에서 나왔을까?"

예를 들어:

  • xx: 흐릿한 고양이 사진
  • zz: 진짜 고양이의 자세, 조명, 배경 같은 숨은 요인

pθ(zx)p_\theta(z \mid x)는 "이 사진을 만들었을 법한 latent 상태들의 분포"다.

3-2. 왜 posterior를 직접 못 구하나

베이즈 공식을 쓰면:

pθ(zx)=pθ(xz)p(z)pθ(x)p_\theta(z \mid x) = \frac{p_\theta(x \mid z) \, p(z)}{p_\theta(x)}

분자는 계산 가능하다.

문제는 분모인 pθ(x)=pθ(xz)p(z)dzp_\theta(x) = \int p_\theta(x \mid z) \, p(z) \, dz 가 계산이 어렵다는 것이다.

그 결과 pθ(zx)p_\theta(z \mid x)도 막혀버린다.

3-3. 발상: 비슷한 쉬운 분포로 대신하자

진짜 posterior를 직접 구하는 대신, 다루기 쉬운 근사 분포를 하나 만들자.

qϕ(zx)q_\phi(z \mid x)

예를 들어:

qϕ(zx)=N ⁣(μϕ(x),  diag(σϕ2(x)))q_\phi(z \mid x) = \mathcal{N}\!\left(\mu_\phi(x),\; \mathrm{diag}(\sigma_\phi^2(x))\right)

처럼 Gaussian family 안에서 찾겠다고 제한한다.

3-4. 변분추론의 핵심 목표

qϕ(zx)pθ(zx)q_\phi(z \mid x) \approx p_\theta(z \mid x)

이것이 변분추론의 본질이다.

3-5. "비슷하다"를 어떻게 측정하나: KL divergence

minϕ  KL ⁣(qϕ(zx)pθ(zx))\min_\phi \; \mathrm{KL}\!\left(q_\phi(z \mid x) \,\|\, p_\theta(z \mid x)\right)

이것이 변분추론의 핵심 최적화 목표다.

3-6. 그런데 이 KL도 직접 계산이 안 된다

KL 식 안에 pθ(zx)p_\theta(z \mid x)가 들어가는데, 이것을 모르기 때문에 또다시 막힌다.

그래서 한 번 더 우회가 필요하다. 이것이 ELBO다.


4. ELBO의 등장

4-1. 핵심 등식

임의의 분포 qϕ(zx)q_\phi(z \mid x)를 도입하면 다음 등식이 성립한다.

logpθ(x)=Eqϕ(zx) ⁣[logpθ(x,z)qϕ(zx)]ELBO(ϕ,θ)+KL ⁣(qϕ(zx)pθ(zx))\log p_\theta(x) = \underbrace{\mathbb{E}_{q_\phi(z \mid x)}\!\left[\log \frac{p_\theta(x, z)}{q_\phi(z \mid x)}\right]}_{\text{ELBO}(\phi, \theta)} + \mathrm{KL}\!\left(q_\phi(z \mid x) \,\|\, p_\theta(z \mid x)\right)

4-2. 왜 ELBO가 lower bound인가

KL divergence는 항상 0 이상이므로:

KL ⁣(qϕ(zx)pθ(zx))0\mathrm{KL}\!\left(q_\phi(z \mid x) \,\|\, p_\theta(z \mid x)\right) \geq 0

따라서:

ELBO(ϕ,θ)logpθ(x)\text{ELBO}(\phi, \theta) \leq \log p_\theta(x)

그리고:

logpθ(x)ELBO(ϕ,θ)=KL ⁣(qϕ(zx)pθ(zx))\log p_\theta(x) - \text{ELBO}(\phi, \theta) = \mathrm{KL}\!\left(q_\phi(z \mid x) \,\|\, p_\theta(z \mid x)\right)

4-3. 왜 ELBO를 최대화하면 되는가

logpθ(x)\log p_\theta(x)ϕ\phi에 대해 상수다 (즉, qq를 바꿔도 logp(x)\log p(x)는 안 변한다).

따라서:

ELBO를 크게 만들수록    KL ⁣(qpθ(zx))이 작아진다\text{ELBO를 크게 만들수록} \;\Leftrightarrow\; \mathrm{KL}\!\left(q \,\|\, p_\theta(z|x)\right) \text{이 작아진다}

즉:

  • KL을 직접 최소화하고 싶지만 pθ(zx)p_\theta(z \mid x)를 모른다
  • 대신 ELBO를 최대화하면, 동치 관계에 의해 자동으로 KL이 줄어든다

이것이 ELBO를 최적화하는 핵심 이유다.


5. ELBO의 구조 분석

ELBO를 전개하면 두 항으로 나뉜다.

ELBO(ϕ,θ)=Eqϕ(zx) ⁣[logpθ(xz)]Reconstruction termKL ⁣(qϕ(zx)p(z))Regularization term\text{ELBO}(\phi, \theta) = \underbrace{\mathbb{E}_{q_\phi(z \mid x)}\!\left[\log p_\theta(x \mid z)\right]}_{\text{Reconstruction term}} - \underbrace{\mathrm{KL}\!\left(q_\phi(z \mid x) \,\|\, p(z)\right)}_{\text{Regularization term}}

각 항의 의미

의미
Reconstruction termencoder가 준 zz로 decoder가 xx를 얼마나 잘 재현하는가
KL termencoder가 만든 posterior가 prior p(z)p(z)와 얼마나 비슷한가

이것이 우리가 흔히 말하는 reconstruction loss + KL regularization의 수학적 근거다.

KL term은 closed form으로 계산된다

qϕ(zx)=N(μ,σ2I)q_\phi(z \mid x) = \mathcal{N}(\mu, \sigma^2 I)이고 p(z)=N(0,I)p(z) = \mathcal{N}(0, I)이면:

KL ⁣(qϕ(zx)p(z))=12j=1d ⁣(1+logσj2μj2σj2)\mathrm{KL}\!\left(q_\phi(z \mid x) \,\|\, p(z)\right) = -\frac{1}{2} \sum_{j=1}^{d}\!\left(1 + \log \sigma_j^2 - \mu_j^2 - \sigma_j^2\right)

샘플링이나 추정 오차 없이 정확하게 계산된다. 이것이 학습을 매우 안정적으로 만든다.


6. Prior의 역할

6-1. Prior는 "현실의 잠재요인 분포"가 아니다

VAE의 prior p(z)=N(0,I)p(z) = \mathcal{N}(0, I)는:

"현실에서 zz가 정말 정규분포를 따른다"는 주장이 아니다.

정확히는:

"표준정규라는 편한 좌표계를 출발점으로 정해두고, decoder가 그 좌표계를 실제 데이터에 맞게 비선형 변환해준다."

즉:

  • prior → 샘플링 가능한 기준 좌표계
  • decoder → 그 좌표계를 현실 데이터 공간으로 매핑하는 비선형 변환

6-2. 표준정규를 prior로 쓰는 세 가지 이유

① 실용적 이유: 샘플링이 쉽다

zN(0,I)z \sim \mathcal{N}(0, I)

임의의 zz를 뽑아 decoder에 넣으면 새로운 데이터를 생성할 수 있다.

② 수학적 이유: KL이 closed form으로 계산된다

encoder를 Gaussian으로 두면, KL(qϕN(0,I))\mathrm{KL}(q_\phi \| \mathcal{N}(0, I))가 위 식처럼 해석적으로 계산된다.

③ 기하학적 이유: latent 공간이 연결된다 (manifold 관점)

prior 없이 AE처럼 학습하면:

  • latent가 데이터 포인트 주변에 제멋대로 흩어짐
  • 사이 공간이 "비어있는 구멍(hole)"이 됨
  • 임의의 zz를 샘플링하면 이상한 xx가 나옴

KL term이 모든 qϕ(zx)q_\phi(z \mid x)N(0,I)\mathcal{N}(0, I) 근처로 당겨주기 때문에:

  • latent 공간이 하나의 덩어리로 묶임
  • 어떤 zz를 뽑아도 그럴듯한 xx가 나옴
  • 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θ(xz)p_\theta(x \mid z)생성 모델. zz가 주어지면 xx를 생성
encoder qϕ(zx)q_\phi(z \mid x)posterior 근사. xx가 주어지면 zz의 분포를 예측
변분추론qϕ(zx)q_\phi(z \mid x)pθ(zx)p_\theta(z \mid x)에 가까워지도록 학습

7-2. Amortized Inference

원래 변분추론에서는 데이터 하나마다 따로 q(z)q(z)를 최적화해야 한다.

  • x1    q1(z)x_1 \;\rightarrow\; q_1(z)
  • x2    q2(z)x_2 \;\rightarrow\; q_2(z)
  • ...

데이터가 수백만 개면 이 방법은 너무 느리다.

VAE는 encoder를 neural network로 두어서:

x    (μϕ(x),  σϕ(x))x \;\mapsto\; \left(\mu_\phi(x),\; \sigma_\phi(x)\right)

즉, xx가 입력되면 바로 posterior parameter를 예측한다.

이를 Amortized Inference라 한다.

7-3. Reparameterization Trick (요약)

zqϕ(zx)=N(μϕ(x),σϕ2(x))z \sim q_\phi(z \mid x) = \mathcal{N}(\mu_\phi(x), \sigma_\phi^2(x))에서 샘플링이 필요한데, 샘플링 자체는 미분이 안 된다.

랜덤성을 ϕ\phi와 분리해서 아래처럼 다시 쓰는 것이 핵심이다.

z=μϕ(x)+σϕ(x)ε,εN(0,I)z = \mu_\phi(x) + \sigma_\phi(x) \odot \varepsilon, \quad \varepsilon \sim \mathcal{N}(0, I)

이 변환 덕분에 μϕ\mu_\phiσϕ\sigma_\phi에 대한 gradient가 흐를 수 있게 된다. 자세한 내용은 8절에서 다룬다.


8. Reparameterization Trick

8-1. 왜 필요한가: gradient가 막히는 문제

VAE 학습 목표는 ELBO 최대화다.

(ϕ,θ)=argmaxϕ,θxXELBOϕ,θ(x)(\phi, \theta) = \arg\max_{\phi,\theta} \sum_{\mathbf{x} \in \mathcal{X}} \text{ELBO}_{\phi,\theta}(\mathbf{x})

이를 위해 ϕ\phi (encoder 파라미터)에 대한 gradient가 필요하다.

ϕELBO(x)=ϕEqϕ(zx)[logpθ(x,z)logqϕ(zx)]\nabla_\phi \, \text{ELBO}(\mathbf{x}) = \nabla_\phi \, \mathbb{E}_{q_\phi(\mathbf{z}|\mathbf{x})} \left[ \log p_\theta(\mathbf{x}, \mathbf{z}) - \log q_\phi(\mathbf{z}|\mathbf{x}) \right]

그런데 기댓값의 정의를 적용하면:

Eqϕ(zx)[f(z)]=f(z)qϕ(zx)dz\mathbb{E}_{q_\phi(\mathbf{z}|\mathbf{x})}[f(\mathbf{z})] = \int f(\mathbf{z}) \cdot q_\phi(\mathbf{z}|\mathbf{x}) \, d\mathbf{z}

문제는 샘플링 zqϕ(zx)\mathbf{z} \sim q_\phi(\mathbf{z}|\mathbf{x}) 자체가 ϕ\phi에 의존하는 확률적 연산이라는 점이다. 샘플링 노드를 통해서는 gradient가 흐르지 않는다.

계산 그래프로 보면:

φ → q_φ(z|x) → [샘플링] → z → f(z)
                    ↑
           여기서 gradient가 막힌다

ϕ\phi를 바꾸면 샘플링 분포 자체가 바뀌기 때문에, 단순히 역전파로 ϕ\nabla_\phi를 계산할 수 없다.

8-2. 핵심 아이디어: 랜덤성을 분리하자

랜덤성을 ϕ\phi와 분리해서, ϕ\phi에는 결정론적 경로만 남기자.

zN(μϕ(x),σϕ2(x)I)\mathbf{z} \sim \mathcal{N}(\mu_\phi(\mathbf{x}), \sigma_\phi^2(\mathbf{x})\mathbf{I}) 를 직접 샘플링하는 대신:

z=μϕ(x)+σϕ(x)ε,εN(0,I)\mathbf{z} = \mu_\phi(\mathbf{x}) + \sigma_\phi(\mathbf{x}) \odot \varepsilon, \qquad \varepsilon \sim \mathcal{N}(0, \mathbf{I})

로 다시 쓴다. 두 식은 수학적으로 완전히 동일한 분포를 만들어낸다. 그런데 계산 그래프가 달라진다.

Before (gradient 불가):

φ → q_φ(z|x) → [샘플링, 여기서 막힘] → z → f(z)

After (Reparameterization, gradient 가능):

ε ~ N(0,I) → [여기서만 샘플링, φ와 무관]
                     ↓
φ → μ_φ(x), σ_φ(x) → z = μ + σ⊙ε → f(z)
         ↑
  gradient가 여기까지 흐른다

ε\varepsilonϕ\phi와 완전히 독립이므로, ϕ\nabla_\phi는 결정론적 경로 μϕ,σϕ\mu_\phi, \sigma_\phi를 통해 흐를 수 있다.

8-3. 수학적으로 왜 동치인가

z=g(ε,ϕ,x)=μϕ(x)+σϕ(x)ε\mathbf{z} = g(\varepsilon, \phi, \mathbf{x}) = \mu_\phi(\mathbf{x}) + \sigma_\phi(\mathbf{x}) \odot \varepsilon 로 변수 변환하면, change of variables에 의해:

Eqϕ(zx)[f(z)]=f(z)qϕ(zx)dz\mathbb{E}_{q_\phi(\mathbf{z}|\mathbf{x})}[f(\mathbf{z})] = \int f(\mathbf{z}) \cdot q_\phi(\mathbf{z}|\mathbf{x}) \, d\mathbf{z}
=f(g(ε))qϕ(g(ε)x)detgεdε= \int f(g(\varepsilon)) \cdot q_\phi(g(\varepsilon)|\mathbf{x}) \left|\det\frac{\partial g}{\partial \varepsilon}\right| d\varepsilon

reparameterization의 조건 qϕ(zx)detzε=p(ε)q_\phi(\mathbf{z}|\mathbf{x}) \cdot \left|\det\frac{\partial \mathbf{z}}{\partial \varepsilon}\right| = p(\varepsilon) 을 이용하면:

=f(g(ε))p(ε)dε=Ep(ε)[f(z)]= \int f(g(\varepsilon)) \cdot p(\varepsilon) \, d\varepsilon = \mathbb{E}_{p(\varepsilon)}[f(\mathbf{z})]

이로써 기댓값을 qϕq_\phi에서 p(ε)p(\varepsilon)으로 옮겼다. 이제 p(ε)p(\varepsilon)ϕ\phi와 무관하므로 ϕ\nabla_\phi를 기댓값 안으로 넣을 수 있다.

ϕEqϕ[f(z)]=ϕEp(ε)[f(z)]=Ep(ε) ⁣[ϕf(g(ε,ϕ,x))]\nabla_\phi \, \mathbb{E}_{q_\phi}[f(\mathbf{z})] = \nabla_\phi \, \mathbb{E}_{p(\varepsilon)}[f(\mathbf{z})] = \mathbb{E}_{p(\varepsilon)}\!\left[\nabla_\phi f(g(\varepsilon, \phi, \mathbf{x}))\right]

이를 Monte Carlo로 추정하면 (실제 구현):

1Ll=1Lϕf ⁣(μϕ(x)+σϕ(x)ε(l)),ε(l)N(0,I)\approx \frac{1}{L} \sum_{l=1}^{L} \nabla_\phi f\!\left(\mu_\phi(\mathbf{x}) + \sigma_\phi(\mathbf{x}) \odot \varepsilon^{(l)}\right), \qquad \varepsilon^{(l)} \sim \mathcal{N}(0, \mathbf{I})

이제 backpropagation이 가능해진다.

8-4. 직관적 비유

주사위를 던져서 나온 숫자에 ϕ\phi를 곱하는 함수 f=ϕzf = \phi \cdot z를 생각해보자.

방법내용gradient 계산
직접 샘플링zUniform(0,ϕ)z \sim \text{Uniform}(0, \phi)❌ 불가. ϕ\phi를 바꾸면 샘플링 분포 자체가 바뀜
ReparameterizationεUniform(0,1)\varepsilon \sim \text{Uniform}(0,1), z=ϕεz = \phi \cdot \varepsilon✅ 가능. dzdϕ=ε\frac{dz}{d\phi} = \varepsilon

랜덤성(ε\varepsilon)은 고정된 채 ϕ\phi는 결정론적으로 작용하기 때문에, 미분이 가능해진다.

8-5. VAE 학습에서의 최종 형태

encoder의 샘플링:

z(l)=μϕ(x)+σϕ(x)ε(l),ε(l)N(0,I)\mathbf{z}^{(l)} = \mu_\phi(\mathbf{x}) + \sigma_\phi(\mathbf{x}) \odot \varepsilon^{(l)}, \qquad \varepsilon^{(l)} \sim \mathcal{N}(0, \mathbf{I})

이를 decoder에 넣어 reconstruction term을 계산하면:

Eqϕ(zx)[logpθ(xz)]1Mm=1Mxfθ(μϕ(x)+σϕ(x)ε(m))22σdec2\mathbb{E}_{q_\phi(\mathbf{z}|\mathbf{x})}[\log p_\theta(\mathbf{x}|\mathbf{z})] \approx -\frac{1}{M}\sum_{m=1}^{M} \frac{\|\mathbf{x} - f_\theta(\mu_\phi(\mathbf{x}) + \sigma_\phi(\mathbf{x})\varepsilon^{(m)})\|^2}{2\sigma^2_{\text{dec}}}

gradient는 fθ    z    μϕ,σϕ    f_\theta \;\rightarrow\; \mathbf{z} \;\rightarrow\; \mu_\phi, \sigma_\phi \;\rightarrow\; encoder weights 순서로 역전파된다.

한 줄 요약: 샘플링의 랜덤성(ε\varepsilon)을 ϕ\phi와 분리함으로써, ϕ\phi에 대한 gradient가 결정론적 경로를 통해 흐를 수 있게 만드는 trick이다.


9. 흔한 오해 정정

"VAE는 분포-분포 매핑을 만들기 위한 모델이다" — 이것은 틀렸다

VAE의 목적은:

"분포를 분포로 매핑하고 싶어서"가 아니다.

VAE의 목적은 오직:

logpθ(x)를 최대화하고 싶어서\log p_\theta(x) \text{를 최대화하고 싶어서}

이다.

그런데 ELBO를 최대화하는 과정에서:

  • 같은 xx에 대해 여러 zq(zx)z \sim q(z \mid x)로도 복원이 되도록 학습되고
  • KL 항 때문에 모든 q(zx)q(z \mid x)가 prior 근처로 정렬된다

결과로 latent 공간이 연속적으로 정돈되는 것이다.

"매핑" 이야기는 원인이 아니라, ELBO 최적화의 결과적 해석이다.


정리: VAE의 흐름 한눈에

maxθ,ϕ  logpθ(x)진짜 목표    계산 불가적분 문제    maxθ,ϕ  ELBO실제 최적화\underbrace{\max_{\theta, \phi} \; \log p_\theta(x)}_{\text{진짜 목표}} \;\longrightarrow\; \underbrace{\text{계산 불가}}_{\text{적분 문제}} \;\longrightarrow\; \underbrace{\max_{\theta, \phi} \; \text{ELBO}}_{\text{실제 최적화}}
ELBO=Eqϕ ⁣[logpθ(xz)]ReconstructionKL ⁣(qϕ(zx)p(z))Regularization\text{ELBO} = \underbrace{\mathbb{E}_{q_\phi}\!\left[\log p_\theta(x \mid z)\right]}_{\text{Reconstruction}} - \underbrace{\mathrm{KL}\!\left(q_\phi(z \mid x) \,\|\, p(z)\right)}_{\text{Regularization}}
구성수학적 역할실질적 효과
Reconstruction termlogpθ(x)\log p_\theta(x) 최대화 기여데이터를 잘 재현
KL termqϕpθ(zx)q_\phi \approx p_\theta(z \mid x) 보장latent 공간 정돈
prior N(0,I)\mathcal{N}(0, I)KL closed form 보장샘플링 가능한 공간 형성
encoder (amortized inference)posterior 근사를 빠르게모든 xx에 대해 zz 분포 예측
reparameterizationϕ\nabla_\phi 역전파 가능하게 (ε\varepsilon으로 랜덤성 분리)end-to-end 학습

VAE의 출발점은 "latent space를 예쁘게 만들고 싶다"가 아니라,
잠재변수 생성모델의 데이터 우도 logpθ(x)\log p_\theta(x)를 최대화하고 싶다는 것이다.

다만 이 우도는 직접 계산하기 어려우므로 ELBO를 도입해 최적화한다.
이때 ELBO 안의 KL 항이 encoder가 만든 posterior를 prior에 맞추도록 강제하고,
그 결과 latent space가 연속적이고 샘플링 가능한 구조로 정돈된다.

즉, latent space의 연속성과 regularity는 VAE의 최초 목적 자체는 아니지만, ELBO 최적화에 내장된 regularization이 의도적으로 유도하는 핵심 성질이다.

profile
data scientist

0개의 댓글