VAE의 직관적 이해

nalimeitb·2025년 10월 18일

기본 아이디어: Autoencoder에서 출발

기존 Autoencoder(AE)는 다음과 같은 구조를 가진다

Encoder: 입력 데이터를 압축해 latent vector(잠재 벡터)로 바꾸는 신경망
Decoder: 그 latent vector를 다시 원본 형태로 복원하는 신경망

즉,
AE는 “입력 X → 잠재공간 Z → 복원된 X̂” 과정을 학습하면서
입력 데이터를 잘 재구성할 수 있는 인코딩 방식을 배우는 모델이다.

문제점: 단순한 AE의 latent space는 “의미 없는 공간”이다

AE가 학습은 잘 되지만,
학습 후의 latent vector 공간(Z-space)은 단순히 “입력 데이터를 압축한 좌표값”일 뿐이야.

그래서 만약 우리가 학습된 decoder에 아무 숫자(랜덤한 latent vector)를 넣으면?

거의 대부분 이상한 결과를 내버린다.
왜냐하면 decoder는 “훈련 중에 인코더가 만들어낸 Z”의 분포에서만 학습했기 때문에.
즉, decoder는 그 분포 밖의 Z를 전혀 모른다는 것.

해결 아이디어: “Z의 분포”를 모델링할 수 있을까?

“그렇다면 latent vector Z들이 따르는 분포를 확률적으로 모델링해보면 어떨까?”
“만약 우리가 Z의 분포를 알 수 있다면, 그 분포로부터 새로운 Z를 샘플링해서 decoder에 넣으면 진짜 그럴듯한 데이터를 만들 수 있지 않을까?”

이때 필요한 게 바로 Variational Inference(변분추론)입니다.

Variational Inference의 역할: 복잡한 p(Z|X)를 근사하기

우리가 진짜 알고 싶은 건

데이터 X가 주어졌을 때, latent 변수 Z가 어떤 값일 확률, 즉 p(Z|X)

그런데 p(Z|X)는 계산이 불가능. (분모의 p(X)가 적분)

그래서 계산 가능한 근사 분포 q(Z|X)를 두고
이걸 p(Z|X)와 최대한 비슷하게 만드는 걸 목표로 한다.

이게 바로 Variational Inference의 핵심이고,
이를 신경망으로 구현한 게 바로 VAE의 Encoder 인 것이다.

VAE에서의 역할

Encoder q(Z∣X): 근사 posterior X → Z의 분포 (평균, 분산 예측)
Decoder p(X∣Z): 생성 모델 Z → X 복원 (또는 생성)

Encoder는 X를 받아서 Z의 분포의 평균(μ)분산(σ²)을 예측하고(정규분포를 따른다고 가정할 때),
이 분포에서 Z를 샘플링해서 Decoder로 전달합니다.

ELBO 최대화

VAE는 다음의 Evidence Lower Bound (ELBO)를 최대화하도록 학습된다:

ELBO=𝐸𝑞(𝑍∣𝑋)[log⁡𝑝(𝑋∣𝑍)]−KL(𝑞(𝑍∣𝑋)∣∣𝑝(𝑍))

첫 번째 항(기대 로그우도): 복원(재구성)을 잘 하도록 만듦

두 번째 항(KL 발산): 인코더가 만든 Z의 분포가 사전 분포 p(Z) (보통 N(0, I))와 비슷하도록 제약을 걸어줌

결국, 인코더가 만들어내는 latent 공간이 정규분포 형태로 매끄럽게 정렬되게 되고,
덕분에 새로 샘플링한 Z로부터도 자연스러운 데이터가 생성될 수 있게 되는 것.

결과: “학습된 decoder = generator”

이제 학습이 끝나면,
Decoder는 단순히 reconstruction이 아니라 생성기(generator)로서 동작한다.

왜냐하면, latent 공간 Z가 정규분포 p(Z)로 잘 정규화되어 있으므로,
아무 Z ~ N(0, I)를 샘플링해 넣어도

“그럴듯한 X”를 만들어내는 거지.

0개의 댓글