변분 오토인코더
더 많은 작업
- Variational Autoencoder; VAE; 변분 오토인코더
- 인코더가 잠재 변수의 확률 분포를 내고 디코더가 거기서 뽑은 값으로 데이터를 복원하도록, 변분 추론의 증거 하한을 최대화해 학습하는 생성 모델
변분 오토인코더(Variational Autoencoder, VAE)는 2013년 디데릭 킹마(Diederik P. Kingma)와 막스 벨링(Max Welling)이 논문 〈Auto-Encoding Variational Bayes〉에서 제안한 잠재 변수 생성 모델이다.[1] 거의 같은 시기 딥마인드의 레젠데(Danilo Jimenez Rezende), 모하메드(Shakir Mohamed), 비어스트라(Daan Wierstra)도 같은 구조를 독립적으로 발표했다.[2]
겉모양은 오토인코더와 같다. 인코더가 입력을 저차원 잠재 공간으로 압축하고 디코더가 다시 복원한다. 차이는 인코더가 잠재 벡터 하나가 아니라 잠재 변수의 확률 분포(보통 평균과 분산)를 출력하고, 그 분포가 미리 정한 사전 분포(보통 표준 정규 분포)에서 너무 멀어지지 않도록 규제한다는 점이다. 그 결과 잠재 공간이 연속적이고 빈틈없이 채워져, 사전 분포에서 아무 점이나 뽑아 디코더에 넣으면 그럴듯한 새 데이터가 나온다. 즉 VAE는 압축 모델이면서 생성 모델이다.
VAE는 변분 추론을 신경망과 확률적 경사 하강법으로 대규모 데이터에 적용하는 방법을 보여 준 연구로 평가되어, 2024년 ICLR의 첫 "시간의 시험(Test of Time)" 상을 받았다.[3] 오늘날에는 단독 이미지 생성기보다 스테이블 디퓨전 같은 잠재 확산 모델에서 이미지를 잠재 공간으로 압축·복원하는 부품으로 더 널리 알려져 있다.
| 항목 | 일반 오토인코더 | 변분 오토인코더 |
|---|---|---|
| 인코더 출력 | 잠재 벡터 z 하나(결정론적) | 분포의 매개변수 |
| 잠재 공간 | 학습 데이터가 놓인 점 주변만 의미가 있고 사이사이가 비어 있을 수 있음 | 사전 분포 쪽으로 끌어당겨져 연속적이고 겹쳐 있음 |
| 손실 | 복원 오차 | 복원 오차 + 사전 분포와의 KL 발산 |
| 새 데이터 생성 | 보장되지 않음 | 사전 분포에서 z를 뽑아 디코더에 넣으면 됨 |
| 확률적 해석 | 없음 | 데이터 로그 가능도의 하한을 최대화 |
VAE는 데이터 x가 보이지 않는 잠재 변수 z에서 생성된다고 가정한다.
디코더 신경망이 를 나타낸다. 학습은 데이터의 로그 가능도(우도) 를 최대화하는 것이지만, 신경망 디코더 아래에서 위 적분은 계산할 수 없고, 베이즈 정리로 구하는 사후 분포 도 계산할 수 없다. VAE는 인코더 신경망 로 사후 분포를 근사한다. 데이터마다 근사 분포를 따로 최적화하지 않고 하나의 신경망이 모든 x에 대한 근사 분포를 바로 출력하므로 이를 상각(amortized) 추론이라 한다. 킹마와 벨링은 이 인코더를 인식 모델(recognition model)이라 불렀다.[1]
로그 가능도는 다음처럼 둘로 나뉜다.
마지막 KL 항은 항상 0 이상이므로 앞의 두 항의 합은 로그 가능도의 하한이 된다. 이를 증거 하한(Evidence Lower BOund, ELBO) 또는 변분 하한이라 한다. ELBO를 와 에 대해 함께 최대화하면 로그 가능도를 키우는 동시에 근사 사후 분포를 실제 사후 분포에 가깝게 만든다. 통계물리학의 변분 자유 에너지와 같은 양이다.
ELBO의 두 항은 각각 의미가 뚜렷하다.
- 복원 항 : 인코딩한 z로 x를 잘 복원하라는 요구. 디코더를 가우시안으로 두면 평균 제곱 오차, 베르누이로 두면 이진 교차 엔트로피가 된다.
- 규제 항 : 각 데이터의 잠재 분포가 사전 분포에서 너무 멀어지지 말라는 요구. 잠재 공간을 매끄럽게 만드는 역할이다.
인코더가 대각 공분산 가우시안 를, 사전 분포가 표준 정규 분포일 때 KL 항은 닫힌 형태로 계산된다.[1]
여기서 J는 잠재 공간의 차원이다.
복원 항의 기댓값은 z를 표본으로 뽑아 추정한다. 그런데 "분포에서 뽑기"는 미분할 수 없는 연산이라, 그대로는 인코더 매개변수 로 기울기가 흐르지 않는다. 킹마와 벨링은 무작위성을 매개변수와 무관한 잡음으로 떼어 내는 재매개변수화 트릭(reparameterization trick)으로 이를 해결했다.[1]
이제 z는 의 미분 가능한 함수이고 무작위성은 에만 있으므로, 보통의 역전파로 인코더와 디코더를 함께 학습할 수 있다. 이 방식으로 얻은 기울기 추정량은 REINFORCE 같은 점수 함수 추정량보다 분산이 훨씬 작다. 레젠데 등은 같은 아이디어를 확률적 역전파(stochastic backpropagation)라 불렀다.[2]
import torch, torch.nn as nn, torch.nn.functional as F
class VAE(nn.Module):
def __init__(self, x_dim=784, h_dim=400, z_dim=20):
super().__init__()
self.enc = nn.Linear(x_dim, h_dim)
self.mu = nn.Linear(h_dim, z_dim)
self.logvar = nn.Linear(h_dim, z_dim) # 분산 대신 로그 분산을 출력해 양수 조건을 피함
self.dec1 = nn.Linear(z_dim, h_dim)
self.dec2 = nn.Linear(h_dim, x_dim)
def forward(self, x):
h = F.relu(self.enc(x))
mu, logvar = self.mu(h), self.logvar(h)
eps = torch.randn_like(mu)
z = mu + torch.exp(0.5 * logvar) * eps # 재매개변수화 트릭
x_hat = torch.sigmoid(self.dec2(F.relu(self.dec1(z))))
return x_hat, mu, logvar
def loss_fn(x_hat, x, mu, logvar, beta=1.0):
recon = F.binary_cross_entropy(x_hat, x, reduction="sum")
kl = 0.5 * torch.sum(mu.pow(2) + logvar.exp() - 1 - logvar)
return recon + beta * kl # 음의 ELBO (beta=1이면 표준 VAE)
학습이 끝나면 인코더는 버리고 사전 분포에서 를 뽑아 디코더에 넣어 새 데이터를 만든다. 잠재 공간이 연속적이므로 두 이미지의 잠재 벡터 사이를 선형 보간하면 한 이미지가 다른 이미지로 서서히 바뀌는 중간 결과가 나오고, 특정 속성(예: 웃음, 안경) 방향의 벡터를 더하고 빼는 식의 편집도 할 수 있다. 보먼(Samuel Bowman) 등은 문장 VAE에서 두 문장 사이의 잠재 경로를 따라가며 문법에 맞는 새 문장들이 생성됨을 보였다.[4]
- 흐릿한 출력: 이미지 VAE의 표본은 GAN보다 흐릿한 경향이 있다. 가우시안 디코더의 제곱 오차가 여러 가능성을 평균 내는 쪽을 선호하고, KL 규제가 잠재 표현에 담을 정보량을 제한하기 때문이다.
- 사후 분포 붕괴(posterior collapse, KL 소실): 디코더가 RNN 같은 강력한 자기회귀 모델이면 잠재 변수를 무시하고도 복원을 잘할 수 있어서, KL 항이 0으로 줄고 z가 아무 정보도 담지 않게 된다. 보먼 등이 문장 VAE에서 이 문제를 보고하고 KL 항 가중치를 0에서 점점 올리는 담금질(KL annealing)과 단어 드롭아웃으로 완화했다.[4] VQ-VAE의 이산 잠재 공간도 이 문제를 피하는 방법으로 제시되었다.[5]
- 느슨한 하한: ELBO는 진짜 로그 가능도보다 작으며, 근사 사후 분포가 단순한 가우시안이면 차이가 커질 수 있다. 여러 표본에 중요도 가중치를 주어 더 촘촘한 하한을 쓰는 IWAE가 이를 개선한다.[6]
- 사전 분포와 집계 사후 분포의 불일치: 학습 데이터 전체의 잠재 분포가 표준 정규 분포와 완전히 일치하지 않아, 사전 분포에서 뽑은 z 중 일부는 학습 데이터가 없던 영역에 떨어져 품질 낮은 표본을 만든다.
| 이름(연도) | 핵심 아이디어 | 특징 |
|---|---|---|
| 조건부 VAE, CVAE(2015)[7] | 인코더·디코더·사전 분포 모두에 조건 y(레이블 등)를 입력 | 원하는 숫자의 손글씨 생성처럼 조건부 생성 |
| IWAE(2015)[6] | 여러 표본의 중요도 가중 평균으로 더 촘촘한 하한 | 구조는 VAE와 같고 목표만 다름 |
| β-VAE(2017)[8] | KL 항에 가중치 을 곱해 규제를 강화 | 잠재 차원 하나하나가 위치·크기·회전 같은 독립 요인을 맡도록 분리(disentanglement). 대신 복원 품질은 떨어짐 |
| VQ-VAE(2017)[5] | 인코더 출력을 학습되는 코드북에서 가장 가까운 벡터로 바꾸는 벡터 양자화. 사전 분포도 학습(자기회귀 모델) | 이산 토큰 표현. 이미지·영상·음성 생성, 사후 분포 붕괴 회피 |
| VQ-VAE-2(2019)[9] | 다중 척도 계층 VQ-VAE와 강력한 자기회귀 사전 분포 | ImageNet에서 당시 최고 GAN에 견줄 품질, 모드 붕괴 없음 |
| NVAE(2020)[10] | 깊은 계층 VAE, 깊이별 분리 합성곱과 스펙트럼 정규화 | 256×256 자연 이미지에 성공한 첫 VAE라고 저자들이 밝힘 |
| VQGAN(2020)[11] | VQ-VAE에 적대 손실과 지각 손실을 더하고 트랜스포머를 사전 분포로 사용 | 메가픽셀 이미지 합성, 잠재 확산의 직접적 전신 |
2020년대 이미지·영상 생성에서 VAE는 생성기 자체보다 압축기로 더 큰 역할을 한다.
- 최초의 DALL-E(2021)는 이산 VAE로 이미지를 토큰으로 바꾼 뒤 텍스트 토큰과 함께 트랜스포머로 자기회귀 생성했다.[12]
- 잠재 확산 모델(LDM)은 먼저 오토인코더로 이미지를 작은 잠재 표현으로 압축하고, 확산 모델은 그 잠재 공간에서만 학습·생성한다. 이때 잠재 공간이 지나치게 흩어지지 않도록 약한 KL 규제(VAE식) 또는 벡터 양자화(VQ식)를 건다.[13] 복원 이미지가 흐려지지 않도록 VQGAN처럼 적대 손실과 지각 손실도 함께 쓴다.
- 스테이블 디퓨전 v1의 오토인코더는 이미지를 가로세로 8분의 1 크기, 4채널의 잠재 표현으로 줄인다.[14] 512×512×3 이미지가 64×64×4 잠재 표현이 되어 확산 단계의 연산량이 크게 줄어든다. 생성의 마지막 단계에서 VAE 디코더가 잠재 표현을 다시 이미지로 바꾼다.
이 구조에서는 VAE가 세부 질감을, 확산 모델이 전체 구도와 의미를 맡는 분업이 이루어진다. VAE 단독 생성의 약점이던 흐릿함은 확산 모델이 잠재 공간에서 정교한 분포를 학습하면서 해결된다.
- 확산 모델: DDPM도 ELBO를 최대화하는 잠재 변수 모델이며, 인코더(순방향 과정)를 학습하지 않고 고정한 깊은 계층 VAE로 볼 수 있다. 흐릿함을 줄이려 VAE를 여러 계층으로 쌓은 계층 VAE 연구가 확산 모델의 이론적 배경과 맞닿아 있다.
- GAN: GAN은 선명한 표본을 내지만 인코더가 없고 가능도를 계산할 수 없으며 학습이 불안정하다. VAE는 학습이 안정적이고 인코더와 가능도 하한이 있지만 표본이 흐리다. 둘을 합친 VAE-GAN, VQGAN 같은 시도가 이어졌다.
- 자기 회귀 모델: VQ-VAE와 VQGAN은 이미지를 이산 토큰열로 바꾸어 자기회귀 트랜스포머가 이미지를 생성할 수 있게 해 주었다.
| 연도 | 사건 |
|---|---|
| 2013.12 | 킹마·벨링, 〈Auto-Encoding Variational Bayes〉 arXiv 공개(ICLR 2014 발표)[1] |
| 2014.1 | 레젠데·모하메드·비어스트라, 확률적 역전파 논문(ICML 2014)[2] |
| 2015 | 조건부 VAE, IWAE, 문장 VAE와 사후 분포 붕괴 보고 |
| 2017 | β-VAE, VQ-VAE |
| 2019 | VQ-VAE-2, 킹마·벨링의 해설서 〈An Introduction to Variational Autoencoders〉[15] |
| 2020 | NVAE, VQGAN |
| 2021 | DALL-E가 이산 VAE 토큰 사용, 잠재 확산 모델 발표 |
| 2022 | 스테이블 디퓨전 공개, VAE가 잠재 확산의 표준 압축기로 자리 잡음 |
| 2024 | 〈Auto-Encoding Variational Bayes〉, ICLR 첫 시간의 시험 상 수상[3] |
- ↑ 1.0 1.1 1.2 1.3 1.4 Diederik P. Kingma, Max Welling, 〈Auto-Encoding Variational Bayes〉, ICLR 2014. arXiv:1312.6114
- ↑ 2.0 2.1 2.2 Danilo Jimenez Rezende, Shakir Mohamed, Daan Wierstra, 〈Stochastic Backpropagation and Approximate Inference in Deep Generative Models〉, ICML 2014. arXiv:1401.4082
- ↑ 3.0 3.1 ICLR, 〈ICLR 2024 Test of Time Award〉, 2024. blog.iclr.cc
- ↑ 4.0 4.1 Samuel R. Bowman 외, 〈Generating Sentences from a Continuous Space〉, CoNLL 2016. arXiv:1511.06349
- ↑ 5.0 5.1 Aaron van den Oord, Oriol Vinyals, Koray Kavukcuoglu, 〈Neural Discrete Representation Learning〉, NeurIPS 2017. arXiv:1711.00937
- ↑ 6.0 6.1 Yuri Burda, Roger Grosse, Ruslan Salakhutdinov, 〈Importance Weighted Autoencoders〉, ICLR 2016. arXiv:1509.00519
- ↑ Kihyuk Sohn, Honglak Lee, Xinchen Yan, 〈Learning Structured Output Representation using Deep Conditional Generative Models〉, NeurIPS 2015.
- ↑ Irina Higgins 외, 〈β-VAE: Learning Basic Visual Concepts with a Constrained Variational Framework〉, ICLR 2017. OpenReview
- ↑ Ali Razavi, Aaron van den Oord, Oriol Vinyals, 〈Generating Diverse High-Fidelity Images with VQ-VAE-2〉, NeurIPS 2019. arXiv:1906.00446
- ↑ Arash Vahdat, Jan Kautz, 〈NVAE: A Deep Hierarchical Variational Autoencoder〉, NeurIPS 2020. arXiv:2007.03898
- ↑ Patrick Esser, Robin Rombach, Björn Ommer, 〈Taming Transformers for High-Resolution Image Synthesis〉, CVPR 2021. arXiv:2012.09841
- ↑ Aditya Ramesh 외, 〈Zero-Shot Text-to-Image Generation〉, ICML 2021. arXiv:2102.12092
- ↑ Robin Rombach 외, 〈High-Resolution Image Synthesis with Latent Diffusion Models〉, CVPR 2022. arXiv:2112.10752
- ↑ CompVis, 〈stable-diffusion-v1-4 모델 카드〉, Hugging Face. huggingface.co
- ↑ Diederik P. Kingma, Max Welling, 〈An Introduction to Variational Autoencoders〉, Foundations and Trends in Machine Learning 12(4), 2019. arXiv:1906.02691