VAE란? 구조부터 ELBO 증명까지 쉽게 이해하기(Variational Autoencoder)

1. Variational Autoencoder (VAE)란?

Variational Autoencoder (VAE)는 Generative Adversarial Network (GAN), Diffusion Model과 함께 대표적인 생성 모델(generative model) 중 하나입니다. VAE는 데이터를 생성하는 모델로서, 데이터가 가진 근본적인 확률 분포를 학습하고 새로운 데이터를 생성하는 것을 목표로 합니다. 특히 VAE는 기존의 Autoencoder와 유사한 구조를 갖추고 있지만, latent space에서의 잠재 벡터(z)를 확률적으로 접근함으로써 의미 있는 데이터 생성을 가능하게 합니다.

2. VAE의 구조

이 이미지는 변분 오토인코더(VAE, Variational Autoencoder)의 아키텍처를 나타낸다. 입력 이미지 \( x \)는 인코더 \( q_{\phi}(z | x) \)를 거쳐 평균 \( \mu_{z|x} \)와 표준 편차 \( \Sigma_{z|x} \)를 얻는다. 이를 통해 잠재 변수 \( z \)가 샘플링되며, 디코더 \( p_{\theta}(x | z) \)를 통해 재구성된 이미지 \( \hat{x} \)가 생성된다. 전체 모델은 재구성 손실과 KL 발산을 포함한 손실 함수를 통해 학습된다.
VAE 구조 (source)

VAE는 크게 세 가지 핵심 구성 요소로 나눌 수 있습니다.

구성 요소 역할 확률적 표현
Encoder 입력 데이터를 잠재공간(latent space)으로 변환 근사 분포 \( q(z|x) \)
Latent Space 데이터의 본질적 정보를 담고 있는 숨겨진 벡터 공간 prior 분포 \( p(z) \)
Decoder 잠재 공간에서 원본 데이터 형태로 데이터를 복원하거나 새 데이터를 생성 조건부 분포 \( p(x|z) \)

Encoder

Encoder는 입력 데이터 \( x \)를 받아 잠재 공간(latent space)의 잠재 벡터 \( z \)로 변환합니다. Autoencoder와 달리 VAE는 deterministic한 벡터가 아닌 확률 분포로 표현된 잠재 벡터를 생성합니다. 이 잠재 벡터의 분포를 posterior(사후분포)라고 하며, \( q(z|x) \)로 나타냅니다. 일반적으로 posterior는 정규분포로 근사하며, 평균(\( \mu \))과 분산(\( \sigma^2 \))을 encoder가 학습하게 됩니다.

Latent Space

Latent space는 Encoder가 입력 데이터를 변환하여 만들어진 숨겨진 공간입니다. 이 공간에서 데이터를 표현하는 latent vector \( z \)는 실제 데이터와 유사성을 갖추면서도 noise를 포함하여 데이터를 생성할 수 있는 확률적 특성을 갖추고 있습니다. 이때 noise를 통한 샘플링이 핵심이며, 이는 reparameterization trick이라는 기법을 통해 수행됩니다.

Reparameterization Trick

  • 표준 정규분포 \( \epsilon \sim N(0,1) \)에서 샘플링
  • Encoder에서 학습된 \( \mu, \sigma \)를 이용하여 \( z = \mu + \sigma \epsilon \) 형태로 latent vector를 생성

Decoder

Decoder는 잠재 공간의 잠재 벡터 \( z \)를 원본 데이터 \( x \) 형태로 복원하거나, 새로운 데이터를 생성합니다. Decoder는 latent space로부터 실제 데이터의 분포 \( p(x|z) \)를 학습하여 generative 모델의 역할을 수행합니다. 이 과정은 latent space에서 샘플링된 잠재 벡터를 바탕으로 이루어지며, 학습된 decoder를 이용해 데이터 생성을 진행합니다.

3. VAE의 학습 방법 및 ELBO 증명 과정

VAE는 기본적으로 Maximum Likelihood Estimation(MLE, 최대 가능도 추정)을 기반으로 합니다. 즉, 데이터 \( x \)의 참 분포 \( p(x) \)를 근사하는 분포 \( p_\theta(x) \)를 최대화하는 것이 목적입니다. 이를 수식으로 나타내면:

\[ \log p_\theta(x) = \log \int p_\theta(x|z)p(z) dz \]

그러나 이 식은 직접 계산이 어렵기 때문에, VAE에서는 이를 Evidence Lower Bound (ELBO)라는 하한식으로 변형하여 최대화합니다.


3.1 수식의 전개 과정 (변분 추론)

우리가 최종적으로 유도하고자 하는 목적은 데이터의 로그 우도 \(\log p_{\theta}(x)\)를 변분 분포 \(q_{\phi}(z|x)\)를 활용하여 변형하는 것입니다.

(1단계) 변분 분포의 도입

먼저, 임의의 변분 분포 \(q_{\phi}(z|x)\)를 도입하여 적분형태로 표현합니다.

\[ \log p_{\theta}(x) = \int q_{\phi}(z|x)\log p_{\theta}(x)\,dz \]

설명:

  • 이때, \(\int q_{\phi}(z|x)\,dz = 1\) 이므로 위의 식은 성립합니다.

(2단계) 조건부 확률을 이용한 확장

조건부 확률과 사전 확률을 곱한 형태로 전개합니다. (Bayes 정리 이용)

\[ = \int q_{\phi}(z|x)\log \frac{p_{\theta}(x|z)p(z)}{p_{\theta}(z|x)}\,dz \]

설명:

  • Bayes 정리: \[ p_{\theta}(x) = \frac{p_{\theta}(x|z)p(z)}{p_{\theta}(z|x)} \]

(3단계) 변분 분포 항을 추가하여 KL divergence 형태 준비

위 식에 변분 분포 \(q_{\phi}(z|x)\)를 곱하고 나누어도 값은 변하지 않으므로 이를 추가합니다.

\[ = \int q_{\phi}(z|x)\log \frac{p_{\theta}(x|z)p(z)}{p_{\theta}(z|x)}\frac{q_{\phi}(z|x)}{q_{\phi}(z|x)}\,dz \]

설명:

  • 동일 항을 분자와 분모에 곱하여 KL divergence 형태로 정리할 준비를 합니다.

(4단계) KL divergence 형태로 분리하여 표현

마지막으로 위의 식을 KL divergence의 정의를 사용하여 명확히 분해합니다.

\[ = \int q_{\phi}(z|x)\log p_{\theta}(x|z)\,dz - KL\left(q_{\phi}(z|x)||p(z)\right) + KL\left(q_{\phi}(z|x)||p_{\theta}(z|x)\right) \]


3.2 최종 수식과 ELBO의 최종 도출

지금까지의 과정을 통해 다음과 같은 중요한 식을 얻었습니다.

\[ \log p_{\theta}(x) = \int q_{\phi}(z|x)\log p_{\theta}(x|z)\,dz - KL\left(q_{\phi}(z|x)||p(z)\right) + KL\left(q_{\phi}(z|x)||p_{\theta}(z|x)\right) \]

이제 이 식에서 나타나는 세 가지 항을 하나씩 정확하게 살펴보겠습니다.

첫 번째 항 (재구성 오차, Reconstruction Error)

첫 번째 항은 데이터 \( x \)를 encoder \( q_{\phi}(z|x) \)를 통해 얻은 잠재변수 \( z \)를 이용하여 decoder \( p_{\theta}(x|z) \)가 얼마나 잘 복원하는지를 나타내는 항입니다.

\[ \int q_{\phi}(z|x)\log p_{\theta}(x|z)\,dz \]

  • 이 값이 클수록 모델이 데이터를 잘 재구성한다는 뜻입니다.
  • 실제 구현에서는 encoder에서 얻은 분포에서 샘플링한 잠재변수 \( z \)를 decoder에 입력하여 쉽게 계산할 수 있습니다.

두 번째 항 (정규화 항, Regularization Error)

두 번째 항은 encoder로 얻은 분포 \( q_{\phi}(z|x) \)가 우리가 미리 정한 잠재변수의 사전 분포 \( p(z) \)로부터 얼마나 멀어졌는지 나타내는 항입니다.

\[ - KL\left(q_{\phi}(z|x)||p(z)\right) \]

  • 이 값이 작을수록 encoder가 만들어낸 잠재분포가 사전 분포에 가깝다는 의미이며, 결과적으로 잠재공간이 지나치게 복잡해지지 않도록 정규화 역할을 합니다.
  • 보통 \(q_{\phi}(z|x)\)와 \(p(z)\)를 정규분포로 가정하여 쉽게 계산 가능합니다.

세 번째 항 (계산 불가능한 항)

세 번째 항은 encoder가 생성한 분포 \( q_{\phi}(z|x) \)와 우리가 알 수 없는 진짜 사후분포 \( p_{\theta}(z|x) \) 사이의 거리를 나타냅니다.

\[ KL\left(q_{\phi}(z|x)||p_{\theta}(z|x)\right) \]

  • 이 항은 직접 계산할 수 없습니다. 왜냐하면 \(p_{\theta}(z|x)\)는 우리가 실제로 알 수 없기 때문입니다.
  • 하지만 KL divergence의 정의에 따라, 이 항은 항상 다음의 조건을 만족합니다.

\[ KL\left(q_{\phi}(z|x)||p_{\theta}(z|x)\right) \geq 0 \]

첨언: KL divergence는 언제나 0 이상(두 분포가 완벽히 같을 때만 정확히 0)을 가지므로, 이 항을 무시하면 원래의 값보다 작거나 같은 하한을 얻을 수 있습니다.


🔹 KL Divergence의 성질을 활용한 하한(ELBO)의 정의

이제 KL divergence의 성질(\(\geq 0\))을 이용하면 다음과 같은 부등식이 성립합니다.

\[ \log p_{\theta}(x) \geq \int q_{\phi}(z|x)\log p_{\theta}(x|z)\,dz - KL\left(q_{\phi}(z|x)||p(z)\right) \]

  • 위 부등식에서 우변을 증거 하한(Evidence Lower Bound, ELBO)이라고 부릅니다.
  • ELBO는 실제로 계산 가능하고 최적화할 수 있는 목적함수가 됩니다.

4. ELBO 최종 요약

즉, 최종 목적함수는 아래와 같습니다.

\[ \boxed{ \text{ELBO} = \int q_{\phi}(z|x)\log p_{\theta}(x|z)\,dz - KL\left(q_{\phi}(z|x)||p(z)\right) } \]

이 ELBO를 최대화하면:

  • 모델이 데이터를 더 잘 복원하고,
  • 잠재변수 공간이 적절히 정규화되어 더 안정적인 표현을 학습할 수 있게 됩니다.

이것이 변분 오토인코더(VAE)가 데이터를 효과적으로 학습하는 핵심 원리입니다.

5. VAE의 데이터 생성 과정

잠재 변수(z)가 디코더를 거쳐 재구성된 출력(x̂)을 생성하는 과정의 원형 플로우 다이어그램입니다.

학습이 완료된 후 데이터 생성은 간단한 과정을 따릅니다.

단계 설명
1 prior 분포 (보통 표준정규분포)에서 잠재 벡터 \( z \)를 샘플링
2 샘플링된 \( z \)를 Decoder의 입력으로 사용
3 Decoder가 잠재 벡터 \( z \)로부터 새로운 데이터 \( \hat{x} \)를 생성

이 과정을 통해 학습된 VAE가 새로운 데이터를 만들어 낼 수 있으며, 이는 생성 모델로서 VAE가 갖는 핵심 능력입니다.

마치며

Variational Autoencoder는 구조적 단순성과 뛰어난 확장성 덕분에 다양한 generative 모델링 분야에서 널리 활용되고 있습니다. VAE의 핵심은 확률론적 latent space와 ELBO 기반의 최적화를 통해 데이터의 본질적인 패턴을 학습하고 새로운 데이터를 창의적으로 생성하는 데 있습니다.