[Paper Review] VAE

Variation AutoEncoder 논문 살펴보기

김현우
None
16 min readMar 7, 2021

--

휴먼스케이프 Software engineer Covy입니다.

본 포스트에서는 이전에 포스트한 논문 리뷰인 StackGAN의 Conditioning Augmentation Layer 에서 conditioning vector 를 만들어내는 과정의 근원이 되는 논문에 대해서 리뷰하려고 합니다. 리뷰하려는 논문의 제목은 다음과 같습니다.

“Auto-Encoding Variational Bayes”

논문에 대한 내용을 직접 보시고 싶으신 분은 이곳을 참고하시면 좋습니다.

Objective

논문의 배경은 사전 확률 분포를 학습하기 위해 구성한 사후 확률 분포가 intractable 했으며, 이를 해결하기 위해 존재했던 Monte Carlo Estimation 방법 효율적이지 못했던 것에서 시작합니다.

위와 같이 설명드리면 이게 무슨 소리지…? 하실 분들이 꽤나 많으실 것 같아서 우선 배경에 대한 설명을 하기 이전에 아래에서 필요한 배경 지식부터 차근차근 설명하려고 합니다.

Background

[주의] 이해해야 할 배경지식이 많습니다. 최대한 이해도를 높이는 방향으로 서술했으나 마음의 준비를 해 주세요.

결론부터 말씀드리자면 VAE 는 Generative Model 입니다. 이전에 제가 썼던 포스트 중에도 비슷한 친구가 있습니다. 비슷한 친구인 GAN 에 대해서 처음이신 분들을 위해서 간단히 설명을 붙이자면 GAN은 noise vector 로 부터 특정 이미지 데이터셋과 유사한 이미지 데이터를 생성해내는 model 입니다. 눈치채셨겠지만, VAE 도 비슷한 기능을 합니다. 다만 다른 점은 input 이 noise vector 가 아닌 이미지입니다. 사실 GAN 이 유명해서 그렇지, VAE 가 GAN 보다 이전에 세상에 공개된 Generative Model 입니다.

한 번 더 언급하는 것이겠지만, VAE 에서 학습하는 것은 이미지로부터 유사한 이미지를 생성하기 위한 model parameters 들입니다. 즉, VAE 에서 궁극적으로 원하는 것은 모델을 통해서 생성된 이미지가 학습에 사용된 이미지 데이터셋에 대해 가지는 유사도를 가장 높일 수 있는 model parameters 를 학습하는 것입니다.

위 문장을 곱씹어 생각해봅시다. 유사도를 확률이라고 보았을 때, 확률이 가장 높은 무언가를 선택하는 것은 어딘가 익숙한 상황입니다.

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

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

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

PR(A|B) 를 저희가 구하고 싶은 B: 머리카락의 길이가 X 일 때, A: 그것이 남자의 것일 확률이라고 한다면,
이는 PR(A): 전체 사람들 중 특정 사람이 남자일 확률에 PR(B|A): 남자가 X 길이의 머리카락을 가질 확률을 곱한 뒤에 PR(B): 전체 머리카락들 중 길이가 X일 확률로 나누어서 구할 수 있다는 것입니다.

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

다시 VAE 로 돌아가봅시다.

저희는 “모델을 통해서 생성된 이미지가 학습에 사용된 이미지 데이터셋에 대해 가지는 유사도를 가장 높일 수 있는 model parameters 를 학습” 이 MLE 의 추론과 비슷하다는 점을 느꼈고, 이 MLE 의 문제점을 해결하기 위해 MAP 를 제안할 수 있게 되었습니다. 조금 더 직접적으로 말씀드리면, 다음과 같습니다.

Model parameters 의 복잡한 “조합별로 생성된 이미지가 학습에 사용된 이미지들과 가지는 유사도에 대한 확률 분포”를 알기 어렵기 때문에 MLE 가 아닌 MAP 를 사용하려고 시도할 수 있다는 것입니다.

하지만, MAP 를 사용하려고 해도 문제점이 나타납니다.

사전 확률 p_theta(x) 를 구하기 위해서 위와 같은 식을 계산해야 하는데 무엇인지도 모를 조합들을 가질 latent variables 들을 적분한다는 것이 가능하지 않았습니다. 이렇게 사전 확률 분포조차 계산 불가능한 점을 인공 신경망의 Intractability 로 언급하여 문제점이라고 칭하고 있습니다.

이러한 Intractability 에 맞서는 방법 중 가장 naive 한 방법이 Monte Carlo Estimation 을 사용하는 것입니다. Monte Carlo Estimation 은 시행의 반복을 통해서 확률 분포를 얻어내는 방법입니다. 이 경우에는 사전 확률 분포를 알기 어렵기 때문에 반복 시행을 통해 latent variables 에 따라 생성되는 이미지 확률 분포에 대한 기댓값을 계산한다고 볼 수 있습니다. 하지만, Monte Carlo Estimation 을 사용하기 위해서는 하나의 theta가 달라진 batch 속에서 각각 sampling 을 진행해야 하고 큰 데이터셋에서 sampling 을 진행한다는 것은 학습 속도를 느리게 한다는 단점이 있습니다.

이 시점에서 다시 Objective 에 적힌 글귀로 돌아가보세요. 어느정도 이해가 되실 것이라 믿습니다.

Qualitative Objective

앞서 사전 확률 p_theta(x) 가 intractable 한 문제에 직면했었습니다. 따라서 이러한 경우에서는 MAP 를 사용할 수 없습니다.

곰곰히 다시 생각해봅시다.

아이러니한 것은 저희가 원하는 것은 주어진 데이터셋 이미지와 유사한 이미지를 생성할 확률이 높은 model paramters theta 를 학습하는 것이라는 점입니다. 이게 무슨 소리인가 하면, 사실 p_theta(x) 를 최대화하는 theta 를 구하면 저희는 원하는 목표를 달성한다는 것입니다.

엥…? 그러면 지금까지 MLE 며, MAP 며 하는 친구들은 왜 소개한거지?? 라는 의문이 들 수 있습니다. 그냥 이미지 X에 대해 X를 가장 잘 생성해내는 model paramters 를 생성해야 한다는 원론부터 시작했으면 됐을 것 같은데 말입니다.

가장 큰 이유는 model paramters 와 이미지와의 관계를 직접적으로 학습하기에 너무 복잡하기 때문입니다. 그렇기에 그 중간 단계인 latent variables z 라는 친구를 들여가며 이미지의 핵심 요소만을 구성하는 vector 를 두어 생각한 것입니다. Latent variables 와 이미지 간은 학습하기 용이하기 때문인 것입니다. 그래서 theta 를 고정해 둔 뒤 이미지를 가장 잘 생성할 수 있는 Latent variables 를 뽑아내고 이들을 또 theta 에 대해서 비교해가면서 하는 찾아내는 시도를 생각해볼 수 있었던 것입니다.

서두가 길었는데, 결국 저희가 원하는 것은 p_theta(x) 를 최대화하는 theta 이고, MAP 에 대한 생각은 지금부터 버리셔도 좋습니다. 단지 배경 설명을 위해 도입한 친구였을 뿐입니다. 지금부터 설명드릴 내용이 이 논문의 주요 내용입니다.

Variational Inference

전통적으로 intractable 한 p_theta(x) 부분을 구해내기 위해 Variational Inference 를 사용했습니다. Variational Inference 를 한 마디로 표현하자면 구하기 어려운 사후 확률 분포를 저희가 알고 있는 확률 분포로 근사하는 것입니다.

이 때, 알고 있는 확률 분포는 확률 분포를 정의하고 있는 변수들에 의해 결정되고, 구하려고 했던 사후 확률 분포는 어떠한 사전 사건의 영향을 받아서 결정됩니다. 알고 있는 확률 분포를 g, 타겟 사후 확률 분포를 f 라고 하면, g(X|phi) 와 f(X|theta) 등으로 표현할 수 있는 것입니다.

이 때, Variational Inference 에서는 두 확률 분포의 차이를 줄이는 방향으로 phi 를 조정해 나갑니다. 그리고 두 확률 분포의 차이는 KL Divergence(Kullback Leibler Divergence) 를 통해 구하게 됩니다.

눈치 빠르신 분들은 P~Q 일 경우에 KL Divergence 가 0에 가까워진다는 것을 아실 수 있습니다. 이러한 성질을 이용해 KL Divergence 를 줄이는 방향으로 phi 를 최적화하여 근사 확률 분포를 구해낸다고 보시면 됩니다. 이러한 목적성을 아래와 같이 정리할 수 있습니다.

phi* = argminKL(g(X|phi)||f(X|theta))

Variational Inference 는 statistical inference 문제였던 posterior estimation 을 optimization 문제로 변경했다는 것에 의의가 있습니다. 하지만 이러한 방법은 phi 에 대한 update 에 추가적으로 iteration을 써야 한다는 단점이 존재했습니다.

VAE

VAE 에서는 앞선 Variational Inference 를 기반으로 하여 새로운 제안을 합니다. Optimization 으로 변형한 문제를 iterative 하게 update 하지 않고 앞서 g 로 표기했던 posterior q(z|x) 와 likelihood p(x|z) 가 각각 encoder 와 decoder 인 auto encoder 를 모델링 한 것입니다.

이게 무슨 소린가 하면… input 으로 들어온 이미지로부터 latent variables 를 생성하는 encoder 부분과 생성한 latente variables 로부터 이미지를 생성하는 decoder 부분을 나누어서 한 번의 update 로 posterior 와 likelihood 를 모두 update 할 수 있도록 설계한 것입니다.

“그래 좋아, 기존에 업급했던 update 를 위한 추가적인 iteration 을 모델 구조를 변경함으로써 해결했구나. 그런데 학습을 위한 기준은 어떻게 세우지?” 라는 의문이 드신다면 잘 이해하시고 계신 겁니다. 이제 그 기준에 대해서 설명하려고 합니다.

Variational Bound

아까 말씀드렸던 이야기를 다시 한 번 언급하겠습니다. 저희는 p_theta(x) 를 최대화하는 theta 를 구하려고 하는 것입니다. 이를 위해서 계산의 편의성을 위해 log(p_thata(x))에 대해서 접근을 시도합니다. 이를 Marginal (log) likelihood 라고 합니다. 저희가 학습에 사용한 이미지 데이터셋이 x(1), x(2), … x(n) 이라 가정할 때 아래와 같이 아래와 같이 theta 에 대해 주어진 데이터셋과 유사한 이미지를 생성해낼 확률 p_theta 를 의미하는 term 을 생성해낼 수 있는 것입니다.

여기서 KL Divergence 에 대한 전개를 통해서 역으로 log(p_theta(x)) 에 대한 lower bound 를 구해낼 수 있습니다. 이는 KL Divergence 가 0 이상이라는 증명 하에 이루어진 전개과정입니다.(증명은 위 사진의 최 하단에 존재합니다. 증명 우측에 X>0 조건이 빠졌네요..ㅠ) 위 사진의 아래에서 세 번째 줄 항목을 ELBO(Evidence of Lower BOund) 라고 부릅니다.

그리고 위해서 구해낸 lower bound 를 변형하면 위와 같은 식으로 변화합니다. 단순한 수학적 계산으로 변형해 낸 것이 어떤 의미가 있을까 싶지만 식에서 의미하는 바를 찾을 수 있습니다.

아래에서 세 번째 줄의 식의 RHS 의 두 번째 항은 Reconstruction Error 로 볼 수 있습니다. Input image x(i) 로부터 생성된 Latent variables 의 확률 분포에서 얼마만큼의 다시 input image x(i) 를 decoder 로 reconstruct 할 수 있게끔 model parameters 가 잘 설정되어 있느냐를 보는 항목입니다. 여기에 앞의 KL Divergence term 을 추가하여 원래 처음에 의도했던 q_phi 라는 inference 를 위한 확률분포가 p_theta 와 비슷하게끔 만드는 regularization 도 진행합니다.

종합하여 위 lower bound 를 maximize 하는 것이 저희의 최종 목표로 변경되었습니다.

Reparametrization trick

최종적으로 model parameter update 에 대한 기준을 세웠습니다. 하지만, 문제점이 있습니다.

위에서 얻어낸 저희가 집중해야 할 lower bound function 을 보시면 기대값을 구하기 위해서 q_phi 분포에서 sampling 하는 과정이 필요합니다. Forward propagation 에서 이러한 sampling 은 시간을 오래 필요로 할 뿐만 아니라 backward propagation 에서는 아예 sampling 자체가 미분 가능한 연산이 아니기 때문에 이런 형태로 설계한다면 올바르게 학습을 설계할 수 없습니다.

이를 해결하기 위한 과정이 Reparametrization Trick 입니다. 말 그대로 변수를 다른 형태로 치환하여 꼼수를 부리는 과정입니다.

결론부터 말씀드리자면 q_phi 확률 분포를 따르는 변수를 sampling 하는 것이 아닌, q_phi 확률 분포를 구성하는 요소들과 p(epsilon) 을 따르는 새로운 vector epsilon 을 이용해서 새롭게 확률 변수를 계산하게 됩니다. 이렇게 계산하는 과정을 통해서 확률 변수에 미분 가능성을 부여할 수 있게 되면서도, 확률 분포에서부터 sampling 하는 효과를 볼 수 있는 것입니다.

가장 간단한 예시로 q_phi 가 gaussian 인 경우 mean mu와 variance sigma 를 이용해서 mu + sigma*epsilon 과 같이 확률 변수를 재창조하는 과정인 것입니다.

최종적으로는 위 그림에서 보이는 바와 같이 Monte Carlo Expectation 을 통해 일반적으로 함수 f(z) 를 reparametrization 을 통해 변형하는 과정을 기존 식에다가 적용해서 lower bound function 을 변형할 수 있습니다. 위 식의 L^A, L^B 의 경우에는 lower bound 식이 앞서서 두 개를 말씀 드렸는데 각각에 대해서 사용한 것이며, 최종적으로는 어느 것을 사용해도 무방합니다. 또한 minibatch 로 학습하게 될 경우에는 전체 데이터셋 사이즈와 배치 사이즈를 기반으로 위 그림처럼 lower bound 를 수정해줍니다.

Choosing Reparametrization Function

끝으로 논문에서는 reparametrization function 을 어떻게 하면 잘 설정할 수 있는가에 대한 팁을 알려주고 있습니다. 간단하게만 소개 드리자면 다음과 같습니다.

  1. Inverse CDF 로 정의한 뒤, epsilon 을 uniform(0,1) 확률 분포에서 sampling 하여 계산해낸다.
  2. Gaussian 과 유사한 경우, location-scale 을 설정하여 location + scale*epsilon 으로 정하고, epsilon 을 N(0,1) 에서 sampling 하여 계산해낸다.
  3. 다른 보조 변수들의 변환으로 계산해낸다.

등의 방법을 사용한다고 합니다. 이 부분은 참고만 하셔도 좋을 것 같습니다.

Experiments

논문에서 진행한 실험으로 논문의 방법을 사용한 학습과 기존의 Wake-Sleep 두 단계로 이루어졌던 학습과의 비교를 진행했습니다.

위 그림에서 보이는 것 처럼 latent space dimension이 바뀜과 관련없이 전체적으로 marginal (log) likelihood 가 논문에서 보여준 알고리즘을 활용했을 때 더 높게 나타남을 보여주었습니다.

마찬가지로 Monte Carlo Estimation 과 함께 training dataset size 에 따른 비교도 진행했습니다. Monte Carlo Estimation 의 경우 online algorithm 이 아니기 때문에 전체 데이터셋을 가지고 시작하지 않으니 효과가 떨어지는 것을 보였고, Wake-Sleep 과 논문의 알고리즘 사이에선 논문의 알고리즘의 높은 marginal (log) likelihood 를 보였음을 내세웠습니다.

Conclusion

이것으로 논문“Auto-Encoding Variational Bayes”의 내용을 간단하게 요약해보았습니다.

오랜만에 이론 위주의 논문을 읽어서 신선했는데, 생각보다 배경지식이 많이 필요해서 정작 논문을 들여다보는 시간보다 배경지식을 공부하는 시간이 조금 더 많았던 것 같습니다. 그래서인지 논문을 읽고 전체적인 통계학적 배경 지식에 있어서 성장할 수 있었다는 느낌이 많이 들었습니다.

개인적으로는 알아야 하는 지식의 산더미에 묻히는 느낌이 들어 읽기에 조금 부담이 되었지만 알아가는게 많았던 논문이었던 것 같습니다 . 여러분들도 생성 모델에 관심이 있으시다면, 그리고 제대로 그 발전을 알고 싶다면 꼭 한 번 읽어보시면 좋을 것 같습니다.

--

--