Pixel CNN++
Abstract
相較於Pixel CNN,此方法不僅簡化了模型,也改善了最後的結果。
- 使用了discretized logistic likelihood在pixel上,取代了原本的256維softmax distribution,此方法可以加速訓練的時間。
- 一次看整個pixel而非分開三個channels,此方法可以簡化模型。
- 使用了downsample使得捕捉整個圖像結構時更有效率。
- 使用了short-cut connection來加速優化。
- 使用了dropout來regularize。
Introduction
Pixel CNN++是以Pixel CNN當基底,並加以改善而得。用log-likelihood來計算誤差的話結果是最好的,並且在訓練時,可以直接對每個pixel平行去計算,以提高效率。
Modifications To Pixel CNN
- 使用了discretized logistic likelihood
在原始的Pixel CNN中,使用了256維的softmax來對每個subpixel進行運算,這種做法雖然非常有彈性,但是會造成記憶體很大的負擔。此外,用softmax這種方法,neuron network不會知道128其實很接近127或129,而這種認知需要在前幾層layer就已經先讓網路學到。且若是在已知的圖片中,某些值沒有出現過,則此模型會將這些值出現的機率設為0。若是在高解析度、高精確度的影像上,會相當吃記憶體跟運算時間,使訓練的速度非常緩慢。
在此篇論文的做法中,使用了continuous distribution的latent color intensity v,隨後在四捨五入至8 bits的表示法。因此,我們需要選擇一種continuous distribution來model出v,且必須要有效率且簡單,此處選擇了mixture of logistic distributions,此方法可以較簡單的使用已觀察到的值來進行運算,如公式(2)所示。

在使用混合模型時,會對v做四捨五入成為x,以免超過0或255這兩個邊界值,而且四捨五入的方法會給予0或255較高的機率值,也符合了觀察。
2.算條件機率時,針對整個pixel進行
在原始的Pixel CNN中,分開了三個channel R、G、B,這種方法雖然可以有效的區分其中的依賴關係,但是會使模型過於複雜:除了要注意pixel在空間中的位置之外,還要注意目前狀況下能看到幾個channel,這種依賴的關係其實可以更為簡單且不用使用深層的網路來進行計算。因此,此處便使用已經預測完的整個pixel來進行下個完整pixel預測,並產生出joint distribution。
而預測出來的distribution可以解釋為一個簡單的分解模型:1.首先先透過discretized mixture of logistics來得出R值。2.接著,也用相同的distribution來算出G值,此處,mixture component的平均值線性的依賴於R值。3.最後,B值也是使用相同的方法,並在mixture component的平均值線性的依賴於R值與G值。

在運算特定pixel(i, j)時,條件為mixture indicator與(i, j)之前的pixel。而在運算時,首先sample出整個pixel的mixture indicator,接著一個一個透過mixture component來sample出三個channel的值。
3.Downsampling vs. Dilated Convolution
在原本的Pixel CNN中,觀察的pixel數量有所侷限,雖然對於local dependency有很好的效果,但對於長距離的dependency便不太能使用。
在此處,使用了CNN並以stride 2來進行downsampling。Downsampling比起Dilated Convolution,可以有效的降低運算量並達到同樣的效果,並且使input size縮小四倍。
而因為downsampling後失去的資訊,可透過short-cut connection解決。
4.加入Short-cut Connections
為了彌補因為downsampling與upsampling所流失的資訊,此處添加了short-cut connection來解決此問題。
與原本的Pixel CNN相似,皆是使用了兩種方向的convolution與residual net,但是多了兩個不一樣的地方:1.使用了downsampling與upsampling,這樣可以更有效率的在大尺度的空間上計算。2.第k個layer會直接input至第(K-k)個layer。

5.用Dropout實現Regularization
Pixel CNN其實非常容易overfitting,而overfitting後反而會產生低perceptual quality的圖像,如圖二所示。

Experiments
- Unconditional Generation on CIFAR-10
使用的model不再贅述,而產生的結果如圖三所示,與其他方法的比較如表一所示。


2.Class-conditional Generation on CIFAR-10
作法為將label化為one-hot encoding,並投射為bias vector加入每個convolutional layer中。圖四為結果。

3.實驗網路的深度與視野的大小
在實驗中,透過兩個方式:1.移除downsampling block、2.減少layer數,來降低接收視野。實驗中使用了兩個大小:11*5與15*8。
當我們減少了接收視野的大小,會大幅度地降低網路的容量,為了要增加容量,此處也做了兩件事:1.NIN(Network In Network):加入了gate ResNet block並加上1*1 convolution在原來的convolution blocks中間。此實驗中,加入了三個NIN在每個layer間。2.Autoregressive Channel:利用1*1 convolution gate ResNet block來跳過多組通道間的連結。
經過了上述的方式,成功的增加了網路的容量,也使log-likelihood有不錯的表現,如表二所示。不過,較小的接收視野sample出的圖還是缺乏了全局的架構,如圖五所示。


4.改變模型效果實驗
Pixel CNN++中改進了一些原Pixel CNN模型的部分,此處將改變的地方逐一提出,來測試是否真的有效。
4.1.使用Softmax Likelihood而非Discretized Logistic Mixture
此實驗中,對Pixel CNN++的模型進行了output為Softmax與Discretized Logistic Mixture的比較,結果發現1.訓練速度Softmax較慢、2.表現結果Softmax也略遜一籌。不過此方法是做在此模型上,不知道在原Pixel CNN上孰優孰劣。詳情見圖六。

4.2.Continuous Logistic Mixture vs. Discretized Logistic Mixture
實驗中,加入均勻分布的噪音來做de-quantize,使其變為連續的。此模型可用VAE來進行描述,用Pixel CNN++模型產生的distribution做完de-quantize的pixel z可作為latent code。在此方法中,原始的離散pixel值x可以透過z完美的還原。因為均勻分布的distribution的entropy為0,所以轉化為離散的值x後,log-likelihood還是原本連續型z的值。
用連續刑得出的結果為3.11,略遜於離散型的2.92。
4.3.不使用Short-Cut Connections
由圖七可以看出有無進行Short-Cut Connections對結果影響很大,因為我們進行了sub-sampling,所以資訊流失很多,進行Short-Cut Connections是有其必要的。

4.4.沒有Dropout
若是沒有使用Dropout,雖然在訓練時的結果還是可以在3以下,但testing時會到6點多的誤差,嚴重overfitting。Sample出的圖可見圖二。