CS231n Lecture 13 - Generative Models 1

LECTURE 글 목록
목차

핵심 한 줄 정리

Generative model은 data를 만든 probability distribution을 학습하는 model이며, autoregressive model은 chain rule로 exact likelihood를 계산하고 VAE는 latent variable과 ELBO를 도입해 tractable한 lower bound로 학습한다.

반드시 기억할 개념

Supervised learning과 unsupervised learning

Supervised learning에서는 input과 target의 pair가 주어진다.

D={(x(i),y(i))}i=1N\mathcal{D} = \left\{ \left(x^{(i)},y^{(i)}\right) \right\}_{i=1}^{N}

목표는 training set에서 관찰한 xyx\rightarrow y mapping을 학습하고 새로운 input에도 일반화하는 것이다. Image classification, captioning, object detection, semantic segmentation이 이에 해당한다.

Unsupervised learning에서는 label 없이 sample xx만 주어진다.

D={x(i)}i=1N\mathcal{D} = \left\{ x^{(i)} \right\}_{i=1}^{N}

이때는 data의 cluster, low-dimensional structure, representation, probability density처럼 직접 관찰되지 않은 structure를 찾는다. K-means clustering, PCA, density estimation이 대표적인 예이다.

Supervised와 unsupervised는 label을 사용하는지에 관한 구분이다. Discriminative와 generative는 어떤 probability distribution을 modeling하는지에 관한 구분이다. 두 기준은 서로 다른 축이므로 같은 의미로 섞어 쓰면 안 된다.

Probability distribution의 normalization

Continuous variable xx의 probability density p(x)p(x)는 다음 조건을 만족한다.

p(x)0p(x) \ge 0 p(x)dx=1\int p(x)\,dx = 1

Discrete variable이라면 integral 대신 모든 값에 대한 sum이 1이다.

xp(x)=1\sum_x p(x) = 1

전체 probability mass는 1로 고정되어 있다. 어떤 영역의 probability를 높이면 다른 영역에 배분할 mass는 줄어든다. 결국 probabilistic modeling은 어떤 값들이 서로 probability mass를 놓고 경쟁하는지를 정하는 문제이기도 하다.

Discriminative model

Discriminative model은 input xx가 주어졌을 때 target yy의 conditional distribution을 학습한다.

p(yx)p(y\mid x)

Image classification에서는 각 image마다 class label들이 probability mass를 놓고 경쟁한다.

yp(yx)=1\sum_y p(y\mid x) = 1

Image가 바뀌면 별개의 class distribution이 만들어진다. 서로 다른 image끼리는 probability mass를 경쟁하지 않는다.

Label space가 cat과 dog뿐이라면 input이 monkey나 abstract art여도 model은 cat과 dog의 probability를 합해 1로 만들어야 한다. Standard discriminative classifier는 input 자체가 training distribution 밖이라는 사실을 표현하기 어렵다. 높은 softmax probability가 곧 input이 in-distribution임을 의미하지는 않는다.

Unconditional generative model

Unconditional generative model은 data 자체의 distribution을 학습한다.

p(x)p(x)

Image model이라면 가능한 모든 image xx가 같은 probability mass를 놓고 경쟁한다. Training data와 비슷한 plausible image에는 높은 density를, data distribution에서 벗어난 image에는 낮은 density를 부여해야 한다.

예를 들어 zoo animal image를 modeling한다면 일반적인 animal image에는 상대적으로 높은 density가 필요하고, abstract art에는 낮은 density가 필요하다. 세 다리인 dog와 세 팔인 monkey처럼 둘 다 드문 image라도 실제 세계에서 어느 쪽이 더 plausible한지 반영하려면 object와 world structure를 폭넓게 학습해야 한다.

Unconditional model로 할 수 있는 일은 다음과 같다.

  • 새로운 sample xx를 생성한다.
  • Input의 density를 이용해 outlier를 탐지한다.
  • Label 없이 data structure와 representation을 학습한다.

다만 sampling 결과를 직접 제어할 conditioning signal이 없으므로 실제 생성 application에서는 conditional model이 더 유용한 경우가 많다.

Conditional generative model

Conditional generative model은 condition yy가 주어졌을 때 가능한 output xx의 distribution을 학습한다.

p(xy)p(x\mid y)

yy는 category label, text prompt, 다른 image, audio, video frame처럼 다양한 정보가 될 수 있다. 각 condition마다 모든 output xx가 probability mass를 놓고 경쟁한다.

Text prompt가 person teaching a class on generative models in front of a whiteboard라면 이를 만족하는 image는 하나가 아니다. 사람의 모습, 교실, camera angle, 조명 등이 다른 수많은 image가 가능하다. Conditional generative model은 하나의 deterministic answer가 아니라 가능한 output 전체의 distribution을 나타낸다.

이 관점은 여러 task에 그대로 적용된다.

  • Text-to-text는 prompt에 맞는 여러 문장이나 poem 중 하나를 생성한다.
  • Text-to-image는 같은 description을 만족하는 여러 image를 생성한다.
  • Image-to-video는 한 image 뒤에 이어질 여러 plausible future를 생성한다.

Output에 ambiguity가 존재하고 그 다양성을 보존해야 할 때 generative model이 필요하다. 반대로 정답이 사실상 하나인 task라면 deterministic discriminative model로 충분할 수 있다.

세 probability model의 관계

Discriminative model, unconditional generative model, conditional generative model은 Bayes’ rule로 연결된다.

p(xy)=p(yx)p(x)p(y)p(x\mid y) = \frac{ p(y\mid x)p(x) }{ p(y) }

이론적으로 p(yx)p(y\mid x), p(x)p(x), p(y)p(y)를 알면 p(xy)p(x\mid y)를 얻을 수 있다. 반대로 식을 재배열하면 다른 conditional distribution도 계산할 수 있다.

실제로는 여러 model을 조합해 매번 Bayes’ rule을 계산하기보다 원하는 conditional distribution을 neural network로 직접 학습하는 경우가 많다. 다만 diffusion model의 classifier guidance나 classifier-free guidance처럼 conditional과 unconditional signal을 함께 사용하는 방법도 있다.

Generative model의 taxonomy

Generative model은 density를 직접 계산할 수 있는지, sample을 어떤 방식으로 만드는지에 따라 나눌 수 있다.

계열Density 평가Sampling대표 방법
Explicit, exact densityExact p(x)p(x) 계산 가능대개 순차적이거나 구조에 의존Autoregressive model
Explicit, approximate densityp(x)p(x)의 bound 또는 approximation 계산Latent에서 직접 생성 가능VAE
Implicit, direct samplingp(x)p(x) 계산 불가한 번의 generator forwardGAN
Implicit, iterative samplingp(x)p(x)를 직접 사용하지 않거나 계산이 복잡함여러 refinement step 필요Diffusion model

Explicit density model은 주어진 sample의 likelihood를 평가할 수 있다는 장점이 있다. 그러나 exact density를 쉽게 계산하는 구조가 sampling 속도나 model architecture를 제한할 수 있다.

Implicit model은 density 값보다 realistic sample 생성에 집중한다. GAN은 latent sample을 generator에 한 번 통과시켜 output을 만들고, diffusion model은 noise에서 시작해 여러 denoising step을 반복한다.

이 분류는 각 방법의 핵심 차이를 보는 틀이다. 실제 model은 conditional generation을 추가하거나 latent token을 사용하는 등 여러 계열의 아이디어를 결합할 수 있다.

%% title: Generative Model Taxonomy
%% caption: Density를 얼마나 직접 다룰 수 있는지와 sample을 한 번에 만드는지 반복적으로 만드는지에 따라 대표 계열이 나뉩다.
flowchart TB
    gm["Generative Models"]
    gm --> explicit["Explicit Density"]
    gm --> implicit["Implicit / Sample-Based"]
    explicit --> exact["Exact Likelihood<br/>Autoregressive"]
    explicit --> approx["Approximate Likelihood<br/>VAE / ELBO"]
    implicit --> direct["Direct Sampling<br/>GAN"]
    implicit --> iterative["Iterative Sampling<br/>Diffusion / Flow"]
    exact --> trade1["likelihood 정확<br/>sampling 순차적"]
    approx --> trade2["latent sampling<br/>bound로 학습"]
    direct --> trade3["sampling 빠름<br/>density 없음"]
    iterative --> trade4["training 안정적<br/>sampling 반복"]

Maximum likelihood estimation

관찰한 data는 알 수 없는 true distribution pdata(x)p_{\text{data}}(x)에서 독립적으로 sampling되었다고 가정한다.

x(i)i.i.d.pdata(x)x^{(i)} \overset{\text{i.i.d.}}{\sim} p_{\text{data}}(x)

Model distribution을 pθ(x)p_\theta(x)라고 하자. Parameter θ\theta를 바꾸어 fixed training samples가 가장 높은 density를 갖도록 만드는 것이 maximum likelihood estimation, MLE이다.

θ=argmaxθpθ(x(1),,x(N))\theta^* = \arg\max_\theta p_\theta \left( x^{(1)},\ldots,x^{(N)} \right)

Sample이 independent하다는 가정을 사용하면 joint likelihood를 곱으로 분해할 수 있다.

θ=argmaxθi=1Npθ(x(i))\theta^* = \arg\max_\theta \prod_{i=1}^{N} p_\theta\left(x^{(i)}\right)

Likelihood와 probability는 식의 모양은 같아도 무엇을 고정하고 변화시키는지가 다르다.

  • Probability는 distribution parameter θ\theta를 고정하고 xx에 따라 값이 어떻게 달라지는지 본다.
  • Likelihood는 관찰한 xx를 고정하고 θ\theta에 따라 값이 어떻게 달라지는지 본다.

Log-likelihood와 negative log-likelihood

Probability의 곱은 매우 작은 수가 되어 underflow가 발생하기 쉽다. Log는 monotonic function이므로 likelihood를 최대화하는 parameter와 log-likelihood를 최대화하는 parameter가 같다.

θ=argmaxθi=1Nlogpθ(x(i))\theta^* = \arg\max_\theta \sum_{i=1}^{N} \log p_\theta\left(x^{(i)}\right)

Optimization에서는 loss를 최소화하는 convention을 사용하므로 negative log-likelihood, NLL을 사용한다.

LNLL(θ)=i=1Nlogpθ(x(i))\mathcal{L}_{\text{NLL}}(\theta) = -\sum_{i=1}^{N} \log p_\theta\left(x^{(i)}\right)

Dataset 크기에 관계없이 loss scale을 유지하려면 평균을 사용할 수 있다.

LNLL(θ)=1Ni=1Nlogpθ(x(i))\mathcal{L}_{\text{NLL}}(\theta) = -\frac{1}{N} \sum_{i=1}^{N} \log p_\theta\left(x^{(i)}\right)

Categorical distribution에서 NLL은 cross entropy와 같은 형태가 된다. 따라서 language model의 next-token cross entropy도 autoregressive generative model의 maximum likelihood objective이다.

Autoregressive factorization

하나의 data sample xx를 순서가 있는 TT개 component로 나눌 수 있다고 하자.

x=(x1,x2,,xT)x = (x_1,x_2,\ldots,x_T)

여기서 subscript tt는 한 sample 안의 component 위치이고, superscript ii는 dataset의 서로 다른 sample을 나타낸다.

Probability chain rule을 사용하면 joint distribution을 conditional distribution의 곱으로 정확하게 분해할 수 있다.

pθ(x)=t=1Tpθ(xtx<t)p_\theta(x) = \prod_{t=1}^{T} p_\theta \left( x_t \mid x_{<t} \right)

x<tx_{<t}x1,,xt1x_1,\ldots,x_{t-1}을 뜻한다. Log-likelihood는 다음과 같이 각 step의 합이 된다.

logpθ(x)=t=1Tlogpθ(xtx<t)\log p_\theta(x) = \sum_{t=1}^{T} \log p_\theta \left( x_t \mid x_{<t} \right)

이 factorization에는 independence assumption이 추가되지 않는다. 모든 joint distribution에 성립하는 chain rule이다. Model이 해야 할 일은 전체 sequence의 모든 조합을 한 번에 modeling하는 대신, prefix가 주어졌을 때 next component의 distribution을 예측하는 것이다.

Vocabulary size가 VV인 길이 TT의 discrete sequence는 가능한 조합이 다음만큼 존재한다.

VTV^T

Autoregressive factorization은 VTV^T개 joint outcome을 table로 직접 저장하지 않고 매 step VV개 category에 대한 conditional distribution을 예측하게 한다.

%% title: Autoregressive Factorization의 Training과 Sampling
%% caption: Training에서는 causal mask로 모든 next-token loss를 병렬 계산할 수 있지만, sampling은 새 token을 이전 prefix에 붙여 순차적으로 반복해야 한다.
flowchart TB
    sequence["Sequence x₁, x₂, …, xᵀ"] --> factor["p(x) = Π p(xₜ | x<ₜ)"]
    factor --> train["Training<br/>ground-truth sequence + causal mask"]
    train --> parallel["All Position Losses<br/>parallel computation"]
    factor --> sample["Sampling"]
    sample --> t1["sample x₁"]
    t1 --> t2["sample x₂ | x₁"]
    t2 --> t3["sample x₃ | x₁,x₂"]
    t3 --> more["… repeat until xᵀ"]

RNN과 causal Transformer

RNN hidden state hth_t는 prefix xtx_{\le t}의 정보를 요약한다.

ht=fθ(ht1,xt)h_t = f_\theta(h_{t-1},x_t)

Hidden state에서 다음 token의 distribution을 예측할 수 있다.

pθ(xt+1xt)=softmax(Wht+b)p_\theta(x_{t+1}\mid x_{\le t}) = \operatorname{softmax}(Wh_t+b)

Causal Transformer는 attention mask로 position tt가 future token을 보지 못하게 한다.

AttentionMaskt,j={0,jt,j>t\operatorname{AttentionMask}_{t,j} = \begin{cases} 0, & j\le t \\ -\infty, & j>t \end{cases}

Training에서는 ground-truth sequence 전체를 한 번에 넣고 모든 position의 next-token loss를 parallel하게 계산할 수 있다. 각 output은 causal mask 때문에 prefix에만 의존한다.

LAR=t=1Tlogpθ(xtx<t)\mathcal{L}_{\text{AR}} = -\sum_{t=1}^{T} \log p_\theta(x_t\mid x_{<t})

Sampling에서는 아직 생성하지 않은 future token을 input으로 사용할 수 없다. 첫 token부터 하나씩 sampling하고 다시 model에 넣어 다음 token을 생성해야 하므로 sequence length 방향으로 순차적이다.

Autoregressive model의 exact likelihood

주어진 complete sequence xx를 model에 넣으면 각 position에서 실제 next token에 부여한 probability를 얻는다. 이를 모두 곱하면 sample의 exact model likelihood가 된다.

pθ(x)=pθ(x1)pθ(x2x1)pθ(xTx<T)p_\theta(x) = p_\theta(x_1) p_\theta(x_2\mid x_1) \cdots p_\theta(x_T\mid x_{<T})

실제 구현에서는 probability를 직접 곱하지 않고 log space에서 더한다.

logpθ(x)=t=1Tlogpθ(xtx<t)\log p_\theta(x) = \sum_{t=1}^{T} \log p_\theta(x_t\mid x_{<t})

Autoregressive model이 explicit exact-density model로 분류되는 이유이다. Model architecture와 parameter가 정해지면 임의의 sequence에 대한 normalized likelihood를 계산할 수 있다.

Image를 autoregressive sequence로 만들기

Text는 token의 1D sequence이고 각 token이 discrete vocabulary에 속하므로 autoregressive modeling과 자연스럽게 맞는다. Image는 2D이고 pixel intensity를 continuous value로 볼 수 있어 순서를 정하고 output distribution을 선택해야 한다.

8-bit RGB image는 각 channel 값이 00부터 255255까지의 integer이다. Raster scan 순서로 pixel과 channel을 펼치면 discrete sequence로 바꿀 수 있다.

xt{0,1,,255}x_t \in \{0,1,\ldots,255\}

1024×10241024\times1024 RGB image를 channel 단위로 펼치면 sequence length는 다음과 같다.

T=1024×1024×3=3,145,728T = 1024\times1024\times3 = 3{,}145{,}728

각 position에서 256-way softmax로 다음 channel 값을 예측할 수 있다. PixelRNN이나 PixelCNN 계열은 이 원리를 image에 적용한다.

문제는 sequence가 지나치게 길어진다는 점이다. Training computation이 크고 sampling은 수백만 step을 순차적으로 실행해야 한다. 또한 raster order는 image의 2D structure를 자연스럽게 반영하는 유일한 순서가 아니다.

최근에는 raw pixel보다 압축된 latent token이나 discrete visual token을 autoregressive하게 modeling한다. Sequence가 짧아지고 high-level structure를 token 단위로 다룰 수 있지만, image를 token으로 바꾸는 별도의 encoder나 tokenizer가 필요하다.

Autoregressive model의 장단점

장점은 다음과 같다.

  • Probability chain rule에 기반해 exact normalized likelihood를 계산한다.
  • NLL이라는 명확하고 안정적인 objective로 학습한다.
  • RNN과 causal Transformer를 그대로 사용할 수 있다.
  • Text처럼 순서와 discrete vocabulary가 자연스러운 data에 잘 맞는다.

한계는 다음과 같다.

  • Sampling이 sequence length에 대해 순차적이다.
  • Image처럼 순서가 명확하지 않은 data에는 ordering을 인위적으로 정해야 한다.
  • Raw pixel sequence는 너무 길어 고해상도 생성 비용이 크다.
  • Likelihood가 높다는 것과 사람이 느끼는 perceptual quality가 항상 일치하지는 않는다.

Deterministic autoencoder

Autoencoder는 encoder가 input xx를 latent code zz로 압축하고 decoder가 이를 다시 reconstruction x^\hat{x}로 복원한다.

z=fϕ(x)z = f_\phi(x) x^=gθ(z)\hat{x} = g_\theta(z)

대표적인 reconstruction objective는 L2 loss이다.

Lrec=xgθ(fϕ(x))22\mathcal{L}_{\text{rec}} = \left\lVert x-g_\theta(f_\phi(x)) \right\rVert_2^2

Encoder와 decoder의 capacity가 충분하고 zz가 크면 identity function을 그대로 학습할 수 있다. 유용한 structure를 학습하게 하려면 bottleneck이나 noise 같은 constraint가 필요하다.

예를 들어 1024×10241024\times1024 RGB image는 약 300만 개 channel 값을 가지지만 zz를 128-dimensional vector로 제한할 수 있다. Model은 모든 pixel을 그대로 전달할 수 없으므로 reconstruction에 중요한 information을 latent code에 압축해야 한다.

Representation learning에는 encoder와 zz를 사용할 수 있다. 그러나 deterministic autoencoder만으로 generation을 하기는 어렵다. Training sample이 latent space 어디에 mapping되는지는 알 수 있지만, valid sample을 만드는 새로운 zz를 어떤 distribution에서 뽑아야 하는지는 정의되지 않기 때문이다.

VAE의 latent-variable model

Variational Autoencoder, VAE는 latent code에 known probability distribution을 부여한다. Generative process는 먼저 prior에서 latent zz를 뽑고, decoder distribution에서 data xx를 뽑는 과정이다.

zp(z)z \sim p(z) xpθ(xz)x \sim p_\theta(x\mid z)

가장 흔한 prior는 standard Gaussian이다.

p(z)=N(0,I)p(z) = \mathcal{N}(0,I)

Joint distribution은 다음과 같다.

pθ(x,z)=pθ(xz)p(z)p_\theta(x,z) = p_\theta(x\mid z)p(z)

Training data에서는 xx만 관찰할 수 있고 이를 생성한 zz는 관찰할 수 없다. zz는 latent variable이다.

Marginal likelihood가 어려운 이유

Maximum likelihood로 decoder pθ(xz)p_\theta(x\mid z)를 학습하려면 latent variable을 모두 marginalize해야 한다.

pθ(x)=pθ(xz)p(z)dzp_\theta(x) = \int p_\theta(x\mid z)p(z)\,dz

Decoder가 neural network이면 pθ(xz)p_\theta(x\mid z)zz에 대한 복잡한 nonlinear function이다. High-dimensional latent space 전체를 정확히 적분하는 것은 일반적으로 불가능하다.

Bayes’ rule로 true posterior를 쓰면 다음과 같다.

pθ(zx)=pθ(xz)p(z)pθ(x)p_\theta(z\mid x) = \frac{ p_\theta(x\mid z)p(z) }{ p_\theta(x) }

분모의 pθ(x)p_\theta(x)가 바로 계산하기 어려운 marginal likelihood이므로 true posterior도 tractable하지 않다.

Approximate posterior와 encoder

VAE는 true posterior pθ(zx)p_\theta(z\mid x)를 직접 계산하는 대신 encoder network로 approximate posterior를 학습한다.

qϕ(zx)pθ(zx)q_\phi(z\mid x) \approx p_\theta(z\mid x)

Encoder는 latent vector 하나를 직접 출력하지 않고 Gaussian distribution의 parameter를 출력한다.

qϕ(zx)=N(μϕ(x),diag(σϕ2(x)))q_\phi(z\mid x) = \mathcal{N} \left( \mu_\phi(x), \operatorname{diag}(\sigma_\phi^2(x)) \right)

dzd_z차원 latent라면 encoder는 dzd_z차원의 mean vector와 dzd_z차원의 variance 또는 log-variance vector를 출력한다. Full covariance는 O(dz2)O(d_z^2)개 값을 필요로 하므로 diagonal covariance를 사용한다.

Variance는 항상 양수여야 한다. 실제 구현에서는 unconstrained logσ2\log\sigma^2를 출력하고 exponentiation해 variance를 얻는 방식이 흔하다.

σ2=exp(logσ2)\sigma^2 = \exp(\log\sigma^2)

Decoder likelihood와 reconstruction loss

Continuous image를 modeling하는 단순한 VAE에서는 decoder likelihood를 fixed variance를 가진 diagonal Gaussian으로 둘 수 있다.

pθ(xz)=N(μθ(z),σx2I)p_\theta(x\mid z) = \mathcal{N} \left( \mu_\theta(z), \sigma_x^2 I \right)

Decoder network는 mean image μθ(z)\mu_\theta(z)를 출력하고 σx2\sigma_x^2는 constant로 둔다. 이 Gaussian의 negative log-likelihood는 constant를 제외하면 squared error와 같다.

logpθ(xz)=12σx2xμθ(z)22+const-\log p_\theta(x\mid z) = \frac{1}{2\sigma_x^2} \left\lVert x-\mu_\theta(z) \right\rVert_2^2 + \text{const}

따라서 fixed-variance Gaussian likelihood를 최대화하는 것은 L2 reconstruction error를 최소화하는 것과 같다. Pixel별 independent Gaussian은 multimodal한 image detail을 평균내기 때문에 reconstruction과 sample이 흐릿해질 수 있다.

Evidence Lower Bound

VAE는 직접 계산하기 어려운 logpθ(x)\log p_\theta(x) 대신 Evidence Lower Bound, ELBO를 최대화한다.

logpθ(x)=LELBO(x)+DKL(qϕ(zx)pθ(zx))\log p_\theta(x) = \mathcal{L}_{\text{ELBO}}(x) + D_{\mathrm{KL}} \left( q_\phi(z\mid x) \parallel p_\theta(z\mid x) \right)

KL divergence는 항상 0 이상이므로 ELBO는 log-likelihood의 lower bound이다.

logpθ(x)LELBO(x)\log p_\theta(x) \ge \mathcal{L}_{\text{ELBO}}(x)

ELBO는 다음 두 term으로 이루어진다.

LELBO(x)=Eqϕ(zx)[logpθ(xz)]DKL(qϕ(zx)p(z))\mathcal{L}_{\text{ELBO}}(x) = \mathbb{E}_{q_\phi(z\mid x)} \left[ \log p_\theta(x\mid z) \right] - D_{\mathrm{KL}} \left( q_\phi(z\mid x) \parallel p(z) \right)

첫 번째 term은 sampled latent zz에서 original xx를 높은 likelihood로 복원하게 한다. 두 번째 term은 encoder가 예측한 latent distribution을 chosen prior p(z)p(z)에 가깝게 만든다.

Loss를 최소화하는 형태로 쓰면 부호가 바뀐다.

LVAE=Eqϕ(zx)[logpθ(xz)]+DKL(qϕ(zx)p(z))\mathcal{L}_{\text{VAE}} = -\mathbb{E}_{q_\phi(z\mid x)} \left[ \log p_\theta(x\mid z) \right] + D_{\mathrm{KL}} \left( q_\phi(z\mid x) \parallel p(z) \right)

즉 VAE loss는 reconstruction loss와 latent prior regularization의 합이다.

Gaussian KL divergence

Approximate posterior가 diagonal Gaussian이고 prior가 N(0,I)\mathcal{N}(0,I)이면 KL term을 sampling 없이 정확히 계산할 수 있다.

DKL(qϕ(zx)N(0,I))=12j=1dz(μj2+σj2logσj21)D_{\mathrm{KL}} \left( q_\phi(z\mid x) \parallel \mathcal{N}(0,I) \right) = \frac{1}{2} \sum_{j=1}^{d_z} \left( \mu_j^2 + \sigma_j^2 - \log\sigma_j^2 - 1 \right)

이 term은 mean을 0에 가깝게, variance를 1에 가깝게 유도한다. 모든 sample의 posterior가 prior와 완전히 같아져야 한다는 뜻은 아니며, reconstruction objective와 균형을 이루며 latent space를 regularize한다.

Reparameterization trick

Encoder distribution에서 직접 sampling하는 operation은 일반적인 deterministic computation graph처럼 미분할 수 없다.

zN(μ,diag(σ2))z \sim \mathcal{N}(\mu,\operatorname{diag}(\sigma^2))

Sampling noise를 parameter와 분리하면 다음과 같이 다시 쓸 수 있다.

ϵN(0,I)\epsilon \sim \mathcal{N}(0,I) z=μ+σϵz = \mu + \sigma\odot\epsilon

Randomness는 ϵ\epsilon에만 있고, zzμ\muσ\sigma에 대한 differentiable function이 된다. 따라서 decoder의 reconstruction gradient가 zz를 거쳐 encoder의 mean과 variance parameter까지 전달된다.

VAE training 과정

한 minibatch의 training 과정은 다음과 같다.

  1. Encoder에 xx를 넣어 μϕ(x)\mu_\phi(x)logσϕ2(x)\log\sigma_\phi^2(x)를 계산한다.
  2. ϵN(0,I)\epsilon\sim\mathcal{N}(0,I)를 sampling한다.
  3. z=μ+σϵz=\mu+\sigma\odot\epsilon으로 latent sample을 만든다.
  4. Decoder가 pθ(xz)p_\theta(x\mid z)의 parameter를 출력한다.
  5. Reconstruction negative log-likelihood를 계산한다.
  6. qϕ(zx)q_\phi(z\mid x)p(z)p(z) 사이의 KL divergence를 계산한다.
  7. 두 loss의 합을 encoder와 decoder 전체로 backpropagation한다.

Expectation은 보통 training sample마다 하나 또는 소수의 zz sample로 Monte Carlo approximation한다. Reparameterization 덕분에 이 stochastic estimate로도 end-to-end gradient를 계산할 수 있다.

%% title: VAE의 End-to-End Training 경로
%% caption: Encoder가 approximate posterior의 μ와 σ를 만들고, reparameterization으로 latent z를 sample한 뒤 decoder가 x를 복원한다. Reconstruction NLL과 prior KL을 함께 최소화한다.
flowchart LR
    x["Input x"] --> encoder["Encoder qφ(z|x)"]
    encoder --> mu["μφ(x)"]
    encoder --> sigma["σφ(x)"]
    eps["ε ~ N(0,I)"] --> reparam["z = μ + σ ⊙ ε"]
    mu --> reparam
    sigma --> reparam
    reparam --> decoder["Decoder pθ(x|z)"]
    decoder --> recon["Reconstruction NLL"]
    x --> recon
    mu --> kl["KL(qφ(z|x) || N(0,I))"]
    sigma --> kl
    recon --> elbo["Negative ELBO"]
    kl --> elbo
    elbo -. "backpropagation" .-> encoder
    elbo -. "backpropagation" .-> decoder

Reconstruction과 prior의 trade-off

VAE의 두 objective는 latent space에 서로 다른 요구를 한다.

Reconstruction term은 각 input을 정확히 구분하려 한다. 이를 위해 각 xx의 mean은 서로 멀리 떨어지고 variance는 0에 가까워지는 편이 유리하다.

σϕ(x)0\sigma_\phi(x) \rightarrow 0

KL term은 모든 approximate posterior가 standard Gaussian prior에 가까워지도록 한다.

μϕ(x)0\mu_\phi(x) \rightarrow 0 σϕ(x)1\sigma_\phi(x) \rightarrow 1

Reconstruction만 사용하면 training sample은 잘 복원해도 latent space 사이에 빈 영역이 생겨 prior sampling이 실패할 수 있다. KL만 지나치게 강하면 encoder가 input 정보를 무시하고 항상 prior와 비슷한 posterior를 내는 posterior collapse가 생길 수 있다.

VAE는 두 term 사이의 균형을 통해 reconstruction이 가능하면서 prior에서 sampling할 수 있는 smooth latent space를 학습한다.

VAE sampling과 latent interpolation

Training 이후 새 sample을 만들 때는 encoder가 필요하지 않다.

zN(0,I)z \sim \mathcal{N}(0,I) xpθ(xz)x \sim p_\theta(x\mid z)

실제 image output으로는 decoder likelihood의 mean μθ(z)\mu_\theta(z)를 사용하는 경우가 많다.

Prior regularization으로 latent space가 연속적이므로 두 latent code 사이를 interpolation하면 output도 비교적 부드럽게 변한다.

z(α)=(1α)za+αzbz(\alpha) = (1-\alpha)z_a + \alpha z_b 0α10 \le \alpha \le 1

Handwritten digit VAE에서 latent dimension을 움직이면 한 digit이 다른 digit으로 부드럽게 변하는 모습을 볼 수 있다.

Diagonal Gaussian assumption은 qϕ(zx)q_\phi(z\mid x) 안에서 latent component의 conditional covariance를 0으로 제한한다. 그러나 각 dimension이 반드시 독립적인 semantic factor를 표현하거나 disentanglement가 자동으로 보장되는 것은 아니다.

%% title: VAE의 생성과 Latent Interpolation
%% caption: 새 sample을 만들 때는 encoder를 사용하지 않고 prior에서 z를 뽑아 decoder에 넣는다. 두 latent 사이를 이동하면 decoder output의 연속적인 변화를 볼 수 있다.
flowchart LR
    prior["Prior<br/>z ~ N(0,I)"] --> decoder["VAE Decoder<br/>pθ(x|z)"]
    decoder --> sample["Generated Sample x"]
    za["Latent z_a"] --> interp["z(α) = (1-α)z_a + αz_b"]
    zb["Latent z_b"] --> interp
    interp --> shared["Same Decoder"]
    shared --> path["Smooth Output Path<br/>x(0) … x(1)"]

Autoregressive model과 VAE 비교

항목Autoregressive modelVAE
DensityExact normalized likelihoodELBO로 log-likelihood를 lower-bound
StructureSequence factorizationLatent-variable model
TrainingNext-token NLLReconstruction NLL + KL
SamplingToken을 순서대로 생성Prior zz를 뽑아 decoder forward
Latent representation명시적인 global latent가 필수는 아님Encoder가 qϕ(zx)q_\phi(z\mid x) 제공
장점Stable MLE, exact likelihoodSmooth latent space, fast generation
한계Sequential samplingApproximate likelihood, blurry output 가능

Autoregressive model은 exact density를 위해 sequence ordering과 sequential sampling을 받아들인다. VAE는 exact likelihood를 포기하고 tractable lower bound를 사용하지만, inference와 generation에 유용한 latent representation을 얻는다.

과제에서 확인할 것

Autoregressive objective

  • Input과 target sequence가 한 position만큼 shift되어 있는지 확인한다.
  • Causal mask 때문에 position tt가 future token을 참조하지 않는지 확인한다.
  • Padding token이 NLL 평균에 포함되지 않도록 mask하는지 확인한다.
  • Probability를 직접 곱하지 않고 log-probability를 합산하는지 확인한다.
  • Training은 position 방향으로 병렬화할 수 있지만 sampling은 순차적이라는 차이를 확인한다.

VAE parameterization

  • Encoder가 latent vector 자체가 아니라 μ\mulogσ2\log\sigma^2를 출력하는지 확인한다.
  • Standard deviation을 계산할 때 σ=exp(0.5logσ2)\sigma=\exp(0.5\log\sigma^2)를 사용하는지 확인한다.
  • Reparameterization이 z=μ+σϵz=\mu+\sigma\odot\epsilon 형태인지 확인한다.
  • KL divergence를 batch와 latent dimension 중 어느 축으로 sum 또는 mean하는지 확인한다.
  • Reconstruction term과 KL term의 reduction 방식이 달라 loss scale이 의도치 않게 치우치지 않는지 확인한다.

VAE loss 해석

  • Reconstruction term의 부호가 negative log-likelihood에 맞는지 확인한다.
  • ELBO를 maximize하는 식과 negative ELBO를 minimize하는 식을 구분한다.
  • Gaussian decoder에서 fixed variance NLL이 L2 loss와 같아지는 이유를 확인한다.
  • KL term이 mean을 0, variance를 1로 유도하는지 closed-form 식으로 확인한다.
  • KL이 지나치게 작아지는 posterior collapse와 지나치게 큰 reconstruction error를 함께 관찰한다.

Generation

  • Reconstruction에서는 zqϕ(zx)z\sim q_\phi(z\mid x)를 사용하고, 새 sample 생성에서는 zp(z)z\sim p(z)를 사용한다.
  • Deterministic autoencoder의 임의 latent와 VAE prior에서 뽑은 latent가 다른 의미임을 확인한다.
  • Latent interpolation이 data manifold를 따라 부드럽게 변하는지 시각화한다.
  • Likelihood, reconstruction quality, sample quality가 서로 같은 metric이 아님을 구분한다.