728x90

 Variational autoencoder, 줄여서 VAE는 GAN, diffusion model과 같이 generative model의 한 종류로, input과 output을 같게 만드는 것을 통해 의미 있는 latent space를 만드는 autoencoder와 비슷하게 encoder와 decoder를 활용해 latent space를 도출하고, 이 latent space로부터 우리가 원하는 output을 decoding함으로써 data generation을 진행한다. 이번 글에서는 VAE가 무엇이고, 어떻게 작동하는지를 최대한 쉽게 살펴보겠다. 

* 이 글은 MLEbayes theory에 대한 기본적인 이해가 있다고 가정한다.

구조 및 학습

 많은 generative model들이 그렇듯이, VAE 또한 현실과 비슷한 데이터들을 만들어내는 것을 목적으로 한다. 이를 달리 말하면 VAE는, input data의 true distribution인 p(x)를 approximate하는 것을 목적으로 한다. 이를 위해서 VAE는 다음 그림과 같이 encoder, decoder, 그리고 latent space로 구성된 구조를 가진다. 그리고 VAE는 학습 단계에서 이 encoder과 decoder의 parameter를 학습하는 것을 목적으로 한다.

VAE의 구조

Encoder

 Encoderinput을 latent space로 변환하는 역할을 한다. 이 때, encoder는 input 데이터의 posterior, 달리 말하면 input x가 주어졌을 때 latent vector z의 분포, 즉 위 그림에서 나타나듯이 q(z|x)를 approximate하는 것을 목적으로 한다. 우리가 이 q(z|x)를 가장 잘 나타내는 분포로 정규분포(예시)를 선택한다면, q(z|x)를 approximate할 때는 이 정규분포를 나타내는 평균(mu)과 표준편차(sigma)의 parameter를 찾는 것이 목적이 될 것이다.

Decoder

 Decoder는 encoder와 반대로 latent space를 input으로 변환하는 역할을 한다. 이 때, decoder는 input의 true distribution, 달리 말하면 latent vector z가 주어졌을 때 x의 분포, 즉 위 그림에서 나타나듯이 p(z|x)를 approximate하는 것을 목적으로 한다. 어떤 z라는 vector가 주어짐에 따라 다시 데이터 x를 generate하는 역할을 하기 때문에, decoder가 generative model의 역할을 하게 된다.

Latent space

 Latent space는 말 그대로 어떤 숨겨진 vector들을 말한다. 이 latent space가 주어져야, decoder는 이를 활용해 data를 generate할 수 있다. 만약 우리가 여기서, VAE가 autoencoder처럼 input과 output을 똑같이 만드는 것을 목적으로 한다고 하자. 그러면 이 목적으로 만들어진 latent space는 항상 input과 같은 모양의 데이터를 만들어낼 수밖에 없을 것이다. 이를 방지하기 위해 우리는, noise를 sampling하여 이로부터 latent space를 만든다. 예를 들어, 어떤 표준 정규분포 (평균이 0이고 표준편차가 1인 정규분포)로부터 하나의 noise epsilon을 샘플링하여 얻고, 이에 encoder로부터 얻은 분산을 곱하고 평균을 더해서 latent vector z를 얻는 것이다. 이를 reparametrization trick이라고 부른다. (여기에서 말하는 sampling은 generation 시의 샘플링을 의미하는 것이 아닌, 노이즈를 하나 뽑는 것을 의미한다.)

ELBO

 그렇다면 위와 같은 구조를 가지는 VAE를 학습할 때는 어떤 loss를 최소화해야 할까? 이에 대한 답을 얻기 위해 우리는, maximum likelihood 접근법을 택한다. 즉, p_theta(x)를 maximize하는 theta를 찾는 것을 목적으로 하는 것이다. 이를 식으로 표현하면, 다음과 같은 loglikelihood를 maximize하는 것과 같다.

log-likelihood of VAE

  이를 전개하면 다음과 같다.

VAE의 maximum likelihood 증명

 첫 번째 줄에서 두 번째 줄로 넘어갈 때는 bayes rule을 사용했고, 두 번째 줄에서 세 번째 줄로 넘어갈 때는 분모와 분자에 같은 q 식을 곱해주었다. 그리고 세 번째 줄에서 네 번째 줄로 넘어갈 때는 KL divergence의 정의를 활용했다. 이제 위 마지막 식을 maximize하는 parameter theta를 찾으면, 우리가 원하는 likelihood를 maximize하는 parameter를 찾을 수 있는 것이다. 

 마지막 식을 하나씩 살펴보자. 우선 맨 처음에 있는 항은 encoder로부터 z를 sampling하고, 다시 이 z로부터 decoder를 활용해서 p(x|z)를 계산함으로써 계산할 수 있다. 그리고 두 번째 있는 항은 q와 p가 둘 다 정규분포이기 때문에, 정규분포 두 개 사이의 KL divergence는 쉽게 계산이 가능하다. 하지만 세 번째 항은 우리가 p(z|x)를 알 수가 없기 때문에 계산하는 것이 불가능하다. 하지만 우리는 KL divergence가 항상 양수라는 것을 안다. 그래서 우리는 마지막 식을 다음과 같은 부등식으로 표현할 수 있다.

ELBO

 우리는 이 마지막 부등식의 우항을 evidence lower bound, 줄여서 ELBO라고 부른다. 이 ELBO를 maximize함으로써 likelihood 또한 maximze할 수 있는 것이다. 이 ELBO를 좀 더 자세히 살펴보면, 첫 번째 항은 p(x|z)와 q(z|x) 사이의 negative cross entropy와 같다. 그렇기 때문에 이는 encoder와 decoder가 autoencoder처럼 reconstruction을 잘 할 수 있게 만들어주는 error라고 할 수 있기 때문에 reconstruction error라고 부른다. 다음으로, 두 번째 항은 posterior q(z|x)와 prior p(z) 간의 KL divergence와 같다. 그렇기 때문에 이는 posterior와 prior가 최대한 비슷하게 만들어주는 error라고 할 수 있고, 이는 VAE가 reconstruction task만 잘 하는 것을 방지하기 때문에 regularization error라고 부른다. 

Data generation

 위에서 살펴본 구조로 ELBO를 maximize하면서 encoder와 decoder를 학습한 후, 우리는 이 학습된 decoder를 활용해서 우리가 원하는 data를 generate해야 한다. 이 과정에서는 아래 그림과 같은 generator를 활용해서 data를 generate한다.

VAE의 data generation

  즉, 표준 정규분포에서 어떤 z를 sampling하고, 이 z를 decoder의 input으로 넣어서 우리가 원하는 새로운 데이터를 만들어내는 것이다.

 

 이번 글에서는 VAE의 구조와 함께 VAE가 어떻게 학습되는지, 그리고 VAE가 어떻게 data를 generate하는지에 대해 알아보았다. 이외에도 GAN, diffusion model과 같은 다양한 generative model들이 존재한다. 최대한 쉽고 직관적이게 써 보려고 했는데.. 쉽지 않네..

 격리를 하고 재택근무를 통해서 체력을 비축하면 블로그 글이 올라옵니다.. ^^.. 내일 탈출

 

300x250
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기