📌 최근 생성형 모델에서 주목받고 있는 diffusion 모델을 공부하기 전에 필수로 알아야할 VAE논문을 리뷰해보도록 하겠습니다.
🙎 Abstract
어떤 데이터(이미지)가 숨겨진 정보(잠재 변수)로부터 만들어졌다고 가정할 때, 이 숨겨진 정보가 정확히 어떤 값인지 알기 어렵고 이를 계산하려면 매우 복잡한 적분이 필요해서 불가능한 경우가 많다. 또한 데이터가 많아진다면 계산은 더욱 복잡해진다.
즉, 잠재 변수가 있는 복잡한 확률 모델을 학습하고 싶은데 수학적으로 매우 어렵기 떄문에 이를 해결하고자 한다.
🤷 How?
그럼 어떻게 가능할까?
논문에선 다음과 같이 설명한다.
변분 하한(Variational Lower Bound)을 재구성하여, 표준 확률적 경사 하강법(Stochastic Gradient Descent)으로 간단하게 최적화할 수 있는 하한 추정기(Lower Bound Estimator)를 제안합니다.
각각의 데이터에 대해 연속적인 잠재변수가 존재하는 i.i.d. 데이터셋의 경우, 우리가 제안한 하한 추정기를 통해 근사 추론 모델(Recognition Model)을 학습함으로써 후방 추론을 매우 효율적으로 수행할 수 있습니다.
쉽게 표현하면 아래와 같습니다.
-
어려운 수식을 쉽게 만든다.
복잡한 확률 계산을 샘플링과 미분 가능한 함수로 바꾸는 재매개변수화 기법을 사용하여 GPU에서 돌릴 수 있는 형태로 만든다.
-
인코더라는 역할을 하는 모델을 같이 학습한다.
데이터를 보면 그에 맞는 잠재 변수의 분포를 뽑아주는 추론 네트워크를 만들어 데이터에 숨겨진 정보를 빠르게 예측한다.
🔶 Introduction
이미지가 잠재변수 z로부터 생성된다고 가정해봅시다. 그런데 그 이미지 x를 보고 z가 어떤 값일지 추론하고 싶다면 우리는 p(z∣x), 즉 후방분포(posterior) 를 계산해야 합니다.
그런데 이를 구하려면 적분이 필요한데 너무 복잡해서 직접 구할 수 없습니다. 그래서 정확한 분포는 몰라도 비슷한 분포로 대신하자는 것이 변분추론입니다.
즉, 복잡한 p(z∣x) 대신에 근사 분포인 q(z∣x)를 사용하고 이 값이 최대한 p(z∣x)와 비슷해지도록 만드는 것이 목적입니다.
Mean Field
위 변분 추론에서 가장 많이 쓰이는 방법 중 하나가 Mean-field입니다.
이 방법은 복잡한 분포를 쉽게 만들기 위해서, 잠재 변수 z의 각 차원을 서로 독립이라고 가정해서
q(z1,z2,z3)≈q(z1)q(z2)q(z3)
이렇게 식을 단순화 합니다.
하지만 문제점이 하나 있습니다.
이 q(z) 를 잘 만들기 위해서는 KL divergence 같은 손실함수를 계산해서 최대한 p(z)와 비슷하게 만들어야 하는데, 이 수식에 기대값(expectation) 계산이 들어갑니다.
Eq(z)[logp(x,z)]
그런데 이 기대값을 계산하려면 또다시 수학적으로 복잡한 적분이 필요하게 됩니다. 결국 Mean Field로 단순화 하려했지만 여전히 학습하려면 계산에 문제가 생깁니다.
🧠 핵심 아이디어: Recognition Model (확률 인코더)
이 문제를 해결하기 위해 우리는 Recognition Model qϕ(z∣x) 를 도입합니다.
이는 계산이 불가능한 진짜 후방 분포 pθ(z∣x) 를 근사합니다.
파라미터 ϕ 또한 수식으로 계산하지 않고 학습을 통해 최적화합니다.
따라서 qϕ(z∣x) 는 확률적 인코더 (probabilistic encoder) 로, 주어진 x에 대해 그로부터 생성되었을 법한 z 분포를 출력합니다.
반대로 pθ(x∣z) 는 확률적 디코더 (probabilistic decoder) 로, 주어진 z로부터 가능한 x를 생성하는 분포를 의미합니다. 디코더는 근사가 아니라 모델이 직접 정의한 확률이기 때문에 pθ로 표시합니다.
📘 VAE의 핵심 수식과 개념 정리
✅ 1. 마진 우도 (Marginal Likelihood)
VAE에서 우리가 모델링하고 싶은 건 관측 데이터 x가 얼마나 그럴듯한지, 즉 확률 p(x)입니다.
이 때, 모델은 다음과 같은 방식으로 데이터를 생성한다고 가정합니다:
- 잠재 변수 z∼p(z) (사전 분포)
- x∼p(x∣z) (조건부 생성)
따라서 전체 데이터 x의 확률(마진 우도)은 다음처럼 z에 대해 적분해야 합니다:
p(x)=∫p(x,z)dz=∫p(x∣z)p(z)dz
📌 의미
- 모든 가능한 z에 대해 x가 나올 확률을 다 더한 것
- 즉, z가 어떤 값이든 간에 x가 만들어질 확률의 가중 평균
✅ 2. 적분을 기대값으로 바꾸는 트릭
이 적분은 직접 계산하기 어렵기 때문에, 다음과 같이 분수로 감싸서 형태를 바꿉니다:
logpθ(x)=log∫qϕ(z∣x)qϕ(z∣x)pθ(x,z)dz
분자/분모가 같으니 수식은 변하지 않죠.
이를 다시 정리하면:
logpθ(x)=log∫qϕ(z∣x)⋅qϕ(z∣x)pθ(x,z)dz
👉 여기서 중요한 포인트!
∫q(z)f(z)dz=Eq(z)[f(z)]
따라서 위 적분은 다음처럼 기대값 형태로 바뀝니다:
logpθ(x)=logEqϕ(z∣x)[qϕ(z∣x)pθ(x,z)]
✅ 3. ELBO 도출을 위한 기대값 표현
방금 도출한 기대값 표현은 다음과 같은 형태로 이어집니다:
logpθ(x)=logEqϕ(z∣x)[qϕ(z∣x)pθ(x,z)]
여기에 젠슨 부등식(Jensen’s Inequality) 를 적용하면 다음의 ELBO(변분 하한) 이 등장합니다:
logpθ(x)≥Eqϕ(z∣x)[logqϕ(z∣x)pθ(x,z)]
이 우변이 바로 우리가 최적화하려는 ELBO (Evidence Lower Bound) 입니다.
✅ 4. KL divergence의 등장
내가 만든 qϕ(z∣x)는 진짜 pθ(z∣x)와 얼마나 비슷할까?
→ 그 차이를 수치화한 것이 바로 KL divergence입니다:
KL(qϕ(z∣x)∥pθ(z∣x))
이 KL은 다음과 같이 정리됩니다
KL(q(z∣x)∥p(z∣x))=logp(x)−Eq(z∣x)[logq(z∣x)p(x,z)]
정리하면
logp(x)=KL(q(z∣x)∥p(z∣x))+ELBOEq(z∣x)[logq(z∣x)p(x,z)]
결국 KL divergence식을 이항 해보니, 앞서 구한 ELBO가 있습니다. 우리는 logp(x)는 직접 계산할 수 없지만 KL은 항상 0 이상이고, ELBO만 최대화해도 logp(x)를 최대화하는 것과 비슷해집니다!
그렇다면 KL이 항상 양수이기 때문에 식을 다음과 같이 부등호로 표현할 수 있습니다.
logpθ(x)≥L(θ,ϕ;x)=Eqϕ(z∣x)[−logqϕ(z∣x)+logpθ(x,z)](1)
또는 다음과 같이 쓸 수 있습니다.
L(θ,ϕ;x)=−KL(qϕ(z∣x)∥pθ(z))+Eqϕ(z∣x)[logpθ(x∣z)](2)
여기서 두 식이 너무 다른 것처럼 보이지만, 사실 완전히 동일한 식입니다.
이해하기 쉽게 하나씩 바꿔봅시다 👇
🔹 Step 1: 결합 확률을 분해한다
식 (1) 안에는 결합 확률이 들어 있습니다:
logpθ(x,z)
이걸 조건부 확률로 바꾸면:
logpθ(x,z)=logpθ(x∣z)+logpθ(z)
🔹 Step 2: 식 (1)에 대입해서 다시 쓰기
L(θ,ϕ;x)=Eqϕ(z∣x)[−logqϕ(z∣x)+logpθ(x∣z)+logpθ(z)]
이걸 항별로 나누면:
=Eqϕ(z∣x)[logpθ(x∣z)]+Eqϕ(z∣x)[logpθ(z)−logqϕ(z∣x)]
🔹 Step 3: 두 번째 항은 KL divergence
다음 항은 KL divergence의 정의와 같습니다:
Eq(z)[logp(z)−logq(z)]=−KL(q(z)∥p(z))
따라서 최종적으로 다음과 같은 형태로 바뀝니다:
L(θ,ϕ;x)=Eqϕ(z∣x)[logpθ(x∣z)]−KL(qϕ(z∣x)∥pθ(z))(3)
오른쪽 두 항을 다음과 같이 표현합니다.
Reconstruction:Eqϕ(z∣x)[logpθ(x∣z)]
Regularization:−KL(qϕ(z∣x)∥pθ(z))(3)
재구성 항은 주어진 z로 부터 실제 x를 얼마나 잘 복원하는지 나타냅니다.
정규화 항은 근사 posterior가 prior가깝게 만드는 역할을 합니다.
우리는 이 변분 하한을 생성 모델 파라미터 양쪽에 대해 미분하고 최적화하고자 합니다. 하지만 보통 사용되는 Monte Carlo 방식의 기댓값 미분 추정은 분산이 매우 크기 떄문에 학습 과정이 불안정하고 실제로는 잘 동작하지 않습니다.
🔧 2.3 SGVB 추정기와 AEVB 알고리즘
이번 섹션에서는 ELBO(변분 하한)의 실제 추정 방법과 파라미터에 대한 미분 계산법을 소개합니다.
우리는 근사 posterior 분포가 다음과 같은 형태라고 가정합니다:
qϕ(z∣x)
🧠 핵심 아이디어: Reparameterization Trick
어떤 완만한 조건 하에서, 우리는 아래와 같은 방식으로 잠재변수를 재매개화할 수 있습니다:
z=gϕ(ϵ,x),ϵ∼p(ϵ)
여기서:
- ϵ: 노이즈 (예: 표준 정규분포)
- gϕ: 신경망 등으로 구성된 미분 가능한 함수
→ 이렇게 하면 샘플링 과정도 미분 가능하게 만들어, gradient descent로 학습할 수 있게 됩니다!
✅ 기대값의 몬테카를로 근사
이제 어떤 함수 f(z)에 대해:
Eqϕ(z∣x)[f(z)]=Ep(ϵ)[f(gϕ(ϵ,x))]≈L1l=1∑Lf(gϕ(ϵ(l),x))
이 기법을 변분 하한(ELBO)에 적용하면 다음과 같은 SGVB 추정기를 얻습니다:
📌 SGVB 버전 A (결합확률 기반)
L^A(θ,ϕ;x)=L1l=1∑L[logpθ(x,z(l))−logqϕ(z(l)∣x)]
여기서
z(l)=gϕ(ϵ(l),x),ϵ(l)∼p(ϵ)
📘 재매개변수화 트릭 (The Reparameterization Trick)
우리가 계산하려는 기대값은 다음과 같습니다:
Eqϕ(z∣x)[f(z)]=∫qϕ(z∣x)f(z)dz
하지만 문제는 이 안의 z∼qϕ(z∣x)가 샘플링된 확률 변수이기 때문에
파라미터 ϕ 에 대해 직접 미분이 어렵다는 것입니다.
✅ 그래서 필요한 게 Reparameterization Trick!
"z를 직접 샘플링하지 말고,
어떤 노이즈 ϵ∼p(ϵ)를 샘플링한 뒤
z=gϕ(ϵ,x) 와 같은 미분 가능한 함수로 생성하자!"
📌 예: 가우시안 분포에서의 표현
z∼N(μ,σ2)⇒z=μ+σ⋅ϵ,ϵ∼N(0,1)
이렇게 표현하면,
샘플링된 z가 아닌 노이즈 ϵ 에 대해 미분이 가능해집니다.
✅ 기대값 수정
우리가 계산하고자 했던 기대값:
Eqϕ(z∣x)[f(z)]=∫qϕ(z∣x)f(z)dz
위의 z=gϕ(ϵ,x), ϵ∼p(ϵ) 정의에 따라,
다음과 같이 바꿀 수 있습니다:
∫qϕ(z∣x)f(z)dz=∫p(ϵ)f(gϕ(ϵ,x))dϵ
✅ 샘플 평균으로 근사하기
이제 우리는 다음과 같이 샘플링 기반으로 기대값을 근사할 수 있습니다:
Ep(ϵ)[f(gϕ(ϵ,x))]≈L1l=1∑Lf(gϕ(ϵ(l),x)),ϵ(l)∼p(ϵ)
결국 직접 z를 샘플링하지 않고, 미분 가능한 gϕ(ϵ,x)로 변환함으로써 전 과정이 미분 가능해지고, SGD로 학습이 가능해집니다.