변분 오토인코더

편집 역사 토론
통계 수치해석 소프트웨어 마지막 수정: 2026-08-10 04:16:41

1. 개요[편집]

변분 오토인코더
Variational Autoencoder
약칭VAE
제안D. P. Kingma & M. Welling (2013) — Auto-Encoding Variational Bayes
동시 발견Rezende, Mohamed, Wierstra (2014)
정체잠재변수 생성모형 + 상각(amortized) 변분 추론
목적함수ELBO (증거 하한)
핵심 장치재매개변수화 트릭 (경로 미분 추정량)
대표 병증사후분포 붕괴, 흐릿한 표본

변분 오토인코더(variational autoencoder, VAE)는 잠재변수 생성모형 pθ(x)=pθ(xz)p(z)dzp_\theta(x) = \int p_\theta(x \mid z)\,p(z)\,dz 를, 관측마다 사후분포를 따로 풀지 않고 신경망 하나가 xqϕ(zx)x \mapsto q_\phi(z\mid x) 를 통째로 내놓도록 상각(amortize) 시킨 뒤, 생성망 θ\theta 와 추론망 ϕ\phi 를 ELBO로 동시에 경사법으로 학습하는 모형이다.

이름 때문에 “오토인코더의 확률 버전” 순서로 소개되는 일이 많은데, 사실 순서가 거꾸로다. 출발점은 변분 추론이고, 인코더-디코더처럼 생긴 그림은 그 결과로 딸려 나온 것이다. 결정론적 오토인코더는 코드 zz 를 만들 뿐 zz 위의 분포를 정의하지 않아서, 잠재공간에서 아무 점이나 뽑아 디코더에 넣으면 대체로 쓰레기가 나온다. VAE는 잠재변수에 사전분포 p(z)=N(0,I)p(z)=\mathcal{N}(0,I) 를 못 박고 그 사전분포에 맞도록 인코더를 벌하기 때문에, 학습이 끝난 뒤 인코더를 버리고 zp(z)z\sim p(z) 를 뽑아 디코더만 돌려도 표본이 나온다. 오토인코더에 없던 이 한 가지가 생성모형과 압축기를 가른다.1

2013년 12월 킹마와 웰링의 프리프린트가 나온 뒤 반년 안에 사실상 표준 도구가 된 이유는 성능이 아니라 호환성이었다. 목적함수 한 줄과 재매개변수화 한 줄만 있으면 그 뒤는 자동 미분확률적 경사하강법이 다 해 준다. 변분 추론을 하겠다고 모형마다 손으로 갱신식을 유도하던 시대가 여기서 끝났다.

2. ELBO와 그 갭[편집]

일반적인 유도는 변분 추론 문서에 있으니, 여기서는 VAE가 쓰는 형태만 짚는다.2 관측 xx 하나에 대해 로그가능도를 잠재변수로 쪼개고 qϕ(zx)q_\phi(z\mid x) 를 끼워 넣으면

lnpθ(x)=Eqϕ(zx) ⁣[lnpθ(x,z)qϕ(zx)]L(θ,ϕ;x)+KL(qϕ(zx)pθ(zx))\ln p_\theta(x) = \underbrace{\mathbb{E}_{q_\phi(z\mid x)}\!\left[\ln \frac{p_\theta(x,z)}{q_\phi(z\mid x)}\right]}_{\mathcal{L}(\theta,\phi;x)} + \mathrm{KL}\big(q_\phi(z\mid x)\,\|\,p_\theta(z\mid x)\big)

가 항등식으로 성립한다. 우변 둘째 항이 쿨백-라이블러 발산이라 0 이상이므로 L\mathcal{L}lnpθ(x)\ln p_\theta(x) 의 하한이고, 하한과 참값 사이의 갭이 정확히 근사 사후분포와 참 사후분포 사이의 KL이다. 이 한 문장이 VAE 전체의 손익계산서다. ELBO를 올리면 (i) 데이터의 로그가능도가 올라가거나 (ii) 추론이 정확해지거나 둘 중 하나이며, 어느 쪽이 얼마나 올랐는지는 알 수 없다.

첫 항을 다시 쪼개면 실무에서 코드로 옮기는 형태가 나온다.

L=Eqϕ(zx)[lnpθ(xz)]재구성 항KL(qϕ(zx)p(z))정규화 항\mathcal{L} = \underbrace{\mathbb{E}_{q_\phi(z\mid x)}\big[\ln p_\theta(x\mid z)\big]}_{\text{재구성 항}} - \underbrace{\mathrm{KL}\big(q_\phi(z\mid x)\,\|\,p(z)\big)}_{\text{정규화 항}}

왼쪽은 ”zz 로부터 xx 를 얼마나 잘 되살리는가”, 오른쪽은 “인코더가 사전분포에서 얼마나 벗어났는가”. 오토인코더의 재구성 손실에 벌점 하나가 붙은 모양이라 구현이 익숙해 보이지만, 저 벌점이 생성 능력을 만든다. 없으면 인코더는 xx 마다 아주 뾰족한 봉우리를 잠재공간 아무 데나 찍어 놓고 완벽히 재구성하는, 그냥 결정론적 오토인코더로 퇴화한다.3

갭 자체도 한 겹이 아니다. 크레머·리·듀버노(2018)는 이것을 근사 갭(선택한 분포족 Q\mathcal{Q} 가 참 사후분포를 못 담아서 생기는 몫)과 상각 갭(그 Q\mathcal{Q} 안의 최적점조차 인코더 신경망이 못 맞혀서 생기는 몫)으로 분해했다. 후자는 VAE에만 있는 세금이다. 관측마다 최적화를 다시 돌리는 고전 VI에는 없고, 한 번 학습한 인코더로 모든 xx 를 처리하겠다는 상각의 대가로 생긴다. 표본 하나에 대해 인코더 출력에서 시작해 몇 스텝 더 최적화해 주는 것만으로 ELBO가 눈에 띄게 오르는 현상이 그 증거다.

3. 재매개변수화 트릭[편집]

이제 진짜 문제. ϕL\nabla_\phi \mathcal{L} 을 어떻게 구하는가. 기댓값을 취하는 분포 자체가 ϕ\phi 에 의존하기 때문에 미분을 그냥 안으로 밀어 넣을 수 없다.

ϕEqϕ(z)[f(z)]    Eqϕ(z)[ϕf(z)]\nabla_\phi\, \mathbb{E}_{q_\phi(z)}\big[f(z)\big] \;\neq\; \mathbb{E}_{q_\phi(z)}\big[\nabla_\phi f(z)\big]

우변은 아예 0이다(ffϕ\phi 를 모른다). 즉 “표본을 뽑아 평균 내고 역전파” 를 순진하게 하면 인코더에는 재구성 항의 기울기가 한 방울도 흐르지 않는다. 우회로는 둘이다.

  • 점수함수 추정량(score function, REINFORCE): ϕE[f]=E[f(z)ϕlnqϕ(z)]\nabla_\phi \mathbb{E}[f] = \mathbb{E}\big[f(z)\,\nabla_\phi \ln q_\phi(z)\big]. qq 에서 표본만 뽑을 수 있으면 되고 ff 가 미분 가능할 필요조차 없다. 대신 ff만 쓰고 기울기 정보를 안 쓴다.
  • 경로 미분 추정량(pathwise): 무작위성을 ϕ\phi 와 무관한 잡음으로 밀어내는 것.
z=μϕ(x)+σϕ(x)ϵ,ϵN(0,I)z = \mu_\phi(x) + \sigma_\phi(x) \odot \epsilon, \qquad \epsilon \sim \mathcal{N}(0, I)

이렇게 쓰면 Eqϕ[f(z)]=Eϵ[f(μϕ+σϕϵ)]\mathbb{E}_{q_\phi}[f(z)] = \mathbb{E}_{\epsilon}[f(\mu_\phi + \sigma_\phi\odot\epsilon)] 가 되어 기댓값을 취하는 분포가 ϕ\phi 와 무관해지고, 미분이 그대로 안으로 들어가 zfϕ(μϕ+σϕϵ)\nabla_z f \cdot \nabla_\phi(\mu_\phi + \sigma_\phi\odot\epsilon) 이 나온다. 표본 추출이 계산그래프의 가운데를 막고 있던 벽에서 그냥 지나가는 노드로 바뀐다. 이것이 재매개변수화 트릭이고, 구현상으로는 “정규분포 난수를 뽑아 σ\sigma 곱하고 μ\mu 더한다” 한 줄이다.

핵심은 편향이 아니라 분산이다. 두 추정량 모두 불편이지만, 점수함수는 디코더가 zz 를 어느 방향으로 옮기길 원하는지(zf\nabla_z f)를 전혀 참고하지 못하고 잡음 속에서 상관관계를 더듬어야 한다. 잠재차원이 수십~수백인 VAE에서 이 차이는 대체로 몇 자릿수의 분산 차이로 나타나고, 실제로 점수함수만으로는 학습이 사실상 진행되지 않는다.4 다만 경로 미분이 항상 저분산인 것은 아니다ff 가 매우 거칠면 역전될 수 있고, 이론적 반례도 알려져 있다. VAE의 매끄러운 디코더에서 압도적으로 유리하다는 것이 정확한 서술이다.

대가는 적용 범위다. 경로 미분은 qq 가 “고정 잡음의 미분가능한 변환”으로 쓰일 수 있어야 하므로, 이산 잠재변수에는 그대로 쓸 수 없다. 검벨-소프트맥스 완화나 직통(straight-through) 추정량으로 근사하거나, 점수함수로 되돌아가야 한다. VQ-VAE가 코드북 인덱스를 다루면서 직통 추정량을 쓰는 이유가 이것이다.

4. 가우시안 KL의 닫힌 형태[편집]

사전분포를 p(z)=N(0,I)p(z)=\mathcal{N}(0,I), 근사 사후분포를 대각 가우시안 qϕ(zx)=N(μ,diag(σ2))q_\phi(z\mid x)=\mathcal{N}(\mu, \mathrm{diag}(\sigma^2)) 로 잡으면 KL 항은 표본을 뽑을 필요 없이 해석적으로 떨어진다. dd 차원에서

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

이게 VAE가 실무에서 그토록 잘 도는 두 번째 이유다. 목적함수 두 항 중 하나는 몬테카를로 잡음이 아예 없다. 재구성 항만 표본 1개로 추정하면 되고(미니배치가 이미 있으므로 표본 1개로 충분하다는 것이 원논문의 관찰이다), 남은 분산은 그 항에만 있다.

식을 뜯어보면 각 좌표가 μj0\mu_j \to 0, σj1\sigma_j \to 1 로 끌려간다는 것이 보인다. σj=1, μj=0\sigma_j = 1,\ \mu_j = 0 에서 기여가 정확히 0. 구현할 때는 σ\sigma 대신 lnσ2\ln \sigma^2 를 신경망 출력으로 두는 것이 국룰인데, 양수 제약이 공짜로 풀리고 위 식이 로그 항을 이미 요구하기 때문이다.

5. 왜 흐릿한가[편집]

VAE의 표본이 GAN 계열보다 뿌옇다는 것은 오래된 관찰이고, 원인의 상당 부분은 모형이 아니라 가능도의 선택에 있다. 디코더를 분산 고정 가우시안 pθ(xz)=N(μθ(z),σ2I)p_\theta(x\mid z)=\mathcal{N}(\mu_\theta(z), \sigma^2 I) 로 두면

lnpθ(xz)=12σ2xμθ(z)22+const-\ln p_\theta(x\mid z) = \frac{1}{2\sigma^2}\|x - \mu_\theta(z)\|_2^2 + \text{const}

재구성 항이 정확히 L2 손실이다. L2를 최소화하는 출력은 조건부 평균 E[xz]\mathbb{E}[x\mid z] 이므로, 하나의 zz 에 여러 그럴듯한 xx 가 대응하는 순간 디코더는 그것들을 평균 내는 것이 최적이 된다. 사람 얼굴 여러 장의 픽셀 평균이 어떻게 생겼는지 떠올리면 된다 — 그게 흐릿함의 정체다.

여기에 목적함수의 방향이 겹친다. ELBO 최대화는 결국 Epdata[lnpθ(x)]\mathbb{E}_{p_{\text{data}}}[\ln p_\theta(x)] 를 밀어 올리는 것이고 이는 KL(pdatapθ)\mathrm{KL}(p_{\text{data}}\|p_\theta) 최소화, 즉 질량 포괄(mode-covering) 쪽이다. 데이터가 있는 곳에 pθp_\theta 가 0이면 무한대 벌점을 받으므로 모형은 모든 모드를 덮으려 하고, 용량이 모자라면 모드 사이의 빈 공간까지 확률질량을 발라 버린다. 반대로 GAN의 목적함수는 모드 추구 쪽이라 선명하지만 모드를 통째로 빠뜨린다. 선명함과 모드 커버리지는 같은 저울의 양 끝이라는 것이 이 대비의 요점이지, VAE가 그냥 열등한 것이 아니다.

그래서 처방도 원인별로 갈린다. 픽셀 독립 가우시안을 버리고 이산화된 로지스틱 혼합이나 자기회귀 디코더를 쓰거나, 잠재변수를 이산화한 뒤 사전분포를 별도로 학습하거나(벡터 양자화 계열), 아예 가능도를 지각 손실·적대적 손실로 바꾸는 식이다. 그리고 σ2\sigma^2 를 1로 고정하는 관행 자체가 숨은 가중치라는 점도 짚어 둘 만하다 — 위 식에서 1/2σ21/2\sigma^2 가 재구성 항의 배율이므로, σ\sigma 를 고정하는 순간 이미 β\beta 를 암묵적으로 고른 셈이다.

6. 사후분포 붕괴와 β-VAE[편집]

사후분포 붕괴(posterior collapse)는 일부(또는 전부) 잠재차원에서 qϕ(zjx)p(zj)q_\phi(z_j\mid x) \to p(z_j) 가 되어 KL 기여가 0으로 눌리고, 디코더가 그 차원을 아예 무시하게 되는 현상이다. 최적화가 실패한 것이 아니라 ELBO 관점에서 합리적인 해라는 점이 고약하다. 디코더가 zz 없이도 데이터를 잘 설명할 만큼 강력하면(자기회귀 디코더가 대표적), 잠재변수를 쓰는 순간 KL 벌점만 내고 얻는 것이 없다. 텍스트 VAE에서 이 문제가 특히 악명 높았던 이유다.

완화책은 전부 “KL 항을 초반에 약하게 만들기”의 변주다.

처방하는 일부작용
KL 어닐링KL 가중치를 0에서 1로 서서히 올림스케줄이 또 하나의 초모수
프리 비츠차원별 KL에 하한 λ\lambda 를 두고 그 아래는 벌하지 않음더 이상 ELBO가 아님
디코더 약화수용영역 제한, 드롭아웃재구성 품질 손해
잠재변수 우회 연결디코더 각 층에 zz 를 직접 주입구조가 복잡해짐

β-VAE(히긴스 외 2017)는 반대 방향이다. KL 항에 β>1\beta > 1 을 곱해 일부러 정보 병목을 좁힌다. 잠재차원 하나가 정보를 나르려면 KL 비용을 내야 하므로, 예산이 빠듯해지면 모형은 데이터의 변동을 가장 경제적인 축들로 쪼개려는 압력을 받는다 — 이것이 얽힘 해제(disentanglement)라는 주장이었다. 재구성 품질은 당연히 나빠지고, 이후 연구들은 얽힘 해제가 목적함수만으로 보장되지 않으며 귀납 편향과 초모수 선택에 크게 의존한다는 점을 지적했다. 그래도 β\beta 를 노브로 노출시켰다는 실무적 기여는 남았다.

β\beta 를 율-왜곡(rate-distortion) 관점으로 읽으면 더 깔끔하다. KL 항은 잠재 채널의 (rate, 비트), 재구성 항은 왜곡(distortion)이고 ELBO는 둘의 합에 불과하다. 그렇다면 같은 ELBO 값을 주는 (율, 왜곡) 조합이 무수히 많다 — 알레미 외(2018)가 지적한 지점이 이것이고, 사후분포 붕괴는 그 곡선 위에서 율 = 0 인 끝점에 앉은 상태다. ELBO 숫자 하나만 보고 모형을 고르면 안 되는 이유가 여기 있다.

하한을 조이는 방향의 개선도 있다. 중요도 가중 ELBO(IWAE)는 KK 개 표본으로

LK=E[ln1Kk=1Kpθ(x,zk)qϕ(zkx)]\mathcal{L}_K = \mathbb{E}\left[\ln \frac{1}{K}\sum_{k=1}^{K}\frac{p_\theta(x,z_k)}{q_\phi(z_k\mid x)}\right]

를 쓰는데, KK 에 대해 단조 증가하고 KK\to\infty 에서 lnpθ(x)\ln p_\theta(x) 로 수렴한다. 다만 하한이 조여질수록 인코더에 도달하는 기울기의 신호 대 잡음비가 나빠지는 역설이 알려져 있어서, 공짜는 아니다. 중요도 표본추출의 무게 퇴화 문제가 여기서도 그대로 반복된다.

7. 어디에 쓰이나[편집]

이미지 생성 자리는 확산모형에 내줬지만, VAE는 사라진 게 아니라 부품으로 내려갔다. 요즘 이미지 생성 파이프라인의 표준 구성은 VAE로 픽셀을 저차원 잠재로 압축해 두고 확산모형을 그 잠재공간에서 돌리는 것이다 — 512×512 픽셀 대신 64×64 잠재에서 계산하니 비용이 수십 배 싸진다. 이 구조에서 VAE가 담당하는 것은 생성이 아니라 잘 정규화된 압축 좌표계다.

공학 쪽 용례도 이 성격을 그대로 물려받는다. 고차원 유동장·응력장의 스냅숏을 저차원 잠재로 눌러 축소차수모델의 좌표로 쓰거나, 형상 파라미터화가 어려운 설계 공간을 잠재공간으로 대체해 베이지안 최적화를 그 위에서 돌리는 식이다. 주성분 분석이 선형 부분공간만 찾는 데 비해 비선형 다양체를 잡을 수 있다는 것이 팔림새인데, 대신 재구성 오차의 상한이 없다는 점은 정직하게 감수해야 한다. POD는 절단한 특이값으로 버린 에너지를 정확히 셀 수 있지만 VAE에는 그런 계기판이 없다. 안전 여유가 걸린 자리에서는 이 차이가 결정적이다.

8. 관련 문서[편집]

9. Footnotes[편집]

  1. 그래서 “VAE는 잡음을 넣은 오토인코더” 같은 설명은 결과만 맞고 이유가 틀렸다. 잡음을 넣는 이유는 강건성이 아니라 qϕ(zx)q_\phi(z\mid x) 가 분포여야 KL을 잴 수 있기 때문이고, KL을 재야 하는 이유는 ELBO가 그렇게 생겼기 때문이다. 유도를 따라가면 잡음의 크기(σ\sigma)마저 학습 대상이라는 게 자연스러워진다.

  2. 이 문서에서 반복하지 않은 재매개변수화의 일반론(비켤레 모형, ADVI, 확률적 VI)은 변분 추론 쪽에 있다. VAE는 그 기법이 “인코더 신경망 + 디코더 신경망”이라는 특정 조합을 만났을 때의 이름이라고 보는 편이 정확하다.

  3. 잠재공간을 돌아다니며 두 이미지 사이를 보간하는 그 유명한 데모도 사전분포 벌점 덕이다. 벌점이 없으면 두 코드 사이의 중간점은 학습 중 한 번도 방문한 적 없는 좌표라 디코더가 무슨 짓을 할지 모른다. 그럼에도 VAE의 잠재공간에도 사전분포와 집합 사후분포가 어긋나 생긴 “구멍”이 남아 있고, 보간 경로가 그 구멍을 지나가면 여전히 이상한 그림이 나온다.

  4. 원논문이 REINFORCE 대비 우위를 강조한 것도 이 대목이다. 재미있는 건 강화학습 쪽은 반대로 여전히 점수함수를 쓴다는 것 — 거기서는 환경이 미분 불가능해서 zf\nabla_z f 를 애초에 구할 수 없기 때문이다. 같은 문제에 정반대 답이 나오는 이유가 “환경을 미분할 수 있는가” 하나에 달려 있다.