Boostcamp AI Tech

[Boostcamp Day-10] DL Basic - Generative Models

ju_young 2021. 8. 13. 23:09
728x90

Learning a Generative Model

예를 들어서 강아지 이미지가 주어져있다고 하자.

 

그러면 다음과 같은 확률 분포 P(x)를 학습하고 싶을 수 있다.

  • Generation : 강아지와 같은 이미지를 sampling하는 것
  • Density estimation : 강아지 이미지가 주어졌을 때 p(x)가 높으면 강아지, 낮으면 다른 것(anomaly detection)으로 분류할 수 있다. 또한 다음과 같이 확률 값을 얻어 낼 수 있는 모델을 "explicit model"이라고 부른다.
  • Unsupervised representation learning : 귀, 꼬리와 같은 feature leaning을 할 수 있다.

그렇다면 이 P(x)를 어떻게 만들 수 있을까?

Basic Discrete Distributions(기본적인 이산형 분포)

  • Bernoulli distribution : (biased) coin flip -> 동전의 앞뒤

동전을 던졌을 때 앞 또는 뒤가 나오지만 확률은 하나만 필요하다. 예를 들어서 앞면이 나올 확률이 p라고 하면 뒷면이 나올 확률은 1-p라고 표현할 수 있다.

  • Categorical distribution : (biased) m-sided dice -> m개의 면으로 이루어져있는 주사위

만약 6개의 면으로 이루어져있는 주사위를 던졌을 때 확률값은 5개가 필요할 것이다. 왜냐하면 나머지 하나는 1에 해당 5개의 확률을 더한 값을 빼준 값이 될 수 있기 때문이다.

Structure Through Independence

예를 들어 다음과 같은 숫자 이미지가 있다고 했을 때 각 pixel은 0과 1의 값을 가진다고 할 수 있다. 즉, binary 값을 가진다고 할 수 있다.

그렇다면 이 binary 값으로 표현할 수 있는 개수는 다음과 같이 표현할 수 있을 것이다.
$$
2 \times 2 \times \cdot\cdot\cdot \times 2 = 2^n
$$
그리고 각 pixel에 대한 확률 분포의 parameter의 개수는 다음과 같이 계산된다.
$$
2^n - 1
$$
그런데 paramter의 개수가 너무 많다...

 

이제 각 pixel들이 모두 independet 하다고 가정해보자. 그러면 확률 분포는 다음과 같이 나타낼 수 있을 것이다.
$$
p(x_1, \cdot\cdot\cdot, x_n) = p(x_1)p(x_2)\cdot\cdot\cdotp(x_n)
$$
그리고 다시 parameter의 개수를 세보면 "n"개가 나온다.

 

결론적으로 independence assumption(독립가정)을 통해 parameter의 개수가 2^n개에서 n개로 눈에 띄게 줄일 수 있다는 것이다. 하지만 이렇게 독립가정으로 표현할 수 있는 이미지가 매우 한정적이라는 문제가 있다.

Conditional Independence

다음과 같이 세 가지의 중요한 규칙이 있다.

  • Chain rule

$$
p(x_1,\cdot\cdot\cdot,x_n) = p(x_1)p(x_2|x_1)p(x_3|x_1,x_2)\cdot\cdot\cdotp(x_n|x_1,\cdot\cdot\cdot,x_2)
$$

만약 chain rule을 사용한다고 했을 때 각 parameter의 개수를 계산하면 다음과 같이 나온다.

p(x_1) : 1 parameter

p(x_2|x_1) : 2 parameters

p(x_3|x_1, x_2) : 4 parameters

따라서 모든 값을 더하면 $1 + 2 + 2^2 + \cdot\cdot\cdot + 2^{n-1} = 2^n - 1$개의 parameter가 나온다. 그리고 이것은 dependent할 때의 parameter의 수와 같다는 것을 알 수 있다.

  • Bayes' rule

$$
p(x|y) = \frac{p(x,y)}{p(y)} = \frac{p(y|x)p(x)}{p(y)}
$$

  • Conditional independence

z값이 주어졌을 때 x와 y가 independent하다면 다음과 같은 식이 성립한다.
$$
p(x|y,z) = p(x|z)
$$

- Markov assumption

Markov assumption를 적용하게 되면 다음과 같이 확률 분포를 구할 수 있다.
$$
p(x_1,\cdot\cdot\cdot,x_n) = p(x_1)p(x_2|x_1)p(x_3|x_2)\cdot\cdot\cdotp(x_n|x_{n-1})
$$
위 수식에서 보듯이 Markov assumption는 현재와 바로 이전의 값만을 사용하여 계산한다는 것을 확인 할 수 있고 parameter를 계산해보면 "2n - 1"개가 나온다. 이전에 independent assumption을 통해 구한 n개 보다는 크지만 확연히 줄일 수 있다는 것을 알 수 있다.

 

이러한 것을 "Auto-regressive models"라고 부른다.

Auto-regressive model

다음과 같이 28x28의 binary pixel로 이루어진 숫자 이미지가 있다고 하자.

그리고 다음과 같이 chain rule을 사용하여 확률변수를 구한다고 했을 때 "autoregressive model"이라고 한다.
$$
p(x_{1:784}) = p(x_1)p(x_2|x_1)p(x_3|x_{1:2}) \cdot\cdot\cdot
$$
이전에 Markov assumption를 적용한 model도 autoregressive model이라고 하지만 이렇게 이전의 x_1부터 x_i-1까지의 값을 dependent한 model도 autoregressive model라고 부른다.

 

또한 이렇게 과거의 데이터에 dependent하기때문에 모든 random variable에 순서를 매겨야한다.

NADE : Neural Autoregressive Density Estimator

바로 위에서 설명한 autoregressive model을 적용한 model로 똑같이 x_1~x_i-1의 값을 dependent하여 계산하는 방식을 사용하였다. 이때 입력 차원의 개수가 첫 번째 값부터 차례대로 진행될수록 커지면서 weight의 차원 또한 커질 것이다.

 

예를들어 784개의 binary pixel이 입력되었을 때 다음과 같이 계산하여 확률을 얻을 수 있는 것을 확인 할 수 있고 이는 generation 뿐만아니라 입력에 따른 확률 값 또한 계산할 수 있다는 것을 보여준다.
$$
p(x_{1:784}) = p(x_1)p(x_2|x_1)\cdot\cdot\cdotp(x_{784}|x_{1:783})
$$
만약 continuous random variable이 입력된다면 mixture of Gaussian을 사용할 수 있다.

Pixel RNN

쉽게 말하면 이미지에 있는 pixel들을 만들어내는 generative model이다. 예를 들어 nxn의 RGB 이미지가 있다면 다음과 같이 R, G, B를 따로따로 autoregressive model을 적용하여 수식을 나타낼 수 있다.

그리고 Pixel RNN은 ordering을 하는 방식에 따라 다음과 같이 두 가지 model로 나누어진다.

728x90