이번 강의부터 Lecture 14까지는 Generative Model들에 대해 다룬다. 요즘 가장 핫한 주제들이기 때문에, 반드시 알고 넘어가야 할 것 같다.

1. Generative Models

    Generative Model은 10년 전만 해도 유의미한 결과를 얻기 힘들었던 분야이다. 그 때에 비해 fundamental한 부분들이 그다지 변하지 않았지만, 더 많은 계산량을 감당할 수 있는 하드웨어가 등장하고, 안정적인 training을 위한 방법들의 등장으로 비약적으로 이 분야가 발달하게 되었다.

1) Supervised Learning VS Unsupervised Learning

    본격적으로 Generative Model을 살펴보기 전에 Supervised Learning과 Unsupervised Learning에 대해 알아보자.

이전 강의에서도 많이 다뤘듯이, Supervised Learning은 data x와 label y를 가지고 x->y의 mapping을 잘 설명하는 function을 학습하는 것이고, Unsupervised Learning은 label 없이 data x만 가지고 데이터의 숨겨진 구조를 학습하는 것이 목표이다. 이러한 분류는 항상 기억하고 있어야 한다.

2) Generative VS Discriminative Models

    이것도 꽤 많이 논의되는 구분법 중에 하나이다. 먼저, Density Function에 대해 알아보자.

Density Function

    Density Function p(x)p(x)는 가능한 모든 xx에 대해 확률값(양수)를 assign한다. p(x)p(x) 값이 크다 = x is more likely 를 의미한다. 이때, Xp(x)dx=1\int_X p(x)dx =1의 관계성을 갖는다. 확률값의 합은 1이 되어야 한다는 뜻이다. 그렇기 때문에 xx 값들은 probability mass를 위해 경쟁한다고 볼 수도 있다. 여러 가지의 probabilistic model들이 있고, 그 모델의 특성들도 다 다르지만, 그들을 구별해주는 것은 '어떤 variable이 probability mass를 가지고 경쟁하는가?' 이다.

    Discriminative Model은 확률 분포 p(yx)p(y|x) 를 학습한다. 모든 data x에 대해, 가능한 모든 label y에 대한 확률 분포를 학습하는 것이다. 위의 사진처럼 만약 class가 dog, cat이라면, 이미지 별로 모든 label의 확률값을 예측한다. 즉, 어떤 이미지가 주어지면 dog, cat class에 속할 확률 값이 무조건 계산되는 것이다. 여기서 probability mass를 놓고 경쟁하는 것은 label들이다. 이미지들끼리는 probability mass를 놓고 경쟁하지 않는다. 이러한 방식이 야기하는 문제점도 존재한다. 만약 class가 dog, cat인데 아예 생뚱맞은 input이 들어온다면 어떻게 될까? 모델은 이러한 이상한 input을 걸러낼 방법이 없다. 이상한 input에 대해서도 사전에 정의된 dog, cat class에 속할 확률을 계산해야 하는 것이다.

    다음은 Generative Model이다. Generative model은 probability distribution p(x)p(x)를 학습한다. 즉, 가능한 모든 data(이미지)에 대한 확률 분포를 학습한다는 뜻이다. 여기서는 가능한 모든 이미지들이 probability mass를 놓고 경쟁하게 된다. 이러한 특성 때문에 모델은 class에 대한 깊은 이해가 필요하다. 그러나, 앞서 언급한 Discriminative Model의 특성은 극복이 가능하다. 이상한 Input의 이미지는 그냥 probability mass를 낮게 주면 되므로, 모델이 이상한 input을 거르는 것이 가능해진다.

    마지막으로 Conditional Generative Model이다. 이것이 우리가 제일 많이 사용하게 될 형태의 generative model이다. Conditional Generative Model은 p(xy)p(x|y)를 학습한다. 가능한 모든 label y에 대해 각 이미지가 그 class에 해당될 확률을 계산하게 된다.

이전에 우리가 봤던 예시처럼 label이 cat, dog라고 하면, 모든 image가 cat class에 해당할 확률을 모두 계산하고, 마찬가지로 dog class에 대한 확률도 모두 계산한다.

Bayes' Rule

    지금까지 우리는 Discriminative Model, Generative Model, Conditional Generative Model에 대해 알아봤다. 이들은 분리된 개념 같지만, Bayes' Rule을 보면 이들의 관계를 알 수 있다.

위의 식을 보면, 이론적으로 우리는 Discriminative Model과 Generative Model을 가지고 Conditional Generative Model을 얻을 수 있다. 그러나 실제로 이렇게 Conditional Generative Model을 구하진 않고, 그냥 이런 관계성이 있다는 것 정도만 알고 넘어가자.

이렇게 다양한 모델들을 가지고 어떤 task들에 적용할 수 있을까?

    Discriminative Model은 훈련을 마친 후 Data에 label을 붙일 수 있고, feature learning도 가능하다. ImageNet에서의 supervised learning에서도 보았듯이, 학습이 되면 좋은 퀄리티의 feature가 나오고, 이를 downstream task에도 사용할 수 있기 때문이다. 정리하자면, Discriminative Model들은 우리가 관심 있는 label y를 예측하는데 사용하거나 downstream task에 이용할 수 있는 feature를 학습하는 feature learning에 사용될 수 있다.

    (Unconditional) Generative Model들은 딱히 쓸모가 없다. outlier를 판별하거나, label 없이 feature learning을 하거나, 새로운 sample들을 만들어 내는데 사용된다. 그러나 만들어지는 데이터를 우리가 원하는 대로 유도하거나 조작할 수 없다는 것이 단점이다. 그러나 전체적으로 많이 쓰이진 않는다고 한다. 수학적으로는 흥미롭지만, 현실에서는 적용하기 어렵다고 한다.

    요즘 나오는 generative model들은 Conditional Generative Model을 기반으로 하고 있는 모델들이 대부분이다. 이 모델들은 outlier들을 걸러내며 데이터에 label을 붙일 수 있다. Conditional Generative Model이 가장 매력적인 부분은 label y를 가지고 우리가 원하는 조건의 이미지와 같은 데이터를 생성해 낼 수 있다는 점이다. 우리가 원하는 이미지를 설명하는 텍스트(label)를 모델이 이미지로 만들어주듯이 말이다.

표현

    Generative Model에 대한 논문들을 읽다 보면 굳이 'Conditional'이라는 표현을 붙이지 않고 Generative Model만 사용하는 것을 볼 수 있다. 심지어 수식에서 label y에 대한 부분을 생략하고 논문에 적기도 한다. 그러나 이런 부분은 수식적인 간단함을 위해서이지, 실제로 Unconditional Generative Model을 다루고 있는 것은 아니다. 생략이 되어 있더라도 대부분의 경우에는 Conditional Generative Model이라는 것을 알고 넘어가자.

2) Why Generative Models?

    그렇다면 우리는 어떤 상황에서 Generative Model을 사용할까? 그 이유는 바로 Model Ambiguity이다. input y에 대한 output x의 경우의 수가 많을 때, 우리는 이를 P(xy)P(x|y)를 모델링해서 해결한다. 여기서 input y, output x라고 쓴 것은 실수가 아니다. 이를 바꿔 쓴 이유는 앞서 언급한 label y를 통해 이미지 x를 만드는 것이기 때문에, 그 의미를 전달하고자 그런 것 같다. 대표적인 Generative Model에는 세 가지 정도가 있는데,

  • Language Modeling : input text y를 이용해 output text x를 생성
  • Text-to-Image : input text y를 이용해 output image x를 생성
  • Image-to-Video : input image y를 이용해 output video x를 생성

3) Taxonomy of Generative Models


위의 그래프가 Generative Model에 대한 분류이다. 이 중에서 왼쪽 절반은 이 글에서 다루고, 오른쪽 절반은 다음 강의(글)에서 다룬다. 크게 보면 Explicit/Implicit으로 나눌 수 있다. Explicit Model은 Model이 P(x)P(x)를 실제로 계산할 수 있는 모델이고, Implicit Model은 P(x)P(x)를 계산할 수 없지만, P(x)P(x)에서 sampling은 할 수 있는 모델이다. 이제 그 아랫단으로 내려가 보자.
  Explicit Model은 다시 Tractable Density/ Approximate Density로 분류할 수 있다. 이름에서도 알 수 있듯이 Tractable Density는 실제로 P(x)P(x)를 계산하는 것이고, Approximate Density는 P(x)P(x)를 근사해서 사용하는 모델이다. Implicit Model은 Direct 와 Indirect로 나눌 수 있는데, Direct는 P(x)P(x)에서 바로 sampling 할 수 있는 모델, Indirect는 P(x)P(x)에서 sample을 근사하기 위한 iterative한 절차를 통해 sampling하는 모델이다. 이제 분류 도표에서 가장 왼쪽에 있는 Tractable Density model의 대표적인 예시인 Autoregressive Model에 대해서 알아보자.

3. Autoregressive Models

1) Likelihood VS Probability

    본격적으로 들어가기 전에 Likelihood와 Probability의 차이를 짚고 넘어 가자. Probability는 density가 고정(fixed distribution)되어 있다. 우리는 정해져 있는 density에서 가능한 모든 x(x는 sample dataset)를 이리 저리 바꾸면서 x가 나올 확률을 변화시키는 것이다. 케이크(density)를 조각(각 x의 확률)으로 잘라서 나누어 주는 것이라고 생각하면 이해가 조금 편할 것 같다. 반면 Likelihood는 sample x를 고정하고, distribution을 변화시키는 것이다. 다양한 distribution들을 보면서 x의 확률이 어떻게 변하는 지를 보는 것이다.
  Likelihood VS Probability를 구분하는 데 가장 중요한 것은 어떤 것이 고정되고 어떤 것이 변하는 지를 명확히 아는 것이다. Likelihood는 x가 고정되고, distribution이 변하며, Probability는 x가 변하고, distribution은 고정되어 있는 것이다. 이를 잘 이해해야 한다.

2) Maximum Likelihood Estimation (MLE)

    Autoregressive Model에 대해 알아보기 전에 Generative Model들에 전반적으로 많이 사용되는 Maximum Likelihood Estimation에 대해 알아보자. 이 방법은 기본적으로 density에 대한 explicit한 function을 쓴다.

대부분의 경우에 그랬듯이, 우리는 이를 neural network를 통해 해결한다. input xx와 weight WW를 받아서 어떠한 확률값 p(x)p(x)를 내보내는 것이다. 이때, 주어진 dataset x(1),x(2),x(N)x^{(1)},x^{(2)},\dots x^{(N)}을 가지고 모델을 훈련시킨다. 이 dataset의 각 xx는 i.i.d (independent and identically distributed) 하다고 가정한다. 이 모든 xx들의 joint distribution을 maximize하는 것인데, 각 xx가 independent이므로 확률 값의 곱으로 표현할 수 있다. 결과적으로 objective function W=argmaxW Πi p(x(i))W^* = argmax_W \ \Pi_i \ p(x^{(i)}) 를 가지고 training data의 확률을 maximize하는 것이 목표인 것ㅇ니다. log를 통해서 곱셈을 덧셈으로 바꿔주고(log는 monotonic한 함수이기 때문에 log을 붙이거나 안 붙이거나 효과가 같다.), 최종적인 loss function을 얻는다. gradient descent를 통해 이를 maximize하면 된다.
  지금까지 말한 내용을 정리해보자. 우리가 살고 있는 세상의 probability function, 즉 true probability distribution을 pdatap_{data}라고 해보자. 우리가 보는 세상은 pdatap_{data}에서 sample된 것이라고 생각하는 것이다. 이러한 관점에서 MLE는 이 pdatap_{data}를 최대한 비슷하게 모델링하려는 과정으로 이해할 수 있다. 실제로 우리는 true distribution이 어떻게 생긴 분포인지는 알 수 없지만, 일상 생활에서 얻을 수 있는 sample들을 통해 최대한 비슷하게 구현하겠다는 취지이다. 따라서 MLE는 우리 데이터(현실 세계)를 가장 정확하게 설명해주는 distribution을 선택한다는 의미이며, 따라서 변하는 것은 distribution, 고정된 것은 data x이다.

    우리가 살고 있는 세상의 분포를 최대한 잘 설명하는 분포를 근사하여 얻는 과정에 대해 알아보았다. 그러나 MLE만으로는 유의미한 결과를 보기 힘들다. 이제 Autoregressive Model에 대해 자세히 알아보자.

3) Autoregressive Model - Deep Dive

    Autoregressive Model은 우리가 알아볼 Generative Model의 한 종류이다. Autoregressive Model은 우리가 가지고 있는 data xx를 가지고 이를 여러 개의 sequence x1,x2,xTx_1,x_2, \dots x_T로 나눌 수 있는 방법이 있다고 가정한다. 여기서 중요한 것은 이 sequence가 하나의 sample을 쪼갠 덩어리들이라는 것이다.

이렇게 하나의 sample을 여러 개로 쪼개면 chain rule을 적용할 수 있다. 이전 sequence들을 input으로 받고 다음 sequence의 probability distribution을 예측하는 것이다.
  이전에 우리가 본 모델 중에서 RNN, masked transformer가 이러한 형식을 가진다. 텍스트의 경우, 데이터의 특성 상 sequence 처리를 하기가 용이하지만, image와 같은 데이터는 sequence 처리를 하기 어렵다. 그래서 이미지를 위한 Autoregressive Model들이 등장하게 되었다.

Autoregressive Models for Images


  이미지를 pixel들의 sequence로 해석해보자. 하나의 pixel은 0~255 사이의 값 3개를 가지며, 이는 각각 RGB에 대한 값이다. 이렇게 이미지를 해석하고, 1D sequence 취급을 하며 autoregressive model에 넣어서 문제를 해결할 수 있다. 그러나 이 방법의 문제점은 비용이 너무 비싸다는 것이다. 1024x1024 image라고 하면, 하나의 image에 대한 sequence가 3M개의 숫자들을 갖게 된다. 이를 해결하기 위해 sequence가 아니라 tile로 모델링을 하는 방법을 사용할 수 있다. 이에 대한 자세한 내용은 다음 강의에서 나온다고 한다.

4. Variational AutoEncoders (VAEs)

    다음으로 살펴볼 것은 VAE이다. VAE는 explicit하지만 intractable한 method이다. 왜 굳이 intractable한 method를 사용해야 할까? 라는 의문이 들 수 있다. 그러나 latent vector을 계산할 수 있는 능력을 얻고, 이를 통해 data의 representation을 배울 수 있기 때문에 의미 있는 과정이다.

1) (Non-variational) AutoEncoders


  먼저 non-variational 버전부터 알아보자. 기본적인 구조도는 위의 사진과 같다. Unsupervised Method이기 때문에 label이 사용되지 않는다. encoder는 input xx에서 유의미한 feature zz를 뽑아내는 것을 학습하며, decoder는 feature zz를 이용해 input data를 복원하며, 이는 구조도 상에서 x^\hat x로 표기한다. loss function은 원본 이미지와 복원된 이미지 간의 L2 loss를 사용하며, encoder, decoder는 CNN, MLP, Transformer 등 다양한 모델들을 사용해도 무방하다.
  위와 같은 방식으로 훈련을 진행한 뒤에는 encoder를 이용해 feature를 뽑고, 그 feature들을 다양한 downstream task에 사용할 수 있다.

위의 예시는 encoder의 feature 뒤에 classifier를 붙여 classification task에 이용한 것이다.
  여기서 하나의 질문이 생긴다. 모델의 input과 output을 보면 xxx^\hat x로, 따지고 보면 identity function이다. input이 output과 동일하다면, 이를 굳이 왜 학습까지 해서 해결하는 걸까? 애초에 해결해야 할 문제일까? 그런데 우리가 여기서 얻으려고 하는 것은 단순히 input과 output만 보고 알 수 없다. 실제로 모델의 설계를 보면 input data x보다 z의 크기가 더 작다. 이러한 설계 때문에 모델은 bottleneck 되어 많은 정보를 담고 있는 data xx를 상대적으로 적은 용량의 zz에 우겨 넣게 된다. 모델은 이런 환경에서 적은 용량만으로 정보를 압축해서 담아내는 방법을 학습하게 되는데, 우리는 이러한 능력을 사용하고 싶은 것이다. 단순히 input-output의 관계를 학습하는 것만 중요한 것이 아니라는 이야기이다.

    만약 우리가 AutoEncoder를 이용해서 새로운 이미지를 생성하고 싶다면 어떻게 해야 할까?

만약 우리가 새로운 zz를 생성할 수 있다면, decoder를 통해 이미지도 생성할 수 있을 것이다. 그러나 AE는 구조적으로 이것이 어렵다. 그래서 등장한 아이디어가 zz를 우리가 알고 있는 distribution으로 만들자는 것이다.

2) Variational AutoEncoders(VAEs)

    VAE는 AE에 확률적인 측면을 추가한 것이다. latent feature zz를 data로부터 학습하고, 모델에서의 sampling을 통해 새로운 데이터 생성을 한다. training data {x(i)}i=1N\{x^{(i)}\}_{i=1}^{N} 이 latent representation zz로부터 생성되었다고 가정하자. 앞서 이야기했던 것과 비슷하게, 우리가 보는 현실이 zz를 이용해 sampling 되었다고 생각하는 것이다. 당연하게도, 우리는 이 zz가 어떻게 생긴 분포인지는 알 수 없다. zz는 우리가 이미지에 대해 알아야 할 모든 정보를 담고 있지만, 실제로 관찰할 수는 없는 latent feature인 것이다.

training이 끝난 후에는 zz를 우리가 아는 분포에서 sampling한다. 보통 이 분포 pθ(z)p_{\theta^*}(z)는 gaussian 분포로 설정하는 편이다. 그런데 zz에서 sampling은 해야 하지만 zz가 뭔지는 모르는 상황에서 training은 어떻게 진행될까? 앞서 언급했듯이, MLE를 사용한다. 만약 우리가 joint distribution (x,z)(x,z)를 알고 있다면, conditional generational model p(xz)p(x|z)를 학습하면 될 것이다. 그러나 우리는 zz를 모르고, 때문에 zz를 marginalize하게 된다. 위의 사진에서 marginalize 하는 식을 따로 빼서 한 번 살펴보자.

pθ(x)=pθ(x,z)dz=pθ(xz)pθ(z)dzp_{\theta}(x) = \int p_{\theta}(x,z)dz = \int p_{\theta}(x|z)p_{\theta}(z)dz

여기서 pθ(z)p_{\theta}(z)는 우리가 이미 gaussian prior 분포로 정의해 놓았다. 또, pθ(xz)p_{\theta}(x|z)는 decoder를 통해 계산하면 된다. 그러나 문제가 되는 것은 적분, 즉 인테그랄 부분이다. 적분은 neural network로 계산할 수 없다. 이 문제를 어떻게 해결할 수 있을까?

    Bayes' Rule을 통해 식을 좀 변형해보자.

pθ(x)=pθ(xz)pθ(z)pθ(zx)p_{\theta}(x) = {{p_{\theta}(x|z)p_{\theta}(z)}\over{p_{\theta}(z|x)}}

여기서 pθ(xz),pθ(z)p_{\theta}(x|z), p_{\theta}(z)는 앞서 본 것처럼 계산 가능하다. 그러나 pθ(zx)p_{\theta}(z|x) 는 계산할 방법이 없다. 이 문제는 qϕ(zx)pθ(zx)q_{\phi}(z|x) \approx p_{\theta}(z|x)을 학습하는 neural network qϕ(zx)q_{\phi}(z|x)를 훈련시켜 해결할 수 있다. 따라서 최종적인 식은 아래와 같이 쓸 수 있다.

이 식을 가지고 MLE를 적용하면 문제를 해결할 수 있다. 이제 VAE의 encoder와 decoder에 대해 자세히 알아보자.

Encoder (qϕ(zx)q_{\phi}(z|x))

    Encoder는 input data xx를 latent code zz로 바꿔준다. 위에서 본 분포들 중 qϕ(zx)q_{\phi}(z|x)가 encoder에 해당한다. 유의미한 feature zz를 만드는 것이 encoder의 목표이다.

Decoder (pθ(xz)p_\theta(x|z))

    Decoder는 latent code zz를 input으로 받고 data xx에 대한 분포를 output으로 낸다. 우리가 위에서 본 분포 중 pθ(xz)p_\theta(x|z)가 decoder에 해당한다.

    encoder와 decoder는 neural network이며, 보통 같이 훈련시킨다. 그러나 모델링을 하려고 보면 하나의 질문이 생긴다. 도대체 어떻게 Neural Network에서 distribution을 output으로 내보낼 수 있을까?

Neural Network에서 distribution을 output으로 어떻게 내보낼 수 있을까?

    이는 모든 분포를 normal distribution이 되도록 유도하는 것으로 해결할 수 있다. 그리고 neural network가 normal distribution의 parameter를 output으로 낸다면, 이를 reparameterization trick(글 후반부에 자세히 다룰 것이다.)을 이용해 sampling할 수 있을 것이다.

gaussian distribution의 parameter로는 평균과 분산이 있는데, 이 parameter들을 encoder와 decoder가 상황에 맞게 output으로 내는 것이다.

Encoder의 경우, 평균(mean vector)과 gaussian의 공분산(covariance)인 μzx,zx\mu_{z|x}, \sum_{z|x}를 output한다. 그리고 decoder의 경우 output이 diagonal gaussian이다.

  • qϕ(zx)=N(μzx,zx)q_{\phi}(z|x) = N(\mu_{z|x}, \sum_{z|x})
  • pθ(xz)=N(μxz,σ2)p_\theta(x|z) = N(\mu_{x|z}, \sigma^2)

이렇게만 보면 무슨 내용인지 이해가 잘 가지 않는다. 예시를 통해 이해해보자. 28x28의 MNIST dataset이 있다고 해보자. 그러면 xR784x \in \mathbb R^{784}를 가진다. 여기서는 차원 별로 생각해야 한다. 쉽게 말해 같은 자리의 픽셀들(같은 차원)끼리의 분포의 평균과 분산을 계산한다는 뜻이다. 이처럼 같은 차원들의 평균(모든 이미지에서 각 자리의 pixel 값의 평균값을 의미한다.) 을 μzx=(μ1,μ2,,μ784)=(0.1,0.9,)\mu_{z|x} = (\mu_1, \mu_2,\dots ,\mu_{784}) = (0.1,0.9,\dots) 라고 해보자. 이런 경우, 첫 번째 자리(차원)의 pixel x1N(0.1,σ2),x2N(0.9,σ2)x_1 \sim N(0.1,\sigma^2), x_2 \sim N(0.9,\sigma^2)라는 것이다. 이렇게 계산한 평균과 공분산 값을 이용해 zz를 sampling하고, decoder에 활용된다. 일단 이 정도만 이해하고 뒤의 내용으로 넘어가자.

3) VAE - ELBO

    이제 VAE의 Encoder-Decoder에 대한 대략적인 개념은 아는 상태가 된 것 같다. 이제 남은 것은 하나다. 어떤 training objective를 사용해야 할까? 지금부터 수식을 쭉 같이 훑겠지만, 결론부터 말하면 VAE의 training objective는 계산 불가능한 항이 껴 있기 때문에 대신 Evidence Lower Bound, 즉 ELBO를 계산하고, 이를 maximize하는 방식으로 훈련을 진행한다. (lower bound가 높아진다는 것은 저점을 높이겠다는 의미이니, 최대화의 의미도 어느 정도 포함하고 있다고 볼 수 있다.) 식을 변형해 우리가 원하는 형태를 만들어 보자.

이전에 우리가 봤던 logpθ(x)\text{log}p_\theta(x)의 식의 분모 분자에 qϕ(zx)q_\phi(z|x)를 곱해주자. 그리고 나서 log term들을 분리해주면 아래와 같은 식이 된다.

이 식이 모두 zz에 dependent 하지 않으므로 expectation으로 감쌀 수 있다.

이렇게 감싸고 나면 위의 식을 얻을 수 있다. 위의 식의 두 번째 항과 세 번째 항은 KL Divergence 식에 의해 아래와 같이 표현된다.

KL Divergence 식 : KL(PQ)=Exp[logP(x)Q(x)]KL(P||Q) = \mathbb E_{x\sim p}[log{{P(x)}\over {Q(x)}}], KL term >= 0

이제 이 식의 항들이 각각 어떤 의미를 가지는지 살펴보자.

  • Ez[logpθ(xz)]E_z[logp_\theta(x|z)] : 첫 번째 항으로써, Data reconstruction term이다.
    -> 우리가 위에서 본 decoder를 나타내는 분포이다. encoder에서 z에서 sampling한 후 decoder에 넣으면 reconstruction이 가능하고, 이는 gaussian으로 계산 가능하다.
  • DKL(qϕ(zx),p(z))D_{KL}(q_\phi(z|x),p(z)) : Prior term. Encoder 분포가 prior gaussian인 p(z)p(z)와 최대한 비슷하도록 하는 term이다. 마찬가지로 gaussian으로 계산 가능하다.
  • DKL(qϕ(zx),pθ(zx))D_{KL}(q_\phi(z|x),p_\theta(z|x)) : Posterior Approximation term. encoder output qϕ(zx)q_\phi(z|x)pθ(zx)p_\theta(z|x)와 비슷해야 한다는 것이다. 문제는 여기서 생기는데, 이 항은 gaussian으로 계산할 수 없다. 이때, KL term은 반드시 0 이상인 것을 이용해 lower bound를 계산한다. 마지막 항을 빼고, 아래 사진과 같은 lower bound를 training objective(loss)로 삼는 것이다.

ELBO를 maximize하는 것이 true log likelihood를 maximize하는 것임을 이용하는 것이다. 이제 training process에 대해서 알아보자.

4) VAE- Training

    먼저, encoder에 input data를 넣어 zz에 대한 distribution을 얻는다. 이때, neural network인 encoder는 앞서 말했듯이 gaussian distribution의 parameter인 평균과 분산을 출력하게 된다.

위의 사진의 ELBO 식에서 초록색 칸이 쳐져 있는 것을 보면, encoder output인 qϕ(zx)q_\phi(z|x)는 gaussian prior인 p(z)p(z)와 비슷하도록 유도한다. 이때 p(z)p(z)는 zero mean, unit variance를 갖기 때문에, encoder output도 이와 비슷하게 유도되는 것이다.

이제 reparameterization trick을 통해 zz를 sampling한다. sampling할 방법이 마땅치 않으니 이러한 trick을 이용해 sampling하는 효과를 내는 것이다. noise distribution ϵN(0,I)\epsilon \sim N(0,I)을 sampling해서 공분산에 곱해주고, 거기에 평균 값을 더해주면 zz가 sampling 된다.

sampling된 zz를 decoder에 넘기고, decoder는 predicted data mean을 뱉는다.

ELBO의 첫 번째 term 인 Ezqϕ(zx)[logpθ(xz)]E_{z \sim q_\phi(z|x)}[logp_\theta(x|z)]을 보면, 예측된 mean인 μxz\mu_{x|z}는 원본 data x와 비슷하도록 유도된다. reconstruction loss의 기능을 하는 것이다. 여기서 μxz\mu_{x|z}는 decoder가 주어진 zz가 들어왔을 때, 원본 데이터 xx가 어떤 분포를 가질 것인가?를 의미하는 값이기 때문에, 사실은 x을 복원한 이미지라고 생각하면 된다. 원본 이미지와 복원한 이미지가 최대한 비슷해야 한다는 뜻이다.

이렇게, 두 가지 loss term이 싸우게 된다. Reconstruction loss는 x마다 z를 다르게 만들어 좋은 reconstruction 퀄리티를 원하고, Prior Loss는 zz를 전부 N(0,I)N(0,I) 근처에 모아 x마다 제멋대로 만들지 못하도록 한다. 서로 반대되는 방향으로 훈련을 진행시키는 것이다. 훈련을 시키면 모델은 이 두 상충되는 loss term들 사이의 최적의 점을 찾는다. 어느 정도의 자유도를 가지고 x를 복원하되, 또 너무 많은 자유를 주지는 않는 정도의 점 말이다.

5) VAE - Sampling

    훈련이 끝나고 나면 zz를 prior로부터 sampling하고, decoder에 돌려서 새로운 이미지를 얻을 수 있다.

profile
AI/ Computer Vision

0개의 댓글