[Paper Preview] VAE: Auto-Encoding Variational Bayes

[Paper Preview] VAE: Auto-Encoding Variational Bayes
https://velog.io/@sea_note/%EB%85%BC%EB%AC%B8%EB%B6%84%EC%84%9D-Auto-Encoding-Variational-Bayes-VAE

Generative Model 공부의 시초인 VAE (Variational AutoEncoder)에 대해 알아보자.

Auto-Encoding Variational Bayes
How can we perform efficient inference and learning in directed probabilistic models, in the presence of continuous latent variables with intractable posterior distributions, and large datasets? We introduce a stochastic variational inference and learning algorithm that scales to large datasets and, under some mild differentiability conditions, even works in the intractable case. Our contributions are two-fold. First, we show that a reparameterization of the variational lower bound yields a lower bound estimator that can be straightforwardly optimized using standard stochastic gradient methods. Second, we show that for i.i.d. datasets with continuous latent variables per datapoint, posterior inference can be made especially efficient by fitting an approximate inference model (also called a recognition model) to the intractable posterior using the proposed lower bound estimator. Theoretical advantages are reflected in experimental results.

해당 논문은 위의 arXiv에서 찾을 수 있다.


0. Preview

VAE 시각화로 설명
[Powered by Vrew]이 영상의 자막은 Vrew를 통해 생성/편집되었습니다.00:00 VAE의 E, Encoder 설명06:33 VAE의 AE, AutoEncoder 설명17:21 VAE 설명

아래의 내용은 위의 영상을 참고하여 구성했다.

💡
Terminology

  • Encoder: Data들이 가진 규칙이나 가정을 이용하여 Data Space를 압축(더 적은 개수의 Data로)하여 표현하는 방식
  • AutoEncoder: Data들이 가진 규칙이나 가정을 자동으로(Auto) 찾아내는 방식
    • 주로 Neural Network를 사용한 방법이 이에 해당한다.
    • "규칙을 찾는다" == "AutoEncoder를 학습한다"
    • 엄밀하게 말하면, 'Auto'의 정확한 의미는 '자동'이 아니라 '자기자신'을 의미한다.

$x$를 Encoder를 통해 latent $x$로 만들고, 이를 Decoder를 통해 $x'$로 되돌릴 때 원래 자신의 모양과 같게 만드는 것을 목표로 학습시키기 때문이다.

  • Decoder: Encoded Data를 원본 정보로 복원하는 방식

💡
AutoEncoder

이때, 만약 Encoded Data가 Well-Known Distribution과 비슷한 분포를 띈다면

바로 Encoder를 건너뛰고 Well-Known Distribution에서 Sampling하고 Decoder에만 넣어주어 Image Generation이 가능하다.

  • Training: AutoEncoder를 이용하여 Encoded Data가 Gaussian/Uniform Distribution을 따르도록, 그리고 Decoder를 통해 복원했을 때 자기자신과 비슷하도록 학습한다.

  • Inference: 학습된 AutoEncoder를 이용하여 Encoder를 거치치 않고 Gaussian/Unifrom Distribution에서 바로 Sampling을 하여 Decoder를 통해 Generation한다.

추가적인 Loss Term을 이용하여 Zero-Shift되어 Encoding한 Data

일반적인 Gaussian Distribution에서 Sampling한 Data

그런데, 여기서 AutoEncoder를 이용하여 주어진 Data를 Encoding하면

Gaussian Distribution이나 Uniform Distribution과 같이 Well-Known Distribution으로 Encoding 된다는 보장이 없다.

추가적인 Loss Term을 더해주어 Gaussian Distribution과 가깝게 맞추는 과정

그렇기에 Encoded Data가 Well-Known Distribution과 비슷한 형태를 띄도록 Loss Term에 항을 추가로 더해준다.

  • 따라서 복원 Loss $(x - \hat{x})^{2}$와 Encoding Loss $z^{2}.\text{mean}()$를 같이 사용하여 둘의 균형이 맞는 선에서 $z$를 적당히 $0$에 가깝게 모을 수 있다.

따라서, 이제 Gaussian Distribution에서 Sampling한 숫자를 Encoder를 건너뛰고 바로 Decoder에만 통과를 시키면 위와 같이 나온다.

이때 Sampling으로 원하는 Data가 안 나오는 이유는 아래와 같다.

"Generative Model에서 생성한다" == "Probability Distribution에서 Sampling을 한다"


Sampling은 확률적으로(Stochastic) Sample을 뽑는 과정인데, 학습 과정에서는 확률적으로 어떠한 것을 뽑는 절차가 전혀 없기에 생성이 잘 되지 않는다.

즉, 학습하는 모델은 Stochastic Sampling이 아니라 Encoding된 Data에 대해서만 Decoder를 통해 원래대로 잘 복원하면 되기 때문에 그렇다.

💡
Variational AutoEncoder

VAE는 위의 방식에서 Encoded Data에 Noise를 추가하여 Decoder에 넣어주면 된다.

이렇게 할 경우, 학습 과정 전체에 걸쳐서 Encoded Data에 대해서만 복원하는 것이 아니라

Encoded Data 근처의 숫자들에 대해서도 복원했을 때 자기자신이 나오도록 학습한다.

현실적으로 Gaussian Distribution에서 Sampling한 숫자가 Encoded Data와 정확하게 일치할 수는 없다.

그런데 이제 Noise를 추가해줌으로써 Gaussian Sampling한 숫자들이 어느정도 오차범위 안에 있도록 (틀려도 복원해낼 수 있도록) 하는 기술이 VAE이다.

위의 Reparameterization 이나 아래의 KL-Divergence 식은 Noise를 얼마나 어떻게 섞어야

Gaussian에서 Sampling한 숫자가 Encoded Data + Noise와 비슷해지는지 학습하는 과정이다.

위의 코드와 같이 작성하고, 수식이 위와 같이 나와야 학습이 안정적으로 된다는 것은 논문에서 수학적으로 설명한 부분이다.


1. VAE: Overview

딥러닝 Ch3.3 VAE
KAIST 스마트설계연구실 강남우 교수(전 숙명여대)의 딥러닝과 설계 강의입니다.www.smartdesignlab.org
[Paper Review] VAE
Variation AutoEncoder 살펴보기

Main Idea:

VAE 에서 궁극적으로 원하는 것은


모델을 통해서 생성된 이미지가 학습에 사용된 이미지 데이터셋에 대해 가지는 유사도 $p_{\theta}(x^{(i)})$ 를 가장 높일 수 있는 model parameters 를 학습하는 것이다.

MLE (Maximum Likelihood Estimation)

MLE(Maximum Likelihood Estimation) 로 잘 알려진 추론 방법은 어떤 상황이 주어졌을 때 그 상황을 가장 높은 확률로 산출하는 후보군을 선택하는 방법입니다. 간단하면서도 유명한 예시로 땅에 떨어진 머리카락을 발견했는데, 이 것이 남자의 머리카락인지 여자의 머리카락인지를 선택하는 경우를 들 수 있습니다. MLE 는 머리카락의 길이 별 그 것이 남자의 것일 확률 분포를 통해 최종적으로 확률 0.5 를 기준으로 추론의 결과를 달리 하게 됩니다.

하지만, MLE 에는 치명적인 단점이 있습니다. 보통의 경우에 발생하는 추론은 사후 확률 분포가 존재하지 않는 경우가 많다는 점입니다. 위 예시는 그럴싸하지만, 위 예시로 들자면 “머리카락의 길이 별 그 것이 남자의 것일 확률 분포” 는 보통의 경우에는 존재하지 않는다는 것이죠. 이를 해결하기 위해 나타난 방법이 MAP 입니다.

https://medium.com/humanscape-tech/paper-review-vae-ac918509a9ba

MAP (Maximum A Posteriori)

MAP(Maximum A Posteriori) 는 Bayes Theorem 를 사용하여 위 문제를 타개한 추론방법입니다.

$$Pr(A|B) = \frac{Pr(B|A)Pr(A)} {Pr(B)}$$

PR(A|B) 를 저희가 구하고 싶은 B: 머리카락의 길이가 X 일 때, A: 그것이 남자의 것일 확률이라고 한다면,


이는 PR(A): 전체 사람들 중 특정 사람이 남자일 확률에 PR(B|A): 남자가 X 길이의 머리카락을 가질 확률을 곱한 뒤에

PR(B): 전체 머리카락들 중 길이가 X일 확률로 나누어서 구할 수 있다는 것입니다.

확실히, “전체 사람들 중 특정 사람이 남자일 확률”, “ 남자가 X 길이의 머리카락을 가질 확률”, “전체 머리카락들 중 길이가 X일 확률” 은 앞서 구하려고 했던 “머리카락의 길이가 X 일 때, 그것이 남자의 것일 확률" 보다 미리 알고 있을 가능성이 높아보입니다.

https://medium.com/humanscape-tech/paper-review-vae-ac918509a9ba

즉, “모델을 통해서 생성된 이미지가 학습에 사용된 이미지 데이터셋에 대해 가지는 유사도를 가장 높일 수 있는 model parameters 를 학습” 이 MLE 의 추론과 비슷하다는 점을 느꼈고,

이 MLE 의 문제점을 해결하기 위해 MAP 를 제안할 수 있게 된다.

Model parameters 의 복잡한 “조합별로 생성된 이미지가 학습에 사용된 이미지들과 가지는 유사도에 대한 확률 분포 $p_{\theta}(x^{(i)})$”를 알기 어렵기 때문에 MLE 대신 MAP를 이용한다.

다만, 추후에 나오겠지만 MAP도 문제점이 있기에 결국 저자들은 Encoder 구조를 추가하여 설명한다.

이렇게 하는 큰 이유는 model paramters 와 이미지와의 관계를 직접적으로 학습하기에 너무 복잡하기 때문이다.

그렇기에 그 중간 단계인 latent variables $z$ 를 들여가며 이미지의 핵심 요소만을 구성하는 vector 를 두어 생각한 것이다. Latent variables 와 이미지 간은 학습하기 용이하기 때문이다. 

  • 1) $p_{\theta}(x^{(i)})$를 찾아야 한다.
  • 2) Decoder의 확률분포 $p_{\theta}(x|z)$만으로 구할 수 없기에, 추가적으로 Encoder $q_{\phi}(z|x)$ 를 정의하여 $p_{\theta}(z|x)$로 근사한다.


사실 이제 위에 언급한 부분(MLE, MAP 등)들은 Encoder를 추가해야 하는 이유에 대한 사전 설명이기에 이제 나올 부분에 대한 설명에 대해서는 필요가 없다.

VAE의 목적인 Model을 통해 생성한 이미지가 학습에 사용한 이미지 데이터셋에 대해 가지는 유사도를 가장 높일 수 있는 파라미터 $\theta^*, \phi^*$ 를 찾는 것이다.

따라서, $\log p_{\theta}(x^{(i)})$를 Maximize 시키는 최적의 Parameter를 찾는 optimization 과정이 어떻게 이루어지는지 살펴보자.

  • 3) $\log p_{\theta}(x^{(i)})$를 Maximize 시켜야 한다.
  • 4) $\log p_{\theta}(x^{(i)})$ 식을 전개하다 보면 ELBO가 나오기에 $ - \mathcal{L}(x^{(i)}, \theta, \phi)$를 최소화 시킨다.
  • 5) $\arg \min_{\theta,\phi} \sum_i -\mathbb{E}{q_\phi(z|x_i)}[\log(p(x_i|g_\theta(z)))] + KL(q_\phi(z|x_i)||p(z))$ 와 같이 2개의 항으로 전개가 가능해서 Reconstruction Error, Regularization Term으로 각각 분리해서 학습한다.
  • 6) Regularization Term은 KLD를 통해 식을 전개하고, Reconstruction Error는 Decoder의 Distribution이 Bernoulli/Gaussian에 따라 식이 달라진다.

Question 0

2)와 3)간의 연결고리가 이해가 안 간다. 논문 읽으면서 둘 사이가 어떻게 연결되는지 확인해볼 것.

💡
Architecture

https://youtu.be/GbCAwVVKaHY?si=O-BNEgYerzVG4WTq

  • AutoEncoder: 차원을 Latent Variable로 축소하기 위한 목적으로 사용 (Encoder가 핵심, Encoder를 학습하기 위해 Decoder를 사용)

  • Variational AutoEncoder: Decoder로 새로운 Data를 생성하기 위해 사용(Decoder가 핵심, Decoder를 학습하기 위해 Encoder를 사용)
    • AE와 다르게 Encoder가 바로 latent space로 압축하는 것이 아니라, 2개의 vector인 $\mu_i$와 $\sigma_i$로 분해한다.
    • 이후 Reparameterization Trick을 이용하여 해당 분포에서 $z_i$를 바로 Sampling한다.
    • $z_i$를 Decoder에 통과시켜 원래의 Input $x_i$과 동일한 Shape의 Output $p_i$을 복원시킨다.

Gaussian Distribution에서 Sampling하는 과정에서는 반드시 Reparameterization Trick을 사용해서 Backpropagation을 통해 Gradient 계산이 가능하도록 한다.

https://youtu.be/GbCAwVVKaHY?si=O-BNEgYerzVG4WTq

VAE를 학습시키기 위해서는 Loss Function이 필요한데, 이는 2개 Term의 합으로 이루어진다.

💡
Two Loss Terms

1) Reconstruction Error:

  • Input과 Output간의 차이를 최소화하는 Error
    • 1. Decoder Output $p_i$(확률)을 Normal Distribution으로 가정: Mean-Squared-Error (MSE)
    • 2. Decoder Output $p_i$(확률)을 Bernoulli Distribution으로 가정: Cross-Entropy Error (CEE)
    • 둘 중 무엇을 사용해도 상관은 없지만, 기본적으로는 CEE를 사용한다.

$$-\sum_{j=1}^D x_{i,j} \log p_{i,j} + (1-x_{i,j}) \log(1-p_{i,j})$$

2) Regularization Error:

  • Reparameterization Trick을 사용하여 만든 Distribution $q_{\phi}(z|x_i)$이 Gaussian Distribution $p(z)$을 따라야 한다.

$$\frac{1}{2}\sum_{j=1}^J (\mu_{i,j}^2 + \sigma_{i,j}^2 - \ln(\sigma_{i,j}^2) - 1)$$

$q_{\phi}(z|x_i)$이 Gaussian Distribution $p(z)$을 따라야 하므로, $KL(q_\phi(z|x_i)||p(z))$, KL Divergence가 최소가 되도록 학습한다.

즉 Encoder를 통과했을 때의 Distribution $q_\phi(z|x_i)$이 $p(z)$와 비슷해지도록 학습한다. (KL Divergence에 관한 식을 풀면 위의 Regularization Error가 된다)

Question 1

왜 Reparameterization Trick을 통해 Sampling한 $z_i$가 Gaussian Distribution을 따라야 하는가?

이 질문은 Encoder의 Output이 왜 Gaussian Distribution을 따라야 하는지와 관련이 되어 있다.

1) Encoder의 Output은 항상 Gaussian Distribution을 따라야 하는가?

2) Sampling한 $z_i$가 굳이 Gaussian Distribution을 따라야 하는 이유는 무엇인가?


2. VAE: Loss Function

💡
VAE Loss Function

Decoder에서 Latent Variable $z$의 확률분포를 $p_{\theta*}(z)$이라 하고, $z$가 주어졌을 때 $x$가 나올 확률분포는 $p_{\theta*}(x|z^{(i)})$가 된다.

이때, $\theta$는 Decoder의 Parameter 이다.

https://youtu.be/GbCAwVVKaHY?si=O-BNEgYerzVG4WTq

위의 과정을 Decoder Network를 이용하여 Training 시키면 되는데,

일단 우리가 구하고자 하는 것은 $p_{\theta}(x)$ 이다.

https://youtu.be/GbCAwVVKaHY?si=O-BNEgYerzVG4WTq

이때, Training Data의 Likelihood $p_{\theta}(x)$ 를 최대화하도록 Decoder를 학습해야 한다.

우리가 갖고 있는 Data를 바탕으로 $x$에 대한 확률분포를 정한다면 Data $x$가 나올 확률이 가장 큰 Distribution이 많은 Distribution으로 볼 수 있다.

https://youtu.be/GbCAwVVKaHY?si=O-BNEgYerzVG4WTq

자, 이제 VAE를 통해 Generation을 진행하기 위해서는 $x$의 Probability Distribution $p_{\theta}(x)$에서 Sampling을 해야한다.

이때, 접근가능한 방식이 2가지가 있다.

💡
1) $p_{\theta}(x)$ via Integrating $p_{\theta}(x, z)$ by $z$

첫 번째 방법은 Joint Distribution $p_{\theta}(x, z)$을 latent variable $z$에 대해 적분하는 방법이다.

$p_{\theta}(z)$의 확률분포는 Gaussian Distribution으로 가정하고,

$p_{\theta}(x|z)$을 Decoder의 Neural Network을 통해 구한다 해도,

이를 $\int p_{\theta}(z) p_{\theta}(x|z)dz$ 모든 $z$에 대해 integration을 수행하는 것은 불가능하다.

Question 2

모든 latent variable $z$에 대해 적분이 불가능하다는 것은 왜 그러한가?

Often impossible because there are too many zs to marginalize them all out.

cf. https://stats.stackexchange.com/questions/314413/why-is-pxz-tractable-but-pzx-intractable

💡
2) $p_{\theta}(x)$ via Bayes' Rule

Why is p(x|z) tractable but p(z|x) intractable?
In variational methods, given a set of latent variables $z$ corresponding to visible variables $x$, why is it that the probability distribution $p\left(x\middle|z\right)$ is tractable to compute, b…

Bayesian Inference

In bayesian inference, when you have some data x𝑥, you first specify a likelihood𝑙𝑖𝑘𝑒𝑙𝑖ℎ𝑜𝑜𝑑, p(x|z)𝑝(𝑥|𝑧), also called a sampling distribution, which will depend on some unknown parameters z𝑧 (also called latent variables, going with your notation).

We then have to specify a prior𝑝𝑟𝑖𝑜𝑟 on these latent variables, p(z)𝑝(𝑧), to completely specify the data generating process𝑑𝑎𝑡𝑎 𝑔𝑒𝑛𝑒𝑟𝑎𝑡𝑖𝑛𝑔 𝑝𝑟𝑜𝑐𝑒𝑠𝑠. This is called the data generating process as we can imagine first sampling some latent variables from the prior z∗∼p(z)𝑧∗∼𝑝(𝑧), and then sampling a data point from the likelihood at this sample z∗𝑧∗, x∗∼p(x|z∗)𝑥∗∼𝑝(𝑥|𝑧∗).

The reason the likelihood is tractable is because we say it is𝑏𝑒𝑐𝑎𝑢𝑠𝑒 𝑤𝑒 𝑠𝑎𝑦 𝑖𝑡 𝑖𝑠. This isn't specific to bayesian inference either. In frequentist inference you also specify a likelihood (you just don't specify a prior).

At some point you need to assume some model for your data so you can actually infer something! In the case of bayesian inference this model is the combination of likelihood and prior.

그렇다면 Posterior Density $p_{\theta}(z|x)$를 구할 수 있냐 싶으면 그것 또한 불가능하다.

$$ p_{\theta}(z|x) = \frac {p_{\theta}(x|z)p_{\theta}(z)} { p_{\theta}(x)} $$

위의 식에서 evidence인 $p_{\theta}(x) $가 intractable 하기 때문이다.

따라서, $p_{\theta}(x|z)$인 Decoder를 Modeling하기 위해 추가적으로 Encoder $q_{\phi}(z|x)$ 를 정의한다.

$q_{\phi}(z|x)$는 $p_{\theta}(z|x)$에 최대한 근사시키는 Network이다.

기존의 목적은 Decoder만을 이용하여 latent variable $z$에서 본래의 input $x$로, 확률분포 $p_{\theta}(x)$를 복원하는 것인데,

이를 학습시키기 위해서 Decoder만으로는 불가능하기에, Encoder의 도움을 받아 $q_{\phi}(z|x)$를 $p_{\theta}(z|x)$로 근사시킨다.


VAE에서 궁극적으로 원하는 것은 Model을 통해 생성된 이미지가 학습에 사용된 이미지 데이터셋에 대해 가지는 유사도를 가장 높일 수 있는 Model Parameters를 학습하는 것이다.

위에서 언급했듯이, Data likelihood를 Maximize하고 싶기에 $\log p_{\theta}(x^{(i)})$를 최대화시키면 된다.

$z \sim q_{\phi}(z|x^{(i)})$를 따를 때, 즉 Encoder Network를 통해 생성된 latent variable $z$가 Encoder의 Probability Distribution을 따를 때,

Data likelihood $\log p_{\theta}(x^{(i)})$에 관한 식을 다음과 같이 작성할 수 있다.

$$ \log p_\theta(x^{(i)}) = \mathbb{E} _{z \sim q_\phi(z|x^{(i)})} [\log p_\theta(x^{(i)})] \: (p_\theta(x^{(i)})\: \text{Does not depend on} \: z) $$

$$= \mathbb{E} _z \left[\log \frac{p_\theta(x^{(i)}|z)p_\theta(z)}{p_\theta(z|x^{(i)})}\right] \: \text{(Bayes' Rule)}$$

$$= \mathbb{E}_z \left[\log \frac{p_\theta(x^{(i)}|z)p_\theta(z)}{p_\theta(z|x^{(i)})} \frac{q_\phi(z|x^{(i)})}{q_\phi(z|x^{(i)})}\right] \: \text{(Multiply by constant)}$$

이때, KLD의 특성에 의해 $z$가 따르고 있는 Distribution과 $\log$의 분자에 있는 항이 동일할 경우 Expectation 식을 KLD로 변형할 수 있다.

따라서 Expectation 안의 $\log$항 분자에 $q_\phi(z|x^{(i)})$를 올린다.

$$= \mathbb{E}_z[\log p_\theta(x^{(i)}|z)] - \mathbb{E}_z \left[\log \frac{q_\phi(z|x^{(i)})}{p_\theta(z)}\right] + \mathbb{E}_z \left[\log \frac{q_\phi(z|x^{(i)})}{p_\theta(z|x^{(i)})}\right] \: \text{(Logarithms)}$$

$$= \mathbb{E}_z[\log p_\theta(x^{(i)}|z)] - D_{KL}(q_\phi(z|x^{(i)}) \parallel p_\theta(z)) + D_{KL}(q_\phi(z|x^{(i)}) \parallel p_\theta(z|x^{(i)}))$$

KLD에 의해 $z$가 Continuous Variable일 경우 다음과 같이 정리가능하다.

$$ \mathbb{E}_{z \sim q_\phi(z|x^{(i)})} \left[\log \frac{q_\phi(z|x^{(i)})}{p_\theta(z)}\right] = \int_z \log \frac{q_\phi(z|x^{(i)})}{p_\theta(z)} q_\phi(z|x^{(i)}) dz$$

$$KL(P \parallel Q) = \sum_x P(x) \log \frac{P(x)}{Q(x)}$$

Kullback - Lively Divergence (KLD)

$$D_{KL} (p \parallel q) = \sum_{x} p(x) \log\left(\frac{p(x)}{q(x)}\right) = \mathbb{E}_{x \sim p} \left[ \log\left(\frac{p(x)}{q(x)}\right) \right]$$

  • 모델로 만든 분포 q와 실제 분포 p 사이에서 분포간의 차이를 나타낼 때 사용
  • x가 실제 분포 P를 따른다: $x \sim p$
  • $KL(p \parallel q) \geq 0$
  • $KL(p \parallel q) \neq KL(q \parallel p)$: KLD는 거리 개념이 아니다

Expectation of Random Variable g(X)

$$E \left[ g(X) \right] = \sum g(x) P_{X}(x)$$

  • $\sum (\text{변수 그대로} \times \: \text{ Main 확률})$
  • 변수는 합성 form 그대로
  • 확률은 Main(원본) 변수의 확률

최종적으로 식을 정리하면 다음과 같다.

$$\log p_\theta(x^{(i)}) = \mathbb{E}_z[\log p_\theta(x^{(i)}|z)] - D_{KL}(q_\phi(z|x^{(i)}) \parallel p_\theta(z)) + D_{KL}(q_\phi(z|x^{(i)}) \parallel p_\theta(z|x^{(i)}))$$

  • $\mathbb{E}_z[\log p_\theta(x^{(i)}|z)]$: Decoder에 의해 잘 복원되도록 하는 Term
  • $ - D_{KL}(q_\phi(z|x^{(i)}) \parallel p_\theta(z))$: Encoder를 통과한 Latent Variable의 Distribution이 Prior Gaussian Distribution과 비슷해지도록 학습
  • $D_{KL}(q_\phi(z|x^{(i)}) \parallel p_\theta(z|x^{(i)}))$: Encoder를 통해 나온 확률분포가 intractable한 $ p_\theta(z|x^{(i)})$와 비슷해지도록 학습

따라서, KLD의 성질에 의해

$ D_{KL}(q_\phi(z|x^{(i)}) \parallel p_\theta(z|x^{(i)})) \geq 0 $이므로

intractable한 위의 항은 Control할 수 없고, 나머지 Term은 Control할 수 있으므로

$$\mathcal{L}(x^{(i)}, \theta, \phi) = \mathbb{E}_z[\log p_\theta(x^{(i)}|z)] - D_{KL}(q_\phi(z|x^{(i)}) \parallel p_\theta(z)) $$

$\mathcal{L}(x^{(i)}, \theta, \phi) $를 Maximize 시키는 것을 목표로 한다.

$\mathcal{L}(x^{(i)}, \theta, \phi) $을 구성하는 $\log p_\theta(x^{(i)}|z)$과 $D_{KL}(q_\phi(z|x^{(i)}) \parallel p_\theta(z))$ 모두 Differentiable하므로 Gradient 값을 계산해서 최적화할 수 있다.

따라서 다음의 식이 성립한다.

$$\log p_\theta(x^{(i)}) = \mathcal{L}(x^{(i)}, \theta, \phi) + D_{KL}(q_\phi(z|x^{(i)}) \parallel p_\theta(z|x^{(i)})) \geq \mathcal{L}(x^{(i)}, \theta, \phi)$$

이므로 $\mathcal{L}(x^{(i)}, \theta, \phi)$을 Evidence Lower BOund (ELBO)이라 하며, Training을 통해 $\mathcal{L}(x^{(i)}, \theta, \phi)$를 Maximize 하는 parameter $\theta^*, \phi^*$를 찾으면 된다.

$$\theta^*, \phi^* = \arg \max_{\theta,\phi} \sum_{i=1}^N \mathcal{L}(x^{(i)}, \theta, \phi)$$

  • $\theta$: Decoder의 Parameter
  • $\phi$: Encoder의 Parameter

그런데 일반적으로 Minimization을 수행하므로, 위의 Term에 $-$를 붙여서 Maximize가 아닌 Minimize 시킨다.

$$\arg \min_{\theta,\phi} \sum_{i=1}^N - \mathcal{L}(x^{(i)}, \theta, \phi)$$

$$= \arg \min_{\theta,\phi} \sum_i -\mathbb{E}{q_\phi(z|x_i)}[\log(p(x_i|g_\theta(z)))] + KL(q_\phi(z|x_i)||p(z))$$

따라서 Minimize 시키는 항 안의 2개의 Term을 각각 Reconstruction Error, Regularization이라 한다.

  • Reconstruction Error: $-\mathbb{E}_{q_\phi(z|x_i)}[\log(p(x_i|g_\theta(z)))] $
  • Regularization: $KL(q_\phi(z|x_i)||p(z))$
    • 가정한 $p(z)$와의 Distribution 차이를 KLD를 최소화시킴으로써 줄인다.


3. VAE: Optimization

💡
VAE Optimization

💡
1) Regularization Term

Regularization Term: 은 아래의 2개의 가정을 따른다

  • Encoder를 통과한 Distribution이 아래의 Gaussian Distribution을 따라야 한다.
    • Multivariate Gaussian Distribution with diagonal covariance

$$q_{\phi}(z|x_i) \sim N(\mu_i, \sigma_{i}^{2} I)$$

  • Prior Distribution에 해당하는 $p(z)$가 $N(0, I)$를 따른다고 가정한다.
    • 평균이 0이고, Covariance Matrix가 Identity Matrix인 Multivariate Normal Distribution을 따른다.

$$p(z) \sim N(0, I)$$

$$\arg \min_{\theta,\phi} \sum_i -\mathbb{E}{q\phi(z|x_i)}[\log(p(x_i|g_\theta(z)))] + KL(q_\phi(z|x_i)||p(z))$$

위의 전체 ELBO식에서 Regularization Term을 관찰하면,

$$KL(q_\phi(z|x_i) \parallel p(z)) = \frac{1}{2} \left(\text{tr}(\sigma_{i}^{2}I) + \mu_{i}^{T}\mu_{i} - J + \ln \frac{1}{\prod_{j=1}^{J} \sigma_{i,j}^{2}} \right)$$

$$= \frac{1}{2}\left(\sum_{j=1}^J \sigma_{i,j}^2 + \sum_{j=1}^J \mu_{i,j}^2 - J - \sum_{j=1}^J \ln(\sigma_{i,j}^2)\right)$$

$$= \frac{1}{2}\sum_{j=1}^J (\mu_{i,j}^2 + \sigma_{i,j}^2 - \ln(\sigma_{i,j}^2) - 1)$$

여기서 $\text{tr}$는 trace라고 대각행렬의 대각선 성분의 합을 의미한다.

KLD for multivariate normal distributions

$$D_{KL}(\mathcal{N}_0||\mathcal{N}_1)$$

$$ = \frac{1}{2}\left(tr(\Sigma_1^{-1}\Sigma_0) + (\mu_1 - \mu_0)^T\Sigma_1^{-1}(\mu_1 - \mu_0) - k + \ln\left(\frac{\det \Sigma_1}{\det \Sigma_0}\right)\right)$$

  • $\mathcal{N}_0$: $N(\mu_i, \sigma_{i}^{2} I)$
  • $\mathcal{N}_1$: $N(0, I)$

따라서 Regularization Term은 다음과 같이 계산된다.

$$KL(q_\phi(z|x_i) \parallel p(z)) = \frac{1}{2}\sum_{j=1}^J (\mu_{i,j}^2 + \sigma_{i,j}^2 - \ln(\sigma_{i,j}^2) - 1)$$

💡
2.1) Reconstruction Term

$$\arg \min_{\theta,\phi} \sum_i -\mathbb{E}{q_\phi(z|x_i)}[\log(p(x_i|g_\theta(z)))] + KL(q_\phi(z|x_i)||p(z))$$

위의 식에서 Reconstruction Error Term을 살펴보자.

$$\mathbb{E}_{q_\phi(z|x_i)}[\log(p_\theta(x_i|z))] = \int \log(p_\theta(x_i|z))q_\phi(z|x_i)dz$$

$$\approx \frac{1}{L}\sum_{z^{i,l}} \log(p_\theta(x_i|z^{i,l}))$$

Monte-carlo Technique를 사용한다.

어떠한 분포를 가정하고, 해당 분포에서 Sampling을 하는데 굉장히 큰 수에 대해 Sampling을 한 후에 평균을 내면 전체에 대한 Expectation과 어느정도 비슷해진다.

다만, DL에서 Monte-Carlo Technique를 사용하기 힘든 이유는 계속해서 Sampling을 하면 계산량이 과도하게 많아지기 때문이다.

따라서, VAE의 저자들은 다음과 같은 Trick을 사용했다:

  • $L$: Latent Vector의 Sample 개수
  • $L = 1$을 편의를 위해 설정한다. (Sample 개수가 하나)

즉, $z$에 대한 Integration이 힘들기에 이를 대신하고자 Monte-Carlo 방법을 사용하여 수없이 많이 Sampling을 해서 이를 평균내고자 했으나,

그냥 Random하게 하나의 Sample만을 Sampling하고 이를 대표값으로 설정한 것이다.

💡
2.2) Reparameterization Trick

  • Before Reparameterization: Backpropagation X

$$z^{i,l} \sim \mathcal{N}(\mu_i, \sigma_i^2 I) $$

  • After Reparameterization: Backpropagation O

$$z^{i,l} = \mu_i + \sigma_i \odot \epsilon$$

Encoder를 통해 바로 Gaussian Distribution을 만든 후에 Sampling하는 것과

Standard Gaussian Distribution에서 $\varepsilon$을 Sampling을 한 후 이를 실제 $\sigma_i$에 곱해준 후에 $\mu_i$를 더해주는 방식으로 Backpropagation을 가능하게 만들어주면서,

실제 Sampling을 한 것 같은 효과를 줄 수 있다.

$z^{i, l}$에 대한 식이 나온다는 점에서 미분가능한 식이 되어 Backpropagation이 가능하게 된다.

위와 같은 과정들을 통해 이제는 $log(p_{\theta}(x_i|z^i)$를 구하면 된다는 사실을 알았다.

💡
2.3) Likelihood of Decoder: $p_{\theta}(x_i|z^i)$

$$\mathbb{E}_{q_\phi(z|x_i)}[\log(p_\theta(x_i|z))] = \int \log(p_\theta(x_i|z))q_\phi(z|x_i)dz$$

$$ \approx \frac{1}{L}\sum_{z^{i,l}} \log(p_\theta(x_i|z^{i,l})) \approx \log(p_\theta(x_i|z^i))$$

지금까지 Monte-Carlo Technique를 사용해서 위와 같이 변형할 수 있었다.

1) Decoder의 Output인 확률분포가 Bernoulli Distribution을 따른다고 가정했기에 다음과 같이 식을 작성할 수 있다.

$$\log(p_\theta(x_i|z^i)) = \log\prod_{j=1}^D p_\theta(x_{i,j}|z^i) = \sum_{j=1}^D \log p_\theta(x_{i,j}|z^i)$$

$$= \sum_{j=1}^D \log p_{i,j}^{x_{i,j}}(1-p_{i,j})^{1-x_{i,j}}$$

$$= \sum_{j=1}^D x_{i,j}\log p_{i,j} + (1-x_{i,j})\log(1-p_{i,j})$$

결론적으로 $\log (p_{\theta}(x_i|z^i))$은 Cross-Entropy 식 형태로 쓸 수 있다.

2) Decoder의 Output인 확률분포가 Gaussian Distribution을 따른다면 다음과 같이 식을 작성할 수 있다.

  • Decoder가 Gaussian Distribution을 따를 때:

$$\log(p_\theta(x_i|z^i)) = \log(\mathcal{N}(x_i; \mu_i, \sigma_i^2 I))$$

$$ = - \sum_{j=1}^D \frac{1}{2}\log(\sigma_{i,j}^2) + \frac{(x_{i,j} - \mu_{i,j})^2}{2\sigma_{i,j}^2}$$

  • Decoder가 Gaussian Distribution w/ identity covariance를 따를 때:

$$\log(p_\theta(x_i|z^i)) \propto - \sum_{j=1}^D (x_{i,j} - \mu_{i,j})^2$$

Decoder - Bernoulli Distribution: CEE

Decoder - Gaussian Distribution: MSE


4. VAE: Structure

💡
VAE: Structure

  • Encoder $q_{\phi}$: Gaussian Encoder $\mu_i, \sigma_i$
  • Decoder $g_{\theta}$: Bernoulli Decoder $p_i$

  • Reconstruction Error: Decoder Output $p_i$가 Bernoulli Distribution을 따르므로 Cross-Entropy Loss식이 된다.
  • Regularization Error: KL Divergence를 사용하므로 위와 같은 식이 나온다.

아래와 같이 Decoder의 Output이 따르는 확률분포를 Gaussian Distribution으로 가정한다면 다른 Case도 가능하다.

Encoder는 Gaussian Encoder로 고정시키고, Decoder의 Distribution만 변화시키면 된다.

  • Gaussian Decoder
  • Gaussian Decoder w/ Identity Covariance


5. VAE: Characteristics

💡
VAE: Characteristics

Latent Space를 늘릴수록 복원이 더 잘되는 경향이 있으나, Latent Space 자체는 Input Space의 차원을 압축하기 위해 도입됐으므로 과도하게 늘리면 Latent Space를 도입하는 의미가 없다.

VAE의 특징들을 정리해보면 다음과 같다:

1) Decoder가 최소한 학습 데이터는 생성해낼 수 있게 된다.

  • Generated Data는 Input Data과 조금 닮아 있다.
  • 즉, 아주 새로운 Data를 생성해내지는 못한다.

2) Encoder가 최소한 학습 데이터는 잘 Latent Vector로 표현할 수 있게 된다.

  • Data의 추상화(차원 축소)를 위해 많이 사용된다.