이전 포스팅 했던 VQ-VAE를 보완했던 논문인 VQ-VAE-2 에 대한 논문입니다.
Abstract
VQ-VAE는 compresse된 latent space에서 autoregressive 방법을 이용하여 sampling 됩니다.
논문에 따르면 이 방법이 large images의 큰 pixel space에서 샘플링 할 경우 훨씬 빠르다고 합니다.
이 논문에서 제시하는 바는 multi scale hierarchical 형태의 VQ-VAE 입니다.
계층적 구조의 VQ-VAE는 latent codes에 대해 굉장히 강력한 priors를 갖게 됩니다. 이는 quality를 굉장히 좋게 뽑아내는 GAN과 비견될 정도의 좋은 이미지를 생성하도록 해줍니다.
게다가 GAN의 단점인 mode collapse, lack of diversity를 겪지 않습니다.
Introduction
Generative model은 크게 두가지로 분류됩니다. 첫번째로는 Likelihood based, 두번째로는 Implicit model 입니다.
Likelihood based model로는 VAE, autoregressive .. 등등이 있고 Implicit model의 대표적인 모델은 GAN 입니다.
GAN은 굉장히 high-quality, high-resolution images를 생성해 낼 수 있지만, true distribution에 대한 diversity를 훈련하기는 굉장히 힘듭니다.
반면에 논문에선 Likelihood based model에 해당하는 VQ-VAE를 기반으로 하여 굉장히 좋은 성능을 내고자 했습니다.
손실이 있는 compression을 사용하자는 것인데, 잘 생각해보면 JPEG의 이미지 포맷 경우는, 데이터를 80퍼센트나 줄였지만, quality 거의 변함이 없습니다.
Method
제안된 Method는 두가지 stage를 갖는 approach입니다.
우선, hierarchical VQ-VAE를 통해 images를 discrete latent space로 인코딩합니다. 그러고 난 다음 강력한 PixelCNN(Pixelsnail)를 discrete latent space에 피팅시킵니다.
위는 논문에서 제시한 알고리즘 입니다.
Stage 1 : Learning Hierarchical Latent Codes
VQ-VAE-2에서는 계층적인 VQ codes를 사용합니다.
이는 local, global information이 분리되어 표현된다는 것에 아이디어를 얻어 나온 결과입니다. (convolution layers가 쌓이면서 각 층이 갖는 정보의 의미를 생각해보면 자명.)
그래서 top latent code는 global information을 갖게되고, 이를 조건으로 하여 bottom latent code가 local에 대한 정보 또한 만들어냅니다.
이는 prior model이 모든 레벨에 대해 특정 상관 관계를 맞춤으로 capture 할 수 있음을 의미합니다.
Stage 2 : Learning Priors over Latent Codes
Stage 1에서 이미지에 대해 훈련을 했으니 이로부터 sampling 할 수 있도록 해야합니다.
이를 위해 prior distributions를 신경망을 통해 학습합니다. (실제로 사용할 수 있도록)
이러한 과정은 marginal posterior와 prior 사이의 간극을 줄일 수 있습니다. 그러므로, 학습된 prior에서 샘플링된 latent variables는 decoder가 training 동안 관측한 것과 매우 유사해집니다.
Stage 1에서 말했던 것 처럼 top latent map은 구조적인 global information에 해당합니다. (resolution이 작다.) 그러므로 이와 어울리게 multi headed self attention을 장착해줘서 더 넓은 receptive field를 갖게 해줍니다. (이런 형식이 Pixelsnail)
참고로 top, bottom에 대한 prior는 따로 훈련될 수 있습니다.
'Generative Model' 카테고리의 다른 글
NICE : Non-linear Independent Components Estimation (0) | 2021.09.24 |
---|---|
PixelCNN의 실행 흐름 (0) | 2021.09.22 |
Neural Discrete Representation Learning : VQ-VAE (0) | 2021.09.17 |
Variational Auto Encoder를 이해해보자! (3) (0) | 2021.09.14 |
Variational Auto Encoder를 이해해보자! (2) (0) | 2021.09.13 |