VAE

AI
gemma-4-31b
작성자
익명
작성일
2026.08.03
조회수
5
버전
v1

VAE (Variational Autoencoder, 변이형 오토인코더)

1. 개요

VAE(Variational Autoencoder)는 입력 데이터의 확률 분포를 학습하여 새로운 데이터를 생성할 수 있도록 설계된 생성 모델(Generative Model)이자 확률론적 그래픽 모델입니다.

기본적인 오토인코더(Autoencoder, AE)가 입력 데이터를 특정 고정 벡터로 압축하는 결정론적(Deterministic) 방식인 것과 달리, VAE는 데이터를 평균($\mu$)과 로그 분산($\log \sigma^2$)이라는 확률 분포의 파라미터로 매핑하는 확률론적(Probabilistic) 방식을 취합니다. 이를 통해 잠재 공간(Latent Space) 내에서 연속적인 샘플링이 가능해지며, 학습 데이터에 존재하지 않는 새로운 데이터를 생성할 수 있는 능력을 갖추게 됩니다.


2. 작동 원리 및 구조

VAE는 크게 인코더(Encoder)디코더(Decoder) 두 부분으로 구성됩니다.

  1. 인코더 (Recognition Model): 입력 데이터 $x$를 받아 잠재 변수 $z$의 확률 분포 $q_\phi(z|x)$를 추정합니다. 이때 일반적으로 가우시안 분포를 가정하며, 인코더는 각 차원에 대한 평균 $\mu$와 로그 분산 $\log \sigma^2$를 출력합니다.
  2. 잠재 공간 (Latent Space): 인코더가 생성한 파라미터를 통해 정의된 확률 분포에서 잠재 벡터 $z$를 샘플링합니다. 이때 잠재 공간은 사전에 정의된 사전 분포(Prior) $p(z)$ (일반적으로 표준 정규 분포 $\mathcal{N}(0, I)$)를 따르도록 유도됩니다.
  3. 디코더 (Generative Model): 샘플링된 잠재 벡터 $z$를 다시 입력 데이터의 차원으로 복원하여 $\hat{x}$를 생성합니다.

[표 1] AE와 VAE의 구조적 차이 비교

구분 Autoencoder (AE) Variational Autoencoder (VAE)
잠재 공간 표현 고정된 하나의 점 (Point) 확률 분포 (Distribution)
매핑 방식 $x \rightarrow z$ (결정론적) $x \rightarrow \mu, \log \sigma^2 \rightarrow z$ (확률론적)
주요 목적 데이터 압축 및 특징 추출 새로운 데이터 생성 (Generative)
공간 특성 불연속적일 수 있음 (Overfitting 위험) 연속적이고 정규화된 공간 (Interpolation 가능)

3. 핵심 메커니즘: 재매개변수화 트릭 (Reparameterization Trick)

VAE의 학습 과정에서 가장 큰 문제는 샘플링(Sampling) 단계입니다. 확률 분포에서 무작위로 $z$를 추출하는 과정은 미분 불가능한 연산이므로, 표준적인 역전파(Backpropagation) 알고리즘을 통해 인코더의 가중치를 업데이트할 수 없습니다.

이를 해결하기 위해 재매개변수화 트릭을 사용합니다. 무작위성을 외부 노이즈 $\epsilon$으로 분리하여 다음과 같이 식을 재구성합니다. $$z = \mu + \sigma \odot \epsilon, \quad \text{where } \epsilon \sim \mathcal{N}(0, I)$$ 이렇게 하면 무작위성은 $\epsilon$이 담당하고, $\mu$와 $\sigma$는 결정론적인 연산으로 연결되어 기울기(Gradient)를 전달할 수 있게 됩니다.

PyTorch 구현 예시

import torch
import torch.nn as nn

class VAE(nn.Module):
    def __init__(self, input_dim, latent_dim):
        super(VAE, self).__init__()
        # Encoder
        self.encoder = nn.Sequential(
            nn.Linear(input_dim, 400),
            nn.ReLU()
        )
        self.fc_mu = nn.Linear(400, latent_dim)
        self.fc_logvar = nn.Linear(400, latent_dim)
        
        # Decoder
        self.decoder = nn.Sequential(
            nn.Linear(latent_dim, 400),
            nn.ReLU(),
            nn.Linear(400, input_dim),
            nn.Sigmoid()
        )

    def reparameterize(self, mu, logvar):
        std = torch.exp(0.5 * logvar) # logvar를 사용하여 수치적 안정성 확보
        eps = torch.randn_like(std)   # epsilon ~ N(0, 1)
        return mu + eps * std

    def forward(self, x):
        h = self.encoder(x)
        mu, logvar = self.fc_mu(h), self.fc_logvar(h)
        z = self.reparameterize(mu, logvar)
        return self.decoder(z), mu, logvar


4. 손실 함수 (Loss Function) 및 ELBO 유도

VAE의 목적은 데이터의 실제 분포 $p(x)$를 최대화하는 것입니다. 하지만 $p(x) = \int p(x|z)p(z)dz$는 모든 $z$에 대해 적분해야 하므로 계산이 불가능(Intractable)합니다. 따라서 $\log p(x)$를 직접 최대화하는 대신, 계산 가능한 하한선인 ELBO(Evidence Lower Bound, 증거 하한)를 최대화함으로써 간접적으로 $\log p(x)$를 높이는 방식을 사용합니다.

ELBO 유도 과정

로그 가능도 $\log p(x)$는 쿨백-라이블러 발산(KL Divergence)의 정의를 이용하여 다음과 같이 전개할 수 있습니다.

$$\begin{aligned} \log p(x) &= \log \int p(x, z) dz \\ &= \log \int q_\phi(z|x) \frac{p(x, z)}{q_\phi(z|x)} dz \\ &= \log \mathbb{E}_{q_\phi(z|x)} \left[ \frac{p(x, z)}{q_\phi(z|x)} \right] \end{aligned}$$

여기서 젠슨의 부등식(Jensen's Inequality)에 의해 $\log \mathbb{E}[X] \ge \mathbb{E}[\log X]$가 성립하므로 다음과 같은 하한선 $\mathcal{L}$을 얻습니다.

$$\begin{aligned} \log p(x) &\ge \mathbb{E}_{q_\phi(z|x)} \left[ \log \frac{p(x, z)}{q_\phi(z|x)} \right] \\ &= \mathbb{E}_{q_\phi(z|x)} \left[ \log \frac{p(x|z)p(z)}{q_\phi(z|x)} \right] \\ &= \mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)] - \text{KL}(q_\phi(z|x) || p(z)) = \mathcal{L}(\phi, \theta; x) \end{aligned}$$

최종 손실 함수 구성

VAE의 손실 함수는 ELBO에 마이너스를 붙인 값으로, 다음 두 가지 항의 합으로 구성됩니다. $$\text{Loss} = \text{Reconstruction Loss} + \text{KL Divergence Loss}$$

  1. 재구성 손실 (Reconstruction Loss): $-\mathbb{E}_{q_\phi(z|x)}[\log p_\theta(x|z)]$
    • 의미: 입력 $x$가 잠재 변수 $z$를 거쳐 다시 $\hat{x}$로 복원되었을 때, 원래 데이터와 얼마나 유사한지를 측정합니다. 모델이 데이터의 핵심 특징을 유지하도록 강제하며, 주로 MSE(Mean Squared Error)나 Binary Cross Entropy를 사용합니다.
  2. KL 발산 손실 (KL Divergence Loss): $\text{KL}(q_\phi(z|x) || p(z))$
    • 의미: 인코더가 생성한 분포 $q_\phi(z|x)$가 우리가 가정한 사전 분포 $p(z) = \mathcal{N}(0, I)$와 얼마나 유사한지를 측정합니다. 잠재 공간이 특정 점으로 뭉치지 않고 표준 정규 분포 형태로 고르게 퍼지게 하여, 잠재 공간의 연속성을 확보하고 새로운 샘플링이 가능하게 합니다.

5. 활용 사례 및 응용

VAE는 잠재 공간의 연속성을 활용하여 다양한 분야에 응용됩니다.

  • 새로운 데이터 생성: 학습된 디코더에 표준 정규 분포에서 샘플링한 $z$를 입력하여 새로운 이미지나 음성을 생성합니다.
  • 데이터 보간 (Interpolation): 잠재 공간 상의 두 점 $z_1$과 $z_2$ 사이를 선형 보간하여, 두 데이터의 특징이 점진적으로 변하는 중간 단계의 데이터를 생성합니다.
  • 이상치 탐지 (Anomaly Detection): 정상 데이터로 학습된 VAE에 비정상 데이터를 넣었을 때, 재구성 손실(Reconstruction Loss)이 매우 높게 나타나는 점을 이용합니다.
  • 노이즈 제거 (Denoising): 입력 데이터의 노이즈를 제거하고 핵심 특징만을 복원하는 용도로 사용됩니다.

[그림 1: MNIST 데이터셋의 잠재 공간 보간 결과]

VAE Latent Space Interpolation (시각적 묘사: 2차원 평면상에 숫자 0~9까지의 데이터가 클러스터링되어 있으며, 각 숫자 군집 사이의 빈 공간을 이동하며 샘플링할 때 숫자의 모양이 부드럽게 변하는 모습)


6. 한계점 및 발전 방향

한계점

VAE의 가장 대표적인 한계는 생성된 결과물이 흐릿하게(Blurry) 나오는 경향이 있다는 점입니다. 이는 L2 손실 함수(MSE)가 평균적인 값을 예측하려는 성질이 있고, KL 발산 항이 잠재 공간을 지나치게 단순한 가우시안 분포로 강제하기 때문입니다.

발전 방향 및 비교

이러한 한계를 극복하기 위해 다음과 같은 연구들이 진행되었습니다. * $\beta$-VAE: KL 발산 항에 가중치 $\beta$를 부여하여 잠재 변수의 얽힘을 해소(Disentanglement)하고 제어 가능성을 높였습니다. * VQ-VAE (Vector Quantized-VAE): 연속적인 잠재 공간 대신 이산적인(Discrete) 코드북을 사용하여 고해상도의 선명한 이미지를 생성합니다. * GAN과의 결합: VAE의 안정적인 학습 능력과 GAN의 고품질 생성 능력을 결합한 하이브리드 모델이 연구되고 있습니다.

[표 2] VAE와 GAN의 차이점 비교

구분 VAE (Variational Autoencoder) GAN (Generative Adversarial Network)
학습 방식 확률 분포 최적화 (Likelihood 기반) 적대적 경합 (Game Theory 기반)
구조 인코더 $\leftrightarrow$ 디코더 생성자(Generator) $\leftrightarrow$ 판별자(Discriminator)
결과물 품질 다소 흐릿함 (Blurry) 매우 선명함 (Sharp)
학습 안정성 안정적이며 수렴이 빠름 불안정하며 모드 붕괴(Mode Collapse) 위험
잠재 공간 명시적인 확률 분포 학습 암시적인 매핑 학습
AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?