[TIL] Auto-regressive model (feat. NADE, PixelRNN)

0

TIL

목록 보기
7/16

🙋‍♀️ What is Auto-Regressive Model?

가장 먼저, 28 X 28짜리 binary pixel들로 이루어진 mnist dataset이 있다고 가정해보자. 우리가 하려는 것은 p(x)=p(x1,...x784)p(x) = p(x_1,... x_{784})를 구하는 것이다. 그러나 p(x)를 이렇게 구하게 되면 너무 작게 나타나고 구하는 것 조차 어렵다. 그렇다면 p(x)를 어떻게 잘 표현하고 써먹을 수 있을까?

이전 포스트에서 작성했던 것처럼 joint distribution을 chain rule로 나누어 표현하는 것이 auto-regressive의 기본이다. Auto-regressive model은 어떤 하나의 정보가 이전 정보들로부터 dependent하다는 것을 의미한다.

  • 이때 이전 정보 모두일 수도 있고 하나일 수도 있다
  • dependent하다는 것만 충족되면 된다
  • 꼭 모두 dependent하지 않아도 된다.

그리고 이러한 auto-regressive를 사용하기 위해서는 image의 경우 ordering이 상당히 중요하다. 순서를 메겨야 하기 때문이다.

  • 이미지에 순서를 메긴다..?
  • 순서를 메기는 방법에 따라 성능이 달라질 수 있고 방법론이 달라질 수도 있다.

이렇게 Auto-regressive가 이전 n개에 dependent한 것을 AR-N model이라고 부른며, 1개에 dependent하다는 것은 AR-1 model이라고 부른다.

따라서 dependency를 어떻게 주는지 즉, 어떤 식으로 conditional independency를 주는지에 따라서 전체 모델의 structure가 달라지게 된다.

🔧 NADE(Neural Autoregressive Density Estimator)

i번째 pixel을 1번부터 i-1까지 dependent하게 만든 모델이다. 즉 이전의 모든 정보에 대해 dependent하다는 것이다. 따라서 첫번째는 모든 것에 대해 independent 그리고 나아가면서 이전 것들에 대해 dependent하다.

이때 dependent한 이전 값들을 입력으로 받는 neural network를 만들어서 single scalar로 만든 후에 sigmoid를 통과해서 확률값으로의 0 ~ 1로 교체한다. 이 역시, Auto - regressive model이며, 입력이 점점 커지므로 weight가 점점 커질 것이다.

  • NADE는 Explicit model이다.
  • 단순히 generate 외에도 임의의 입력이 주어지면 확률을 계산할 수 있다.
  • 784개의 입력이 주어지면 conditional로 교체하고 결과적으로 이미지가 주어졌을 때에 대한 확률값을 구한다.
  • 이렇기 때문에 단순한 generate외에도 확률 연산이 가능하다는 것

우리가 본 것은 28*28 bianry input일 때였기 때문에 sigmoid를 사용했다. 그렇다면 연속형 분포라면? 이 경우에는 마지막 layer의 gaussian mixture를 활용해서 continous distribution을 만든다.

👾 Pixel(RNN)

image generative model은 결국 이미지를 계속적인 Input으로 사용해 이미지 안에 있는 pixel들을 만들어내고 싶은 것이다. n X n 이미지가 있을 때 RGB를 고려하게 되고 i번째 pixel의 R을 만들고 G, B를 순차적으로 만들겠다는 것이다. 결국에는 Auto-regressive model이 되게 된다.

기존 auto-regressive model과 차이점이 있다면 기존에는 model을 fully connected layer를 통해서 만들었다. i번째를 만들어주기 위해 1부터 i-1을 고려할 수 있는 neural network 즉, dense layer를 만든 것이다.

하지만 PixelRNN은 이것이 아니라 RNN을 활용해서 고려해주겠다는 것이다. ordering을 어떻게 하냐에 따라 아래 두 가지로 나뉜다.

✏️ 후기

Auto-Regressive model은 명칭은 되게 단순하고 쉽지만 그 구조를 이해하기 위해서는 이전 포스트의 확률론부터 이해를 해야 한다. 또한, 그 과정을 어떻게 구성하느냐에 따라 그 구조가 달라지기 때문에 상당히 다양한 모델이 있습니다. 정리하면서 다양한 모델을 접하게 되었는데 공부하는 재미가 있었던 것 같습니다.

출처 : 네이버부스트캠프 자료

https://ratsgo.github.io/generative%20model/2018/01/31/AR/

profile
프리미어와 IDE만 있다면 무엇이든 만들 수 있어

0개의 댓글