目前主要在用的文檔存放: https://www.yuque.com/lart/papers/prnngit
github存檔: https://github.com/lartpang/Machine-Deep-Learninggithub
生成圖像建模是無監督學習中的核心問題。 在無監督學習中,天然圖像的分佈建模是一個具備里程碑意義的問題。此任務須要一個圖像模型,它同時具備表現力、可伸縮和可擴展性。算法
機率密度模型可用於各類各樣的任務,從圖像壓縮和重建外觀,例如圖像修復和去模糊,到新圖像的生成。當模型之外部信息爲條件時,可能的應用還包括_基於文本描述建立圖像_或_在有計劃的任務中模擬將來幀_。生成建模的一大優點是能夠從中學習無窮無盡的圖像數據。然而,由於圖像是高維和高度結構化的,因此估計天然圖像的分佈是極具挑戰性的。網絡
對於生成模型一個最重要的阻礙是構建複雜而具備表現力的可跟蹤的和可擴展的模型。這種權衡致使了各類各樣的生成模型,每種模型都有其優點。大多數工做關注隨機隱變量模型,例如VAE旨在提取有意義的表示,但每每會出現一個難以推斷的推理步驟,這會阻礙他們的表現。一種有效的方法是可跟蹤地模擬圖像中的像素的聯合分佈,把它看做是條件分佈的乘積。這個方法已經應用在了自迴歸模型,例如NADE和fully visible neural networks。因式分解(factorization)將聯合建模問題轉化爲序列問題,在這個問題中,給定全部先前生成的像素,學習預測下一個像素。但要對像素之間的高度非線性和長程相關性進行建模,而且複雜的條件分佈致使必須創建高度表現力的序列模型。遞歸神經網絡(RNN)是一個強大的模型,提供了一系列條件分佈的緊湊的又共享的參數化表示。RNNs已被證實擅長硬序列問題(hard sequence problems),從手寫生成,字符預測和機器翻譯。二維RNN已經在建模灰度圖像和紋理上產生了很是有前途的結果。架構
本文提出了二維 RNNs,並將其應用於天然圖像的大規模建模。由此產生的 PixelRNNs 由多達 12 個快速的二維LSTM層組成。這些層使用LSTM單元在他們的狀態上,並採用卷積,沿着數據的空間維度之一,來計算一次全部的狀態。咱們設計了兩種類型的圖層。第一種類型是Row LSTM層,該層沿每一行應用卷積。第二種類型是對角線BiLSTM(Diagonal BiLSTM)層,其中卷積是沿圖像的對角線以新穎的方式應用。該網絡還把殘餘鏈接用在LSTM層周圍;咱們觀察到,這有助於爲多達12層的PixelRNN的訓練。函數
文章提出了一種深度神經網絡,該網絡沿着兩個空間維度依次預測圖像中的像素。該方法建模原始像素值的離散機率,並編碼圖像中的完整依賴集合。架構創新包括快速二維遞歸層和在深層遞歸網絡中有效使用殘餘鏈接。工具
咱們還考慮了第二個簡化的結構,它與PixelRNN共享相同的核心組件。咱們觀察到卷積神經網絡(CNN),經過使用蒙版卷積(Masked Convolutions),也能夠做爲有着固定依賴範圍的序列模型。性能
PixelCNN架構是一個由15個層組成的全卷積網絡,保留其輸入在各層的空間分辨率,並在每一個位置輸出條件分佈。學習
本文的貢獻以下:測試
咱們的目標是估計天然圖像的分佈,能夠用來跟蹤計算圖像的似然,併產生新的。網絡一次掃描圖像一行,每一行中一次掃描一個像素。對於每一個像素,它預測在給定掃描上下文的可能像素值的條件分佈。圖2說明了此過程。將圖像像素的聯合分佈分解爲條件分佈的乘積。預測中使用的參數在圖像中的全部像素位置共享。
爲了捕捉生成過程,Theis & Bethge(2015)建議使用二維LSTM網絡,從左上角的像素開始,而後向右下角的像素前進。LSTM網絡的優勢是它有效地處理了對對象和場景理解相當重要的長程依賴關係。二維結構保證了信號在從左到右和從上到下的方向都很好地傳播。
目標是將機率p(x)分配給由 n×n 像素組成的每一個圖像 x。咱們能夠將圖像x做爲一維序列 x1,...,xn2,其中像素是從圖像逐行提取。爲了估計聯合分佈 p(x),咱們把它寫成像素上條件分佈的乘積:
值 p(xi | x1,…,xi-1)是 i-th 像素的機率x(給定全部之前的像素 x1,…,xi-1)。生成將按行進行,並按像素進行像素。圖2(左)說明了條件的狀況方案。
每一個像素xi依次由三個值共同肯定,每一個顏色通道分別爲紅色、綠色和藍色 (RGB)。咱們重寫分佈 p(xi | x<i) 做爲如下乘積:
所以,每種顏色都取決於其餘通道以及先前生成的全部像素。
請注意,在訓練和評估期間,在像素值上的分佈並行計算,而圖像的生成是連續的。
之前的方法使用圖像中的連續分佈的像素值。相比之下,咱們將 p(x) 建模爲離散分佈,
方程 2 中的每一個條件分佈都是一個用 softmax 層建模的多項式。每一個通道變量 xi,* 只須要 256 個不一樣的值之一。離散分佈表示簡單,具備任意多模態而沒有形狀先驗的優勢(見圖 6)。實驗發現相比連續分佈的設定,離散分佈是容易學習,更容易產生更好的性能。
行 LSTM 是一個單向層,它每次從上到下逐行處理圖像,爲每行計算特徵;計算使用一維卷積執行。對於像素 xi,該層捕獲像素上方的三角形的上下文區域,如圖4中心所示。一維卷積的核具備 k×1 的大小,其中 k≥3;k的值越大,捕獲的上下文區域越寬。卷積中的權重共享可確保計算特徵沿每一行的平移不變性。
計算結果以下。LSTM 層有一個_input-to-state_組件和一個循環_state-to-state_組件,它們一塊兒肯定LSTM核心內部的四個門。
仔細想來,LSTM中的門實際上作的也就是input-to-statestate-to-state**的計算。
爲了加強 Row LSTM 中的並行化,首先對整個二維輸入圖計算_input-to-state_組件;爲此,k×1 卷積用於沿着 LSTM 自己的行的方向。卷積被掩蓋(masked)只包括「合理」的上下文 (見 3.4 節),併產生大小 4h×nxn 的張量,表示輸入映射中每一個位置的四個門向量(看來四個門是學習模擬出來的,真實並不存在),其中 h 是輸出特徵圖的數量。
爲了計算 LSTM 層的 state-to-state 組件的一步,須要給出之前的隱藏狀態和細胞狀態格狀態 hi-1 和 ci-1,每一個大小爲 h×n×1 的新的隱藏和細胞狀態 hi,ci 能夠由下式所得:
其中 h×n×1 大小的 xi 是輸入圖的行 i,而且 表示卷積運算和元素乘法。權重 Kss 和 Kis 是state-to-state和input-to-state組件的核權重,如前所述。
在輸出,忘記和輸入門爲 oi,fi 和 ii 的狀況下,激活 σ 是 logistic sigmoid 函數,而對於內容(上下文)門 gi,σ 是 tanh 函數。
不一樣門的權重同樣麼?
每一個步驟一次爲輸入圖的整行計算新狀態。因爲 Row LSTM 具備三角形感覺野(圖4),所以沒法捕獲整個可用上下文。
對角 BiLSTM 的目的是並行計算和捕獲任何圖像大小的整個可用上下文。每一個層的兩個方向都以對角線方式掃描圖像,從頂部的一個角開始,併到達底部的相反角。計算中的每一個步驟一次計算圖像中沿對角線的 LSTM 狀態。圖 4右說明了該計算和由此產生的感覺野。
對角計算以下:
除了達到完整的依賴區域,對角 BiLSTM 具備額外的優點,它使用大小爲 2×1 的卷積核,在每一個步驟處理最少的信息量,產生了高度的非線性計算。大於 2×1 的核大小並非特別有用,由於它們不會擴展對角 BiLSTM 的已有的全局感覺場。
咱們訓練多達十二層的PixelRNN。做爲增長收斂速度和更直接地經過網絡傳播信號的手段,咱們將殘餘鏈接從一個 LSTM 層到下一層上。圖 5 顯示了殘餘塊的圖。
對於 PixelRNN LSTM 層的輸入圖具備 2h 特徵。input-to-state組件經過爲每一個門生成 h 維特徵來減小特徵數。應用遞歸層後,經過 1x1 卷積將輸出圖上採樣回每一個位置爲 2h 維特徵,並將輸入圖添加到輸出圖中。
這種方法與之前的方法(沿遞歸網絡的深度使用門控)有關,但它的優勢是不須要額外的門。
除了殘餘鏈接以外,還可使用從每一層到輸出的可學習的跳躍鏈接。在實驗中,咱們評估了剩餘和層到輸出跳過鏈接的相對有效性。
網絡中每一個層的每一個輸入位置的 h 特徵分爲三個部分,每一個部分對應於 RGB 通道之一。
爲了將網絡中的鏈接限制爲這些依賴關係,咱們將掩碼(mask)應用於_input-to-state_卷積和 PixelRNN 中的其餘純卷積層。
咱們使用兩種類型的掩碼,咱們用掩碼 A 和掩碼 B 表示,如圖2右所示。
掩碼能夠很容易地實現,經過在每次更新後的input-to-state卷積中置零相應的權重。相似的掩碼也被用於變分自動編碼器。
行和對角線 LSTM 層在其感覺野內具備潛在的無邊界的依賴範圍。這有必定的計算成本,由於每一個狀態須要按順序計算。一個簡單的解決方法是使接受野增大,但不是無界的。咱們可使用標準卷積層來捕獲有界的感覺野,並計算全部像素位置的特徵。
PixelCNN 使用多個卷積層來保留空間分辨率,不使用池化層。掩碼在卷積中採用,以免看到將來內容;掩碼之前也被用於非卷積模型,如 MADE 。
請注意,與 PixelRNN 相比,PixelCNN 的並行功能的優點僅在訓練或評估測試圖像時可用。圖像生成過程對於兩種網絡都是連續的,由於每一個採樣的像素須要做爲輸入返回到網絡。
多尺度的 PixelRNN 由一個非條件的 PixelRNN 和一個或多個條件的 PixelRNN 組成。
無條件網絡首先以標準的方式生成一個較小的 sxs 圖像,該圖像是從原始圖像中採樣的。而後,條件網絡將 sxs 圖像做爲附加輸入,生成更大的 nxn 圖像,如圖2中間所示。條件網絡相似於標準的 PixelRNN,但每一個層都帶有小 sxs 圖像的上採樣版本。
上採樣和偏置處理定義以下。
在本節中,咱們給出了實驗中使用的 PixelRNNs 的規格。咱們有四種類型的網絡:
表 1 指定單尺度網絡中的每一個層。
第一層是使用 A 型掩碼的 7x7 卷積,這兩種類型的 LSTM 網絡使用可變數量的遞歸層。該層中的輸入到狀態卷積使用類型 B 的掩碼,而狀態到狀態卷積不使用掩膜。Pixel CNN 使用大小爲 3x3 的卷積與 B 型掩膜。而後,頂部的特徵映射經過由整流線性單元(ReLU) 和 1x1 卷積組成的幾個層。對於 CIFAR-10 和 ImageNet 實驗,這些層有 1024 個特徵圖; 對於 MNIST 實驗,有 32 個特徵圖。殘餘和層到輸出的鏈接,在全部三個網絡的層使用。
實驗中使用的網絡具備如下超參數。
咱們全部的模型都是使用來自離散分佈的對數使然損失函數來進行訓練和評估。雖然天然圖像數據一般使用密度函數的連續分佈建模,可是咱們是能夠用咱們的結果與之前的最優結果按照如下方式比較的.
在文獻中,目前最好的作法是,當使用密度函數時, 向像素值添加實值噪聲來_去量化_數據。當均勻噪聲被添加(在區間 [0,1] 的值),而後連續和離散模型的對數似然直接能夠比較。
在咱們的狀況下,咱們可使用離散分佈的值做爲分段均勻連續(piecewise uniform continuous)函數,每一個間隔([i,i + 1],i = 1,2,……256)都有一個常量值.此對應的分佈將具備與原始離散分佈(離散數據)相同的對數似然(在添加噪聲的數據上)。
總離散對數似然由圖像的維數(例如,32x32x3 = 3072 CIFAR-10)來歸一化。這些數字被解釋爲基於該模型的壓縮方案須要壓縮每一個 RGB 顏色值的位數; 在實踐中因爲算術編碼, 也有一個小的開銷。
咱們的模型使用torch工具箱在 gpu 上進行訓練。從不一樣的參數更新規則嘗試, RMSProp 給出了最佳的收斂性能,並用於全部實驗。已手動設置學習率計劃到每一個數據集的最高值,容許快速收斂。不一樣數據集的批處理大小也有所不一樣。
容許的 GPU 內存; 這對應於 32 × 32 ImageNet的 64 images/batch 和 64 × 64 ImageNet的 32 圖像/批處理 。
在網絡的輸入, 除了縮放和取圖像中心,咱們不使用任何其餘的預處理或加強。對於多項式損失函數,使用原始像素顏色值做爲類別。對於全部的 PixelRNN 模型,咱們學習初始遞歸網絡的狀態。
除了直觀和容易實現,咱們發現,在離散像素值上使用 softmax 而不是連續像素值的混合密度方法會獲得更好的結果。對於帶有 softmax 的輸出分佈的行 LSTM 模型,在 CIFAR10 驗證集上得到 3.06 bits/dim 的輸出分佈。對於使用MCGSM(Mixture of Conditional Gaussian Scale Mixtures)的相同模型,咱們得到 3.22 bits/dim。
在圖 6 中,咱們展現了來自模型的一些softmax激活。雖然咱們不嵌入關於
256 顏色類別的含義或關係,例如像素值 51 和 52 是鄰居,模型的分佈預測是有意義的,而且能夠是多模態,傾斜,峯值或長尾。
還請注意,值
0 和 255 常常獲得一個更高的機率,由於他們更頻繁出現。離散分佈的另外一個優勢是,咱們不擔憂在區間[0,255]以外分佈的部分,這是在連續分佈中常要遇到的一些事情。
網絡的另外一個核心組件是殘餘鏈接。在表 2 中,咱們顯示了在 12 層 CIFAR-10 Row LSTM 模型中,具備標準跳躍鏈接或有殘餘鏈接或者同時具備兩者的結果。
咱們看到,使用剩餘鏈接與使用跳躍鏈接同樣有效; 同時使用這兩個鏈接也是有效的並保留了優點。當使用殘餘鏈接和跳約鏈接時,咱們在表 3 中看到,Row LSTM 的性能隨着深度的增長而提升。這能夠容納多達 12個 LSTM 層。
雖然咱們的工做的目標是大規模建模天然圖像,咱們也嘗試將模型用在二值版本的MNIST上,由於這是一個良好的理智檢查(sanity check),有不少之前的優秀工做在這個數據集上進行比較。在表 4 中,咱們報告了對角 BiLSTM 模型的性能和之前發佈的結果。據咱們所知,這是迄今爲止在 MNIST 上最好的報告結果。
接下來咱們在 CIFAR-10 數據集上測試模型。表 5 列出了咱們的模型和之前發佈的方法的結果。咱們全部的結果都沒有數據加強。對於所提出的網絡,對角 BiLSTM 具備最佳的性能,其次是行 LSTM 和 PixelCNN。這與各自感覺野的大小相吻合: 對角 BiLSTM 有一個全局視圖,行 LSTM 有一個部分遮擋的視圖,Pixel CNN 在上下文中看到最少的像素。這代表有效地捕捉大的感覺野是重要的。圖 7左 顯示了從對角 BiLSTM 生成的 CIFAR-10 樣本。
雖然咱們知道在 ILSVRC ImageNet 數據集上沒有發佈結果,咱們能夠比較咱們的模型,咱們給出咱們的 ImageNet 對數似然性能在表 6 中 (沒有數據加強)。
在 ImageNet 上,當前的 Pixel RNN 並無表現爲過擬合, 正如咱們看到,它們的驗證性能隨着尺寸和深度的提升而提升。模型大小的主要約束是當前的計算時間和 GPU 內存。
請注意,ImageNet 模型一般比 CIFAR-10 圖像更不可壓縮。ImageNet 有更多的圖像,相比於 ImageNet 圖像中使用的, CIFAR-10 的圖像最有可能使用不一樣的算法縮放大小。ImageNet 圖像不那麼模糊,這意味着相鄰像素的相關性較小,所以更難預測。因爲下采樣方法會影響壓縮性能,因此咱們已經制做了使用了下采樣的圖像。
圖 7右 顯示從咱們的 32 × 32 樣品, 這來自在 ImageNet 上訓練的模型。圖 8 顯示了來自同一模型的 64 × 64 樣本,而且沒有多尺度調節。最後,咱們還在圖 9 中展現了來自模型的圖像補全樣本。
咱們還提供了在 ImageNet 數據集上生成圖像建模的新基準。基於從模型中提取的樣本和補全結果,咱們能夠得出結論,PixelRNNs 能夠模擬空間上局部和遠程相關性,可以產生尖銳和連貫的圖像。考慮到這些模型隨着咱們使它們變得更大而改進,而且實際上有無限的數據可供訓練,更多的計算和更大的模型可能會進一步改進結果(Given that these models improve as we make them larger and that there is practically unlimited data available to train on,more computation and larger models are likely to further improve the results.)。
關於Diagonal BiLSTM,文中提到:
Given the two output maps, to prevent the layer from seeing future pixels, the right output map is then shifted down by one row and added to the left output map.
這裏應該顯示的是一個所謂的 left output map,那所謂的 right output map 也就是計算的是從右上到左下的過程,可是 right output map 向下移動一行,再加到 left output map 上,那輸出尺寸不就變了麼? 並且爲何會認爲 "seeing future pixels" ?