如何比較PixelCNN與DCGAN兩種Image generation方法?

今天組會讀了一下deepmind的PixelCNN(nips的那篇),不是很明白到底為什麼follow的work這麼多(而且pixel rnn還拿了best paper award。。),感覺pixel by pixel生成是一種非常反直覺的生成方式。而且是規定了從上往下從左往右的順序。這種生成方式的insight在哪裡?

(個人理解是為了引出wavenet?因為對語言序列來說生成是有順序的,但是用來生成圖片就很奇怪了)

相比較,雖然GAN生成的更加隨意,但是laplacian GAN和stack GAN都是一種更符合直覺的方式。

另外,pixel CNN也有生成速度慢的問題,所以它和GAN相比到底有什麼不同的地方值得大家去思考呢?(有什麼可能比GAN更優的地方呢?)

(對pixelCNN還一知半解,只是想到了提個問,歡迎貼個reddit上已有的討論啊什麼的。。。。。。)


謝邀,相比GAN,PixelCNN/RNN有以下幾個優勢:

1. 可以通過chain rule提供exact的data likelihoodp(	extbf{x})=prod_{i=1}^{n^{2}} p(x_{i}|x_{1}, ..., x_{i-1}),雖說likelihood不是一個完美的evaluation metric [12],但它對評價一個generative model還是能提供很多insight(尤其是detect missing mode)。GAN的方法不僅沒有辦法給出exact的likelihood,而且approximate出來的likelihood似乎結果很差 [9]。另外PixelCNN這套方法在likelihood這個metric上是state-of-the-art,甩其它方法一大截。我覺得拿ICML best paper主要就是因為這個。

2. 因為objective function直接就是likelihood,PixelCNN的training要穩定很多

PixelCNN的典型training curve[11]:

GAN的典型training curve... [10]

3. PixelCNN的data space可以是continuous也可以是discrete的(discrete的performance稍好一點點),但是GAN目前基本還只能在continuous data上work。在discrete data上如何實現GAN目前仍是一個non-trivial的open problem。

當然,除了題主提到的依賴於arbitrary的order而且sampling很慢以外,PixelCNN還有很多缺點:

1. PixelCNN的training其實也很慢,比如OpenAI的PixelCNN++ [8] 要在8塊Titan上train 5天才converge... 這還只是一個CIFAR dataset

2. sample quality明顯不如GAN。現在state-of-the-art的GAN在CIFAR上能生成相當reasonable的sample [5]:

但是PixelCNN++[8]的sample基本還看不出什麼object...

3. 暫時還沒有paper用PixelCNN成功做出來unsupervised/semi-supervised feature learning,但是GAN在這方面碩果累累 [1,2,3,4]。

最後還想說的一點是,PixelCNN和GAN也許並不是非此即彼的關係,在將來有可能可以combine起來。如果有一個generative model能同時具備兩者的優勢,既能給出exact的likelihood又能有GAN這麼好的sample quality,那將會是一個非常有趣的工作。這幾個月的各種model組合(VAE+GAN [6], VAE+PixelCNN [7])也suggest這種combination或許是可行的。

[1] Salimans et al., Improved Techniques for Training GANs, 2016

[2] Dumoulin et al., Adversarially Learned Inference, 2016

[3] Donahue et al., Adversarial Feature Learning, 2016

[4] Denton et al., Semi-Supervised Learning with Context-Conditional Generative Adversarial Networks, 2016

[5] Huang et. al., Stacked Generative Adversarial Networks, 2016

[6] Larsen et al., Autoencoding beyond pixels using a learned similarity metric, 2016

[7] Gulrajani et al., PixelVAE: A Latent Variable Model for Natural Images, 2016

[8] Salimans et al., PixelCNN++: A PixelCNN Implementation with Discretized Logistic Mixture Likelihood and Other Modifications, 2016

[9] Wu et al., On the Quantitative Analysis of Decoder-Based Generative Models, 2016

[10] torch/torch.github.io

[11] carpedm20/pixel-rnn-tensorflow

[12] Thesis et al., A note on the evaluation of generative models, 2016


本質上來講,PixelCNN生成圖像是以串列的方式,從左到右從上到下排好隊,一個像素一個像素來生成,每個像素的生成僅依賴於上文信息,而GAN生成圖像是以並行的方式,唰一下子生成一幅圖像,每個像素的生成依賴於上下文信息,多利用了下文的信息。我想這也是PixelCNN比較慢和生成圖像質量較GAN差的原因。

  1. NIPS 2016 Tutorial: Generative Adversarial Networks: https://arxiv.org/pdf/1701.00160.pdf
  2. How to Train a GAN? Tips and tricks to make GANs work: soumith/ganhacks


推薦閱讀:

[DL-架構-ResNet系] 007 SENet
從編程實現角度學習Faster R-CNN(附極簡實現)
PhD Talk直播預告 | 亞馬遜高級應用科學家熊元駿:人類行為理解研究進展
CS231n課程筆記翻譯:圖像分類筆記(上)
車輛3D檢測:Deep MANTA論文閱讀筆記

TAG:人工智慧 | 機器學習 | 計算機視覺 | 深度學習DeepLearning |