본문 바로가기
논문

[VAE] Auto-Encoding Variational Bayes 논문 정리(1)

by DI_Lee 2021. 4. 1.

 

오늘은 VAE 논문을 정리해보려고 한다. 

지난번에 정리했던 ResNet 논문에 비해서 수식이 굉장히 많이 나오고, 통계지식들이 많이 요해지는 논문이라서 개인적으로 이해하는데 굉장히 오래걸렸다..

 


 

🔥 AE vs VAE

AE의 구조

일단 VAE를 살펴보기 전에 먼저, VAE 모델의 기본 구조인 오토인코더에 대해서 살펴보자.

오토인코더는 이와 같이 인코더, 디코더, 그리고 latent variable인 z로 구성이 되어있다.

 

 

어떤 input이 들어오면 인코더에서는 차원축소가 일어나고, 축소된 z가 decoder로 들어가면 다시 input형태로 복원된 output이 나오게 된다. 이때 이 오토인코더의 목적은 차원축소이기 때문에 왼쪽의 인코더를 학습하기 위해서 디코더는 그냥 따라붙은 그러한 형태라고 생각할 수 있다.

 

이번엔 이번 논문의 주제인 VAE다. VAE는 방금 살펴본 AE와는 반대로 디코더를 위해서 왼쪽의 인코더가 따라 붙은 형태이다. 즉, VAE는 인코더를 거치면 평균, 그리고 표준편차 이렇게 두개의 벡터를 아웃풋으로 내게 되는데 이 두가지를 결합해서 어떤 normal distribution을 만들게 되고, 그렇게 만든분포에서 sampling을 통해 z를 만들고, 그 z가 다시 decoder를 통과해 어떤 기존의 input데이터와 유사한 새로운 데이터들을 생성할 수 있다. 따라서 이 VAE는 확률 분포를 이용해 어떤 새로운 데이터를 생성하는 것을 목적으로 개발된 모델이고, 따라서 generative model이라고 불린다.

 

 


🔥 Generative model

Generative model

그렇다면 이 generative model이 어떤 원리로 이미지를 생성하는지 살펴보도록 하자. 

Generative model은 어떤 데이터, 예를 들어 이미지 데이터가 들어오면, 그 이미지에서의 다양한 특징들이 각각의 확률 변수가 되는 어떤 확률 분포를 만들게 된다. 예를들어 위의 예시에서는 어떤 인간의 얼굴 데이터가 들어오고 우리가 hidden layer에서 dimension을 2라고 설정했다면, 이렇게 코의 길이 , 눈의 모양과 같이 두개의 특징에 대한 값들이 catch가 되고, 그 두가지 특징들에 대한 확률 분포를 표현한다면 결합 확률 분포 형태로 나타나게 된다.

 

 

-> 따라서 우리가 입력데이터의 두가지 특징에 대해 이렇게 확률분포를 잘 학습했다고 가정한다면, 이런식으로 확률값이 높은 부분에서 이미지를 샘플링하면 여기 보이는 것과 같이 실제로 있을 법한 그럴싸한 이미지가 나오게 된다. 반대로 확률값이 낮은 부분에 대한 데이터를 샘플링하게 된다면 그때의 값은 상대적으로 덜 있음직한 어색한 데이터가 된다. 즉, 결국 생성모델의 목표는 이미지 데이터의 분포를 잘 근사하는 이 모델을 만드는 것이 되고, 모델을 잘 만든다면 이와 같이 새로운 데이터들을 잘 생성할 수 있게 된다.

 


🔥VAE _Decoder

이제 본격적으로 Generative model인 VAE가 어떻게 새로운 데이터를 생성할 수 있도록 학습되는지 수식적으로 살펴보자.

 

먼저 VAE는 인코더가 아니라 디코더를 위한 것이라고 언급을 했는데 즉, 뭔가 Z가 있으면 X를 만들어 내고 싶은 목적에서 시작된 것이다. 따라서 만약에 latent variable인 z의 확률분포를 p(z)라고하고, z가 주어졌을 때 x의 확률분포는 이렇게 p(x|z)라고 표현을 했다면, DECODER가 이것들을 이용해 generation process를 진행하는 과정에서 어떻게 모델 파라미터를 학습 하는지에 대해서 생각을 해보아야 한다. VAE는 generative model이기 때문에 generative model의 목적을 다시 한번 생각해보면 입력데이터의 분포를 잘 근사하는 모델을 생성하는 것인데 즉, 어떤 네트워크의 출력값이 있을 때 우리가 원하는 정답인 x가 나올 확률이 높길바라는 것이라고 할 수있다.

 

 

따라서 VAE에서도 우리는 x의 likelihood를 최대화하는 확률분포를 만들고 싶은 것이 목적이 되고,

즉 p(x)를 최대화 하고싶은 것이기 때문에 p(x)를 위와 같은 적분식으로 표현해보게 된다.

(위의 적분식은 베이즈 공식을 통해 나온식으로, x와 z가 동시에 일어날 확률을 모든 z에 대해서 적분했다는 의미로 결국 x의 liklihood가 된다 )

 

 

🔥VAE _Encoder/ Variational Inference

 

그럼 이제 이걸 그냥 적분한 값을 풀수만있다면, P(x)를 알 수 있고, 그럼 Z에 대한 X에 대해서 설명할 수 있는 것인데, 문제는 얘를 계산할 수가 없다는 것이다. 왜 그런지 살펴보면 먼저 p(z)는 우리가 가우시안을 따른다고 가정한다면 얻어낼 수 있고, p(x|Z)는 decoder부분에 해당하기 때문에 뉴럴 네트워크로 만들수 있다.

 

그런데 모든 z에 대해서 p(x|z)를 모든 z에 대해서 적분을 하는 것이 intractable하기 때문에 결국 계산이 불가능하다. 그래서 그럼 베이즈 공식을 통해 식을 변형해 보기도 하지만, 결국 살펴봐도 식에 우리가 모르는 값인 p(x)가 있기 때문에 계산을 할 수가 없게 된다.

 

그래서 우리는 ! 그 대안으로 인코더를 정의해 주게 된다. 따라서 이 인코더의 역할은 실제 우리가 알고싶은 P(z|x)를 뉴럴네트워크로 가장 근사화하는 Q(z|x)를 구할 수 있는 네트워크가 된다는 것이다.

(p는 우리가 알고싶은 true값, q는 p를 근사화하는 추정값)

 

그리고 이러한 아이디어를 바로 Variational inference라고 합니다.

 


🔥ELBO

그럼 이제 encoder의 도움을 받아서 어떻게 학습을 시키는지 수식의 유도과정을 간단히 살펴보자. 먼저 우리의 목표는 data likelihood인 이 p(X)를 최대화 시키고 싶은 것이기 때문에, 이 값에 log를 먼저 씌워준다. 그리고 그것을 expectation 즉 기댓값 형태로 나타내게 되는데, 이때 log p(X)는 그대로 두고 z가 encoder를 거쳐서 나오는 확률 분포를 따를때의 기댓값으로 이렇게 표현하게 된다. 그리고 이제 베이즈 공식을 사용해서 p(x)값을 변형해서 표현해준다. 이제 동일하게 q(z|x)를 분모분자에 동일하게 곱해주고 앞에 log가 씌워져있기 때문에 log안의 분수를 이와 같이 덧셈과 뺄셈으로 풀어주게 되면, 여기서 이제 두가지 개념으로 최종식을 완성시켜주게 된다.

 

먼저, expectation 개념을 이용해서 이와 같이 적분 형태로 바꿔줄 수 있다. 그리고나서 이제 식을 한번더 변형을 해주게 되는데, 이때 사용하는 개념이 바로 KL divergence 다. 이 KL divergence는 간단히 말하면 두 확률분포의 차이를 계산하는 함수라고 할 수 있는데, 식이 아래에 나와있는 것과 같은 형태로 나타나게된다. 따라서 우리가 구한 이 적분 식과 모양이 똑같기 때문에 다시 적분식을 변형해주면 최종적으로 이렇게 KL을 이용한 식이 나오게 된다.

 

최종 ELBO

이렇게 최종 식만 가져와서 다시 살펴보도록 하자. 결국 우리의 목표는 이 최종식을 maximize하면 되는 것인데 여기서도 우리가 계산할 수 없는 하나의 값이 존재한다 바로 p(z|x)값 인데, 여기서 p는 true값이고 q는 우리가 모르는 p(z|x)를 추정하기 위한 추정값이 되기 때문에 따라서 x가 주어졌을 때 z의 true값은 우리가 계산할 수 없다. 하지만 우리는 얘가 KL divergence라는 것을 알고, 앞에서도 말했듯이 두 확률 분포의 차이를 계산하는 이러한 함수이기 때문에 항상 0보다 크거나 같다라는 정도는 우리가 알수있게 되고, 그럼 이부분이 0보다 크거나 같다면 이 앞의 부분을 LOWER BOUND로 해서 maximization시켜주면 결국 이 전체식을 maximize한 것과 같다는 결론에 이르게 된다.

 

 

따라서 우리가 최적화 시켜야하는 이 최종 부분을 Evidence LowerBOund)라고 해서 ELBO라고 부르게 된다.

 

 

 

이제 이렇게 구한 ELMO를 이용해서 VAE의 최종 loss function이 어떻게 되는지는 

다음 글에서 다루겠습니다