검색
← 모듈 로드맵

변분 오토인코더 (VAE)

논문 · 전문가 · Diederik P Kingma 외 1명 · 2013 · arXiv

원제 · Auto-Encoding Variational Bayes

재매개변수화 트릭으로 인코더 · 디코더를 경사하강법으로 함께 학습하는 확률적 생성 모델

먼저 알아야 할 것

확률분포 · 기댓값 · 베이즈 정리정규분포KL 발산오토인코더역전파 · 경사하강법

다루는 내용

VAE는 사후분포를 계산할 수 없는 연속 잠재 변수 모델을 큰 데이터셋에서 학습하기 위해, 근사 사후분포 q(z|x)를 신경망 인코더로 두고 로그 가능도 대신 변분 하한(ELBO)을 최대화합니다. 핵심은 z = μ + σ⊙ε처럼 무작위성을 잡음으로 빼는 재매개변수화 트릭으로, 하한 추정치를 표준 확률적 경사 방법으로 바로 미분 · 최적화할 수 있게 합니다. 하한은 사전분포와의 KL 규제항과 재구성항으로 나뉘어 오토인코더와 연결되며, MNIST · Frey Face에서 wake-sleep보다 빨리 더 좋은 해에 수렴했습니다.

초록

저자가 쓴 초록을 옮긴 것입니다.

계산이 불가능한 사후분포를 가진 연속 잠재 변수가 있고 데이터셋이 큰 상황에서, 방향성 확률 모델의 추론과 학습을 어떻게 효율적으로 할 수 있을까요? 우리는 대규모 데이터셋으로 확장되며, 몇 가지 완만한 미분 가능성 조건 아래에서는 계산 불가능한 경우에도 작동하는 확률적 변분 추론 · 학습 알고리즘을 소개합니다. 기여는 두 가지입니다. 첫째, 변분 하한을 재매개변수화하면 표준 확률적 경사 방법으로 곧바로 최적화할 수 있는 하한 추정량이 나온다는 것을 보입니다. 둘째, 데이터 포인트마다 연속 잠재 변수가 있는 i.i.d. 데이터셋에서는, 제안한 하한 추정량을 사용해 근사 추론 모델(인식 모델이라고도 함)을 계산 불가능한 사후분포에 맞춤으로써 사후 추론을 특히 효율적으로 할 수 있음을 보입니다. 이론적 장점은 실험 결과에도 반영되어 나타납니다.

해설

변분 오토인코더 (VAE)

데이터를 잠재 변수로 압축하는 인코더와 다시 펼치는 디코더를 확률 모델로 놓고, "재매개변수화 트릭"으로 둘을 보통의 경사하강법으로 함께 학습하게 한 논문입니다. 이후 심층 생성 모델과 잠재 공간 연구의 출발점이 됐습니다.

항목내용
원제Auto-Encoding Variational Bayes
저자Diederik P. Kingma · Max Welling (암스테르담대 Machine Learning Group)
발표2013 · arXiv 1312.6114
트랙 · 수준생성 모델 · 심화
먼저 알면 좋은 것확률분포 · 기댓값 · 베이즈 정리, 정규분포, KL 발산, 오토인코더, 역전파 · 경사하강법

들어가기 전에

이 해설은 아래 내용을 안다고 보고 씁니다. 처음이라면 먼저 읽고 오면 수식과 손계산을 훨씬 쉽게 따라올 수 있습니다.

한눈에 보기

  • 관측 데이터 xx 뒤에 숨은 연속 변수 zz가 있다고 볼 때, 사후분포 p(z∣x)p(z|x)를 직접 계산할 수 없는 문제가 왜 생기는지 압니다.
  • 계산할 수 없는 로그 가능도 대신 최대화하는 변분 하한(ELBO) 의 뜻과 두 항(재구성 · KL)의 역할을 압니다.
  • 무작위 샘플링을 미분 가능한 식 z=μ+σ⊙ϵz = \mu + \sigma \odot \epsilon으로 바꾸는 재매개변수화 트릭이 핵심인 이유를 압니다.
  • 인코더 qϕ(z∣x)q_\phi(z|x)와 디코더 pθ(x∣z)p_\theta(x|z)를 신경망으로 만든 것이 변분 오토인코더라는 것을 압니다.
  • MNIST · Frey Face에서 wake-sleep보다 빨리 · 더 좋게 수렴한 결과를 압니다.

초록 (번역)

계산이 불가능한 사후분포를 가진 연속 잠재 변수가 있고 데이터셋이 큰 상황에서, 방향성 확률 모델의 추론과 학습을 어떻게 효율적으로 할 수 있을까요? 우리는 대규모 데이터셋으로 확장되며, 몇 가지 완만한 미분 가능성 조건 아래에서는 계산 불가능한 경우에도 작동하는 확률적 변분 추론 · 학습 알고리즘을 소개합니다. 기여는 두 가지입니다. 첫째, 변분 하한을 재매개변수화하면 표준 확률적 경사 방법으로 곧바로 최적화할 수 있는 하한 추정량이 나온다는 것을 보입니다. 둘째, 데이터 포인트마다 연속 잠재 변수가 있는 i.i.d. 데이터셋에서는, 제안한 하한 추정량을 사용해 근사 추론 모델(인식 모델이라고도 함)을 계산 불가능한 사후분포에 맞춤으로써 사후 추론을 특히 효율적으로 할 수 있음을 보입니다. 이론적 장점은 실험 결과에도 반영되어 나타납니다.

무엇을 풀었나

손글씨 숫자 이미지 xx는 "어떤 숫자인지, 얼마나 기울었는지" 같은 보이지 않는 요인 zz 에서 만들어졌다고 볼 수 있습니다(해설용 예). 이런 zz를 잠재 변수(latent variable)라 합니다.

논문이 가정하는 생성 과정은 두 단계입니다. ① 사전분포 pθ(z)p_\theta(z)에서 zz를 뽑고 ② 조건부 분포 pθ(x∣z)p_\theta(x|z)에서 xx를 뽑습니다. 우리는 xx만 보고, θ\theta와 zz는 모릅니다.

여기서 막히는 지점이 두 가지입니다.

  1. 계산 불가능(intractability). pθ(x)=∫pθ(z)pθ(x∣z) dzp_\theta(x) = \int p_\theta(z) p_\theta(x|z)\, dz를 계산할 수 없습니다. pθ(x∣z)p_\theta(x|z)가 비선형 은닉층 하나짜리 신경망만 돼도 그렇습니다. 그러면 사후분포 pθ(z∣x)p_\theta(z|x)도 계산할 수 없어 EM을 못 쓰고, 평균장(mean-field) 변분 베이즈의 적분도 풀리지 않습니다.
  2. 큰 데이터셋. 전체 데이터를 한 번에 쓰는 최적화는 너무 비싸서 미니배치로 갱신하고 싶습니다. 몬테카를로 EM은 데이터마다 비싼 샘플링 반복이 필요해 너무 느립니다.

논문은 이 상황에서 ① θ\theta의 근사 최대가능도 · MAP 추정(새 데이터 생성) ② zz의 사후 추론(표현 학습) ③ xx의 주변 추론(잡음 제거 · 초해상도 등)을 효율적으로 하려 합니다.

핵심 아이디어

1. 인식 모델 — 사후분포를 신경망으로 근사하기

한 문장 직관: 범인을 매번 처음부터 추리(비싼 샘플링)하는 대신, "단서를 보면 용의자 분포를 바로 말해 주는" 숙련된 형사(인코더)를 훈련시키는 것입니다(해설용 비유).

단계별 설명

  1. 계산할 수 없는 진짜 사후분포 pθ(z∣x)p_\theta(z|x) 대신 근사 분포 qϕ(z∣x)q_\phi(z|x), 즉 인식 모델(recognition model) 을 둡니다.
  2. 평균장 변분 추론과 달리 qϕq_\phi는 성분별로 분해될 필요가 없고, ϕ\phi를 닫힌 식으로 계산하지 않고 θ\theta와 함께 학습합니다.
  3. zz를 데이터의 "코드"로 보아 qϕ(z∣x)q_\phi(z|x)를 확률적 인코더, pθ(x∣z)p_\theta(x|z)를 확률적 디코더라 부릅니다.
  4. 인코더는 zz 하나가 아니라 zz의 분포(예: 정규분포의 평균 · 표준편차)를 내놓습니다.

수식

qϕ(z∣x)≈pθ(z∣x)=pθ(x∣z) pθ(z)pθ(x)q_\phi(z \mid x) \approx p_\theta(z \mid x) = \frac{p_\theta(x \mid z)\, p_\theta(z)}{p_\theta(x)}
기호뜻
xx관측 데이터 하나(예: 이미지)
zz잠재 변수(연속값 벡터)
pθ(z)p_\theta(z)사전분포 — 데이터를 보기 전 zz의 분포
pθ(x∣z)p_\theta(x \mid z)가능도 · 디코더 — zz에서 xx가 나올 확률
pθ(z∣x)p_\theta(z \mid x)진짜 사후분포 — xx를 봤을 때 zz의 분포 (계산 불가)
qϕ(z∣x)q_\phi(z \mid x)근사 사후분포 · 인코더
θ\theta, ϕ\phi생성 모델 · 인식 모델의 파라미터

왜 이렇게 했나

데이터마다 따로 사후분포를 최적화하거나 MCMC로 샘플링하면 데이터가 많을 때 감당할 수 없습니다. 인식 모델은 한 번 학습해 두면 새 xx에 대해 한 번의 계산(조상 샘플링) 으로 근사 사후분포를 줍니다. 이 "추론 비용을 모든 데이터가 나눠 내는" 방식이 큰 데이터셋에서 효율을 냅니다.

2. 변분 하한(ELBO) — 계산할 수 없는 것 대신 그 아래 바닥을 올리기

한 문장 직관: 건물 높이(로그 가능도)를 직접 잴 수 없으면, 확실히 그보다 낮은 "바닥 높이"를 재서 그 바닥을 최대한 올립니다. 바닥과 건물 사이 틈이 qq와 진짜 사후분포의 차이입니다(해설용 비유).

단계별 설명

  1. 전체 로그 가능도는 데이터별 로그 가능도의 합이고, 하나의 로그 가능도는 두 조각으로 정확히 나뉩니다(식 1).
  2. 첫 조각은 qq와 진짜 사후분포 사이의 KL 발산으로, 항상 0 이상입니다.
  3. 그래서 둘째 조각 L\mathcal{L}은 로그 가능도보다 항상 작거나 같은 하한입니다.
  4. L\mathcal{L}을 키우면 로그 가능도가 오르거나, qq가 진짜 사후분포에 가까워지거나, 둘 다입니다.
  5. L\mathcal{L}은 "KL 규제항 + 재구성항"으로 다시 쓸 수 있습니다(식 3).

수식 (논문 식 1 · 2 · 3)

log⁡pθ(x(i))=DKL ⁣(qϕ(z∣x(i)) ∥ pθ(z∣x(i)))+L(θ,ϕ;x(i))\log p_\theta(x^{(i)}) = D_{KL}\!\left(q_\phi(z|x^{(i)}) \,\|\, p_\theta(z|x^{(i)})\right) + \mathcal{L}(\theta, \phi; x^{(i)})
log⁡pθ(x(i)) ≥ L(θ,ϕ;x(i))=Eqϕ(z∣x) ⁣[−log⁡qϕ(z∣x)+log⁡pθ(x,z)]\log p_\theta(x^{(i)}) \ \ge\ \mathcal{L}(\theta, \phi; x^{(i)}) = \mathbb{E}_{q_\phi(z|x)}\!\left[-\log q_\phi(z|x) + \log p_\theta(x, z)\right]
L(θ,ϕ;x(i))=−DKL ⁣(qϕ(z∣x(i)) ∥ pθ(z))+Eqϕ(z∣x(i)) ⁣[log⁡pθ(x(i)∣z)]\mathcal{L}(\theta, \phi; x^{(i)}) = -D_{KL}\!\left(q_\phi(z|x^{(i)}) \,\|\, p_\theta(z)\right) + \mathbb{E}_{q_\phi(z|x^{(i)})}\!\left[\log p_\theta(x^{(i)}|z)\right]

기호 풀이

기호뜻
DKL(q ∥ p)D_{KL}(q \,\Vert\, p)KL 발산 — 두 분포가 얼마나 다른지(0 이상, 같으면 0)
L\mathcal{L}변분 하한(ELBO, evidence lower bound)
Eq[⋅]\mathbb{E}_{q}[\cdot]zz를 qq에서 뽑았을 때의 평균
log⁡pθ(x,z)\log p_\theta(x, z)log⁡pθ(z)+log⁡pθ(x∣z)\log p_\theta(z) + \log p_\theta(x \mid z)
식 3 첫째 항근사 사후분포가 사전분포에서 너무 멀어지지 않게 하는 규제항
식 3 둘째 항zz로 xx를 얼마나 잘 되살리나 — 음의 재구성 오차

숫자로 해 보기 (해설용 예 — zz가 두 값뿐인 장난감 모델)

z∈{1,2}z \in \{1, 2\}, 사전분포 p(z=1)=p(z=2)=0.5p(z{=}1) = p(z{=}2) = 0.5, 어떤 xx에 대해 p(x∣z=1)=0.8p(x|z{=}1) = 0.8, p(x∣z=2)=0.2p(x|z{=}2) = 0.2라 합시다.

  1. 진짜 값: p(x)=0.5⋅0.8+0.5⋅0.2=0.5p(x) = 0.5 \cdot 0.8 + 0.5 \cdot 0.2 = 0.5, log⁡p(x)=−0.6931\log p(x) = -0.6931
  2. 진짜 사후분포: p(z=1∣x)=0.4/0.5=0.8p(z{=}1|x) = 0.4 / 0.5 = 0.8, p(z=2∣x)=0.2p(z{=}2|x) = 0.2
  3. 근사 q=(0.6,0.4)q = (0.6, 0.4)로 두고 하한 계산: p(x,z=1)=0.4p(x, z{=}1) = 0.4, p(x,z=2)=0.1p(x, z{=}2) = 0.1

    L=0.6(log⁡0.4−log⁡0.6)+0.4(log⁡0.1−log⁡0.4)=0.6(−0.4055)+0.4(−1.3863)=−0.7978\mathcal{L} = 0.6(\log 0.4 - \log 0.6) + 0.4(\log 0.1 - \log 0.4) = 0.6(-0.4055) + 0.4(-1.3863) = -0.7978

  4. 틈(KL): 0.6log⁡(0.6/0.8)+0.4log⁡(0.4/0.2)=−0.1726+0.2773=0.10470.6 \log(0.6/0.8) + 0.4 \log(0.4/0.2) = -0.1726 + 0.2773 = 0.1047
  5. 확인: −0.7978+0.1047=−0.6931=log⁡p(x)-0.7978 + 0.1047 = -0.6931 = \log p(x) ✓

qq를 진짜 사후분포 (0.8,0.2)(0.8, 0.2)로 바꾸면 KL이 0, 하한이 정확히 −0.6931-0.6931이 됩니다.

왜 이렇게 했나

log⁡pθ(x)\log p_\theta(x)는 적분 때문에 계산도 미분도 못 하지만, L\mathcal{L}은 qq의 샘플로 근사할 수 있는 기댓값입니다. 문제는 ϕ\phi에 대한 기울기입니다. 흔한 몬테카를로 추정(점수 함수 방식, ∇ϕlog⁡qϕ\nabla_\phi \log q_\phi를 곱함)은 분산이 매우 커서 실용적이지 않다고 논문은 지적합니다. 그 해결책이 다음 절입니다.

3. 재매개변수화 트릭 — 무작위성을 바깥으로 빼기

한 문장 직관: "주사위를 굴려 나온 위치"는 미분할 수 없지만, "주사위는 따로 굴리고, 그 눈금을 평균만큼 옮기고 표준편차만큼 늘린 위치"는 평균 · 표준편차로 미분할 수 있습니다(해설용 비유).

단계별 설명

  1. z∼qϕ(z∣x)z \sim q_\phi(z|x)처럼 "ϕ\phi에 의존하는 분포에서 뽑는다"는 연산은 ϕ\phi로 미분할 수 없습니다.
  2. 그래서 zz를 ϕ\phi와 무관한 잡음 ϵ\epsilon 과 미분 가능한 함수 gϕg_\phi로 나눠 씁니다: z=gϕ(ϵ,x)z = g_\phi(\epsilon, x), ϵ∼p(ϵ)\epsilon \sim p(\epsilon).
  3. 이제 무작위성은 ϵ\epsilon에만 있어, 기댓값을 ϵ\epsilon에 대한 기댓값으로 바꿔 쓰면 샘플 평균이 ϕ\phi로 미분 가능해집니다.
  4. 정규분포라면 z=μ+σϵz = \mu + \sigma \epsilon, ϵ∼N(0,1)\epsilon \sim \mathcal{N}(0, 1)이 바로 그런 변환입니다.

수식 (논문 식 4 · 5)

z=gϕ(ϵ,x),ϵ∼p(ϵ)z = g_\phi(\epsilon, x), \quad \epsilon \sim p(\epsilon)
Eqϕ(z∣x(i))[f(z)]=Ep(ϵ) ⁣[f(gϕ(ϵ,x(i)))]≃1L∑l=1Lf(gϕ(ϵ(l),x(i))),ϵ(l)∼p(ϵ)\mathbb{E}_{q_\phi(z|x^{(i)})}[f(z)] = \mathbb{E}_{p(\epsilon)}\!\left[f(g_\phi(\epsilon, x^{(i)}))\right] \simeq \frac{1}{L} \sum_{l=1}^{L} f(g_\phi(\epsilon^{(l)}, x^{(i)})), \quad \epsilon^{(l)} \sim p(\epsilon)

기호 풀이

기호뜻
ϵ\epsilon보조 잡음 변수 — 분포가 ϕ\phi와 무관
p(ϵ)p(\epsilon)잡음의 분포(예: 표준정규분포)
gϕg_\phi잡음과 데이터를 받아 zz를 만드는 미분 가능한 함수
f(z)f(z)기댓값을 구할 임의의 함수(예: log⁡pθ(x,z)−log⁡qϕ(z∣x)\log p_\theta(x, z) - \log q_\phi(z \mid x))
LL데이터 하나당 뽑는 잡음 샘플 수

숫자로 해 보기 (해설용 예)

인코더가 어떤 xx에 대해 μ=2\mu = 2, σ=0.5\sigma = 0.5를 냈고, 잡음 ϵ=0.4\epsilon = 0.4를 뽑았다고 합시다.

  1. z=2+0.5×0.4=2.2z = 2 + 0.5 \times 0.4 = 2.2
  2. ∂z/∂μ=1\partial z / \partial \mu = 1, ∂z/∂σ=ϵ=0.4\partial z / \partial \sigma = \epsilon = 0.4
  3. 디코더 손실이 f(z)=(z−3)2f(z) = (z - 3)^2이라 하면(해설용 함수) f′(z)=2(z−3)=−1.6f'(z) = 2(z - 3) = -1.6
  4. 연쇄 법칙: ∂f/∂μ=−1.6×1=−1.6\partial f/\partial \mu = -1.6 \times 1 = -1.6, ∂f/∂σ=−1.6×0.4=−0.64\partial f/\partial \sigma = -1.6 \times 0.4 = -0.64

기울기가 인코더 출력 μ,σ\mu, \sigma까지 그대로 역전파됩니다. "zz를 뽑았다"는 무작위 단계가 계산 그래프를 끊지 않습니다.

어떤 분포에 쓸 수 있나: 논문은 세 경우를 듭니다. ① 역누적분포함수(역CDF)를 계산할 수 있는 분포(예: 지수 · 로지스틱) ② 위치-척도 분포(예: 라플라스 · 스튜던트 t · 정규) — g=위치+척도⋅ϵg = \text{위치} + \text{척도} \cdot \epsilon ③ 보조 변수의 합성으로 표현되는 분포(예: 로그정규 · 감마 · 디리클레).

왜 이렇게 했나

점수 함수 방식의 높은 분산을 피하고, 하한 추정치를 표준 확률적 경사 방법(SGD, Adagrad)으로 곧바로 최적화할 수 있게 하려는 것입니다.

4. SGVB 추정량과 AEVB 알고리즘

한 문장 직관: 하한을 "미니배치 + 잡음 한 번 뽑기"로 추정하고, 그 추정치를 미분해 인코더 · 디코더를 동시에 한 걸음씩 고치는 반복입니다(해설용 비유).

단계별 설명

  1. 재매개변수화를 하한에 적용하면 SGVB(Stochastic Gradient Variational Bayes) 추정량이 됩니다.
  2. 두 가지 버전이 있습니다. A형(식 6)은 식 2를 그대로 샘플링하고, B형(식 7)은 KL 항을 해석적으로 계산하고 재구성항만 샘플링합니다. B형이 보통 분산이 더 작습니다.
  3. 전체 데이터 NN개 중 MM개 미니배치로 전체 하한을 추정합니다(식 8).
  4. AEVB(Auto-Encoding VB) 알고리즘: 미니배치 뽑기 → 잡음 뽑기 → 추정량의 기울기 계산 → SGD나 Adagrad로 θ,ϕ\theta, \phi 갱신 → 수렴할 때까지 반복.
  5. 논문 실험에서는 M=100M = 100, L=1L = 1을 썼습니다. 미니배치가 충분히 크면(예: M=100M = 100) 데이터당 샘플 1개로 충분했다고 보고합니다.

수식 (논문 식 7 · 8)

L~B(θ,ϕ;x(i))=−DKL ⁣(qϕ(z∣x(i)) ∥ pθ(z))+1L∑l=1Llog⁡pθ(x(i)∣z(i,l)),z(i,l)=gϕ(ϵ(i,l),x(i))\widetilde{\mathcal{L}}^{B}(\theta, \phi; x^{(i)}) = -D_{KL}\!\left(q_\phi(z|x^{(i)}) \,\|\, p_\theta(z)\right) + \frac{1}{L}\sum_{l=1}^{L} \log p_\theta(x^{(i)} \mid z^{(i,l)}), \quad z^{(i,l)} = g_\phi(\epsilon^{(i,l)}, x^{(i)})
L(θ,ϕ;X)≃L~M(θ,ϕ;XM)=NM∑i=1ML~(θ,ϕ;x(i))\mathcal{L}(\theta, \phi; X) \simeq \widetilde{\mathcal{L}}^{M}(\theta, \phi; X^M) = \frac{N}{M} \sum_{i=1}^{M} \widetilde{\mathcal{L}}(\theta, \phi; x^{(i)})
기호뜻
L~\widetilde{\mathcal{L}}하한의 확률적 추정치
NN, MM전체 데이터 수, 미니배치 크기
XMX^M무작위로 뽑은 미니배치
N/MN/M미니배치 합을 전체 데이터 규모로 키우는 배율

숫자로 해 보기 (해설용 예)

N=1000N = 1000, M=100M = 100이면 배율은 10입니다. 미니배치 100개의 하한 합이 −120-120이면 전체 하한 추정치는 −1200-1200입니다. 미니배치마다 값은 흔들리지만 평균적으로는 전체 하한과 같습니다.

오토인코더와의 연결: 식 7의 첫째 항(KL)은 규제항, 둘째 항은 오토인코더 용어로 음의 재구성 오차입니다. gϕg_\phi가 "인코더", log⁡pθ(x∣z)\log p_\theta(x|z)가 "디코더" 역할을 해서 이름이 Auto-Encoding VB입니다.

5. 변분 오토인코더 — 정규분포로 구체화하기

한 문장 직관: 인코더는 "이 이미지의 코드는 대략 여기쯤, 이만큼 불확실" (평균 · 표준편차)을 말하고, 디코더는 그 근처에서 뽑은 코드로 이미지를 다시 그립니다(해설용 비유).

단계별 설명

  1. 사전분포는 파라미터 없는 표준정규분포 pθ(z)=N(z;0,I)p_\theta(z) = \mathcal{N}(z; 0, I)입니다.
  2. 디코더 pθ(x∣z)p_\theta(x|z)는 실수 데이터면 다변량 정규, 이진 데이터면 베르누이이고, 그 파라미터를 은닉층 하나짜리 MLP가 zz에서 계산합니다. 이때 진짜 사후분포는 계산할 수 없습니다.
  3. 근사 사후분포는 대각 공분산 정규분포 N(z;μ(i),σ2(i)I)\mathcal{N}(z; \mu^{(i)}, \sigma^{2(i)} I)로 두고, μ(i)\mu^{(i)} · σ(i)\sigma^{(i)}는 인코더 MLP가 냅니다. 논문은 이것이 단순화를 위한 선택일 뿐 방법의 한계는 아니라고 밝힙니다.
  4. 샘플은 z(i,l)=μ(i)+σ(i)⊙ϵ(l)z^{(i,l)} = \mu^{(i)} + \sigma^{(i)} \odot \epsilon^{(l)}, ϵ(l)∼N(0,I)\epsilon^{(l)} \sim \mathcal{N}(0, I)입니다(⊙\odot은 원소별 곱).
  5. 사전분포와 근사 사후분포가 모두 정규라 KL 항은 닫힌 식으로 계산됩니다(부록 B).

수식 (논문 식 10)

L(θ,ϕ;x(i))≃12∑j=1J(1+log⁡((σj(i))2)−(μj(i))2−(σj(i))2)+1L∑l=1Llog⁡pθ(x(i)∣z(i,l))\mathcal{L}(\theta, \phi; x^{(i)}) \simeq \frac{1}{2}\sum_{j=1}^{J}\left(1 + \log\big((\sigma_j^{(i)})^2\big) - (\mu_j^{(i)})^2 - (\sigma_j^{(i)})^2\right) + \frac{1}{L}\sum_{l=1}^{L} \log p_\theta(x^{(i)} \mid z^{(i,l)})

베르누이 디코더(부록 C.1):

log⁡p(x∣z)=∑i=1D[xilog⁡yi+(1−xi)log⁡(1−yi)],y=fσ ⁣(W2tanh⁡(W1z+b1)+b2)\log p(x \mid z) = \sum_{i=1}^{D} \Big[x_i \log y_i + (1 - x_i) \log(1 - y_i)\Big], \quad y = f_\sigma\!\big(W_2 \tanh(W_1 z + b_1) + b_2\big)

기호 풀이

기호뜻
JJ잠재 변수 zz의 차원
μj(i)\mu_j^{(i)}, σj(i)\sigma_j^{(i)}인코더가 낸 jj번째 차원의 평균 · 표준편차
첫째 합−DKL(q ∥ N(0,I))-D_{KL}(q \,\Vert\, \mathcal{N}(0, I))의 닫힌 식
DD데이터 xx의 차원(예: 픽셀 수)
xi∈{0,1}x_i \in \{0, 1\}ii번째 픽셀(이진)
yiy_i디코더가 낸 "그 픽셀이 1일 확률"
fσf_\sigma, WW, bb원소별 시그모이드, 디코더 MLP의 가중치 · 편향

숫자로 해 보기 (해설용 예 — 하한 한 번 손계산)

잠재 차원 J=2J = 2, 픽셀 D=2D = 2인 장난감 경우입니다.

  1. 인코더 출력: μ=(0.5, 0)\mu = (0.5,\ 0), σ=(1, 0.5)\sigma = (1,\ 0.5)
  2. KL 항 차원별:
    • j=1j = 1: 1+log⁡1−0.25−1=−0.251 + \log 1 - 0.25 - 1 = -0.25
    • j=2j = 2: 1+log⁡0.25−0−0.25=1−1.386−0.25=−0.6361 + \log 0.25 - 0 - 0.25 = 1 - 1.386 - 0.25 = -0.636
    • 합 ×12\times \tfrac{1}{2}: 12(−0.886)=−0.443\tfrac{1}{2}(-0.886) = -0.443 → KL =0.443= 0.443
  3. 잡음 ϵ=(0.4,−1)\epsilon = (0.4, -1)로 z=(0.5+1×0.4, 0+0.5×(−1))=(0.9, −0.5)z = (0.5 + 1 \times 0.4,\ 0 + 0.5 \times (-1)) = (0.9,\ -0.5)
  4. 디코더가 이 zz로 y=(0.8,0.3)y = (0.8, 0.3)을 냈고 실제 이미지가 x=(1,0)x = (1, 0)이라면

    재구성항 =log⁡0.8+log⁡(1−0.3)=−0.223−0.357=−0.580= \log 0.8 + \log(1 - 0.3) = -0.223 - 0.357 = -0.580

  5. 하한 L≈−0.443+(−0.580)=−1.023\mathcal{L} \approx -0.443 + (-0.580) = -1.023

학습은 이 값을 키우도록 인코더와 디코더를 함께 고칩니다. μ=0\mu = 0, σ=1\sigma = 1이면 각 차원 항이 1+0−0−1=01 + 0 - 0 - 1 = 0, 즉 사전분포와 같으면 KL 비용이 없습니다.

왜 이렇게 했나

정규분포는 위치-척도 분포라 재매개변수화가 간단하고, 정규 대 정규의 KL이 닫힌 식이라 그 항을 샘플링하지 않아도 됩니다(분산이 줄어듦). 대각 공분산은 차원마다 평균 · 표준편차만 내면 되어 인코더 출력이 단순합니다.

6. 처리 흐름

mermaid
flowchart LR
    A["데이터 x<br/>(미니배치 M=100)"] --> B["인코더 MLP q_φ(z|x)<br/>평균 μ · 표준편차 σ 출력"]
    E["잡음 ε ~ N(0, I)"] --> C
    B --> C["재매개변수화<br/>z = μ + σ ⊙ ε"]
    C --> D["디코더 MLP p_θ(x|z)<br/>베르누이 또는 정규 출력"]
    D --> F["재구성항 log p_θ(x|z)"]
    B --> G["KL 항 (닫힌 식)<br/>q_φ(z|x) vs N(0, I)"]
    F --> H["하한 L = 재구성 − KL"]
    G --> H
    H --> I["기울기로 θ · φ 함께 갱신<br/>(SGD · Adagrad)"]

결과

모든 수치 · 설정은 논문이 보고한 것입니다.

실험 설정

  • 데이터: MNIST(손글씨 숫자)와 Frey Face(얼굴 이미지). Frey Face는 연속값이라 정규 출력 디코더를 쓰고, 평균은 시그모이드로 (0, 1) 구간에 묶었습니다.
  • 인코더와 디코더의 은닉 유닛 수는 같게 했습니다. MNIST는 500, Frey Face는 200(데이터가 훨씬 작아 과적합을 막으려고).
  • 모든 파라미터를 N(0,0.01)\mathcal{N}(0, 0.01)에서 초기화하고, p(θ)=N(0,I)p(\theta) = \mathcal{N}(0, I)에 해당하는 작은 가중치 감쇠를 더해 MAP 기준으로 최적화했습니다.
  • Adagrad 전역 보폭은 {0.01, 0.02, 0.1} 중에서 골랐고, M=100M = 100, L=1L = 1.
  • 비교 대상: wake-sleep(같은 인코더 사용), 주변 가능도 실험에서는 HMC 샘플러를 쓴 몬테카를로 EM(MCEM).

변분 하한 비교 (논문 그림 2)

  • 잠재 차원을 MNIST Nz∈{3,5,10,20,200}N_z \in \{3, 5, 10, 20, 200\}, Frey Face Nz∈{2,5,10,20}N_z \in \{2, 5, 10, 20\}로 바꿔 가며 비교했습니다.
  • 모든 실험에서 AEVB가 wake-sleep보다 훨씬 빨리 수렴했고 더 좋은 해에 도달했습니다.
  • 잠재 변수를 필요 이상으로 많이 둬도 과적합이 생기지 않았습니다. 논문은 이를 변분 하한의 규제 효과로 설명합니다.
  • 계산은 실효 40 GFLOPS로 돌아가는 Intel Xeon CPU에서 학습 샘플 100만 개당 약 20~40분이 걸렸습니다.

주변 가능도 비교 (논문 그림 3)

  • 잠재 공간이 아주 낮은 차원일 때만 MCMC 추정기로 주변 가능도를 믿을 만하게 추정할 수 있어서, 은닉 유닛 100개 · 잠재 변수 3개짜리 모델을 MNIST로 학습했습니다.
  • 학습셋 크기 Ntrain=1000N_{\text{train}} = 1000과 5000050000에서 AEVB · wake-sleep · MCEM의 수렴 속도를 비교했습니다.
  • MCEM은 온라인 알고리즘이 아니어서(AEVB · wake-sleep과 달리) 전체 MNIST 데이터셋에 효율적으로 적용할 수 없었습니다.

시각화 (부록 A)

잠재 공간을 2차원으로 두고 고른 격자 좌표를 정규분포의 역CDF로 바꿔 zz를 만든 뒤 디코더 출력을 그려, MNIST · Frey Face의 학습된 다양체를 보였습니다. 잠재 차원(2, 5, 10, 20)별 무작위 샘플도 함께 제시합니다.

왜 중요한가 · 이후 영향

  • 재매개변수화 트릭은 딥러닝의 표준 도구가 됐습니다. 무작위 샘플링을 거치는 모델을 역전파로 학습하는 대표 방법으로, VAE 밖의 확률적 신경망에서도 널리 쓰입니다.
  • 딥러닝과 베이즈 추론을 이었습니다. "인코더 = 근사 추론, 디코더 = 생성 모델, 목표 = 변분 하한"이라는 틀은 이후 수많은 잠재 변수 모델의 출발점이 됐습니다.
  • 생성 모델의 한 축이 됐습니다. GAN · 확산 모델(DDPM)과 함께 대표적인 심층 생성 모델 계열이며, DDPM의 학습 목표도 변분 하한에서 출발합니다.
  • 잠재 공간을 부품으로 쓰는 흐름. 오늘날 이미지 생성 모델 중에는 VAE 계열 인코더로 이미지를 작은 잠재 공간으로 압축한 뒤 그 안에서 생성하는 방식이 많습니다.

한계 · 주의할 점

  • 연속 잠재 변수에 한정됩니다. 재매개변수화는 zz가 연속이고 미분 가능한 변환이 있을 때 씁니다. 논문도 wake-sleep의 장점으로 이산 잠재 변수에도 적용된다는 점을 듭니다.
  • 근사 사후분포의 형태가 제한적입니다. 실험은 대각 공분산 정규분포를 썼습니다. 진짜 사후분포가 이와 많이 다르면 하한과 로그 가능도 사이의 틈(KL)이 남고, 하한이 올라도 qq가 좋아진 것인지 모델이 좋아진 것인지 구분되지 않습니다.
  • 실험 규모가 작습니다. MNIST · Frey Face와 은닉층 하나짜리 MLP로 검증했고, 대규모 이미지 생성 품질은 이 논문의 범위 밖입니다. 주변 가능도 추정기도 잠재 차원이 5 미만일 때만 믿을 만하다고 논문이 밝힙니다.

이어서 읽을 것

  • 같은 트랙: GAN — 하한 대신 판별자와의 경쟁으로 생성 모델을 학습
  • 같은 트랙: DDPM — 변분 하한에서 출발한 확산 생성 모델
  • 기초: 역전파(1986) — 재매개변수화 뒤 기울기를 전달하는 방법
  • 기초: Adam — 같은 1저자(Kingma)의 최적화 방법, 이후 VAE 학습에도 널리 쓰임

용어 정리

용어쉬운 뜻
잠재 변수(latent variable)관측되지 않지만 데이터를 만들어 낸 숨은 요인
사전분포(prior)데이터를 보기 전 잠재 변수에 대한 믿음, 여기선 N(0,I)\mathcal{N}(0, I)
사후분포(posterior)데이터를 본 뒤 잠재 변수의 분포 p(z∣x)p(z \mid x)
주변 가능도(marginal likelihood)잠재 변수를 모두 적분해 없앤 p(x)p(x)
계산 불가능(intractable)닫힌 식이나 현실적 계산으로 구할 수 없음
KL 발산두 확률분포의 차이를 재는 값(0 이상)
변분 하한(ELBO)로그 가능도보다 항상 작거나 같은, 최대화 가능한 목표
인코더 · 디코더qϕ(z∣x)q_\phi(z \mid x): xx → zz의 분포 · pθ(x∣z)p_\theta(x \mid z): zz → xx의 분포
재매개변수화 트릭z=μ+σϵz = \mu + \sigma\epsilon처럼 무작위성을 잡음으로 빼 미분 가능하게 함
SGVB · AEVB재매개변수화한 하한 추정량 · 그것으로 인코더와 디코더를 함께 학습하는 알고리즘

스스로 점검

1. 변분 하한 L\mathcal{L}이 왜 로그 가능도의 "하한"인가요? 답: log⁡pθ(x)=DKL(qϕ(z∣x) ∥ pθ(z∣x))+L\log p_\theta(x) = D_{KL}(q_\phi(z|x) \,\|\, p_\theta(z|x)) + \mathcal{L}이고 KL 발산은 항상 0 이상이기 때문입니다. qq가 진짜 사후분포와 같아지면 KL이 0이 되어 하한이 로그 가능도와 같아집니다.

2. 재매개변수화 트릭이 없으면 무엇이 문제인가요? 답: zz를 qϕq_\phi에서 직접 뽑으면 그 단계를 ϕ\phi로 미분할 수 없고, 대안인 점수 함수 방식은 분산이 너무 큽니다. z=μ+σϵz = \mu + \sigma\epsilon으로 바꾸면 기울기가 μ,σ\mu, \sigma를 거쳐 인코더까지 전달됩니다.

3. 식 7(또는 식 10)의 두 항은 오토인코더 관점에서 각각 무엇인가요? 답: 첫째 항(음의 KL)은 인코더의 분포를 사전분포 가까이 붙잡는 규제항이고, 둘째 항 log⁡pθ(x∣z)\log p_\theta(x|z)는 뽑은 zz로 xx를 얼마나 잘 되살리는지 나타내는 음의 재구성 오차입니다.

다음에 볼 것

이 글을 이해했다면 이어서 보면 좋은 항목입니다.

출처

  • 원문: https://arxiv.org/abs/1312.6114 (2013 · Diederik P. Kingma 외)

AI 원리부터 이해하기 · 생성 모델 모듈

생성 모델 모듈 학습

이 글은 생성 모델 모듈의 학습 자료입니다. 전체 10개 자료 중 3번째입니다.

AI 기초 과정은 현재 진도 저장을 지원하지 않습니다.

출처·원문

원문 보기

요약만

arXiv (논문별 상이)

arXiv 1312.6114