[STUDY] VAE(Variational Auto-Encoder)

나다경·2022년 3월 24일
0

STUDY

목록 보기
1/5

AE vs. VAE

VAE는 기존의 AutoEncoder와 탄생 배경이 다르지만 구조가 상당히 비슷해서 Variational AE라는 이름이 붙은 것임. 즉, VAE와 AE는 엄연히 다름.

AutoEncoder의 목적은 Encoder에 있음. AE는 Encoder 학습을 위해 Decoder를 붙인 것임.

반대로 VAE의 목적은 Decoder에 있음. Decoder 학습을 위해 Encoder를 붙인 것임.

VAE란?

생성 모델링의 목적은 PmodelP_{model}PdataP_{data}에 가깝도록 하는 것임.

VAE는 input image X를 잘 설명하는 feature를 추출하여 Latent vector z에 담고, 이 Latent vector z를 통해 X와 유사하지만 완전히 새로운 데이터를 생성하는 것을 목표로 함. 이때 각 feature가 Gaussian 분포를 따른다고 가정하고 latent z는 각 feature의 평균과 분산값을 나타냄.

이때, 문제 3가지가 존재함.
1. 어떻게 latent 변수 z를 정의하는가 \rightarrow N(0,I)N(0,I)로 가정함.
2. 어떻게 p(xz)p(x|z)를 정의하는가 \rightarrow decoder 신경망을 사용함.
3. 적분은 다루기 어려움 \rightarrow monte carlo 적분을 이용함.

즉, zz를 사전 정규분포에서 샘플링하는 것 대신 input xx와 유의미하게 유사한 샘플이 나올 수 있는 사후확률분포 p(zx)p(z|x)로부터 샘플링을 진행함. 단, p(zx)p(z|x)가 무엇인지 모르므로, 알고 있는 확률분포 중 하나인 qϕ(zx)q_{\phi}(z|x)를 택해 파라미터 값을 조정해 p(zx)p(z|x)와 유사하게 만들어 봄.(variational inference) 따라서, VAE는 true posterior p(zx)p(z|x)와 유사한 분포 qϕ(zx)q_{\phi}(z|x) 를 만들게 해주는 ϕ\phi와 생성자의 θ\theta를 찾는 문제임.

KL발산을 최소화하는 qϕ(zx)q_{\phi}(z|x)ϕ\phi값을 찾으면 됨. 이때, p(zx)p(z|x)를 모르기에 KL발산을 최소화하는 것 대신 ELBO(ϕ)ELBO(\phi)를 최대화하는 ϕ\phi값을 찾음.

VAE의 구조

Input image X를 Gaussian Encoder에 통과시켜 Latent vector z를 구하고, Latent vector z를 다시 Bernoulli Decoder에 통과시켜 기존 input image X와 비슷하지만 새로운 이미지 X를 찾아내는 구조임. 이때, ϵ\epsilon에서 sampling을 해 reparameterization trick을 씀.

정리하자면, MLE를 사용하면 유의미한 샘플을 생성할 수 없고 posterior를 모르기 때문에 variational inference로 해결함. Posterior를 모르기 때문에 KLD를 계산할 수 없어 ELBO를 최대화하는 방법을 사용함. ELBO를 최대화한 후 reconstruction과 regularization을 최적화해 parameter θ,ϕ\theta, \phi를 탐색함. ϕ\phi를 이용해 샘플링한 latent vector zzθ\theta를 이용한 generator gθ(z)g_{\theta}(z)를 이용해 생성함.

VAE의 장단점

  • 장점 : 확률 모델을 기반으로 했기 때문에, 잠재 코드를 더 유연하게 계산할 수 있음.
  • 단점 : Density를 직접적으로 구한 것이 아니기 때문에 Pixel RNN/CNN과 같이 직접적으로 Density를 구한 모델보다는 성능이 떨어짐.

0개의 댓글