换脸效果媲美GAN!一文解析OpenAI最新流生成模型「Glow」
在碎片化閱讀充斥眼球的時代,越來越少的人會去關注每篇論文背后的探索和思考。
在這個欄目里,你會快速 get 每篇精選論文的亮點和痛點,時刻緊跟 AI 前沿成果。
點擊本文底部的「閱讀原文」即刻加入社區,查看更多最新論文推薦。
這是 PaperDaily 的第?90?篇文章本期推薦的論文筆記來自 PaperWeekly 社區用戶 @TwistedW。基于流的生成模型在 2014 年已經被提出,但是一直被忽視。由 OpenAI 帶來的 Glow 展示了流生成模型強大的圖像生成能力。文章使用可逆 1 x 1 卷積在已有的流模型 NICE 和 RealNVP 基礎上進行擴展,精確的潛變量推斷在人臉屬性上展示了驚艷的實驗效果。
如果你對本文工作感興趣,點擊底部閱讀原文即可查看原論文。
關于作者:武廣,合肥工業大學碩士生,研究方向為圖像生成。
■?論文 | Glow: Generative Flow with Invertible 1x1 Convolutions
■ 鏈接 | https://www.paperweekly.site/papers/2101
■ 源碼 | https://github.com/openai/glow
圖像生成在 GAN 和 VAE 誕生后得到了很快的發展,現在圍繞 GAN 的論文十分火熱。生成模型只能受限于 GAN 和 VAE 嗎?OpenAI 給出了否定的答案,OpenAI 帶來了 Glow,一種基于流的生成模型。
雖然基于流的生成模型在 2014 年就已經提出來了,但是一直沒有得到重視。Glow 的作者在之前已經在基于流的生成模型上提出了 NICE [1] 和 RealNVP [2],Glow 正是在這兩個模型基礎加入可逆 1 x 1 卷積進行擴展,精確的潛在變量推斷在人臉屬性上展示了驚艷的實驗效果,具體效果可在 OpenAI 放出的 Demo [3] 下查看。
論文引入
隨著深度神經網絡的發展,生成模型也得到了巨大的飛躍。目前已有的生成模型除了 Glow 外包括三大類,GAN、VAE 和 Autoregressive Model(自回歸模型)。 其中自回歸模型和 VAE 是基于似然的方法,GAN 則是通過縮小樣本和生成之間的分布實現數據的生成。文中對這些已有的生成模型也做了一個小結:
1. 自回歸模型(Autoregressive Model):自回歸模型在 PixelCNN 和 PixelRNN 上展示了很不錯的實驗效果,但是由于是按照像素點去生成圖像導致計算成本高, 在可并行性上受限,在處理大型數據如大型圖像或視頻是具有一定麻煩的。?
2. 變分自編碼器(VAE):VAE 是在 Autoencoder 的基礎上讓圖像編碼的潛在向量服從高斯分布從而實現圖像的生成,優化了數據對數似然的下界,VAE 在圖像生成上是可并行的, 但是 VAE 存在著生成圖像模糊的問題,Glow 文中稱之為優化相對具有挑戰性。?
3. 生成對抗網絡(GAN):GAN 的思想就是利用博弈不斷的優化生成器和判別器從而使得生成的圖像與真實圖像在分布上越來越相近。GAN 生成的圖像比較清晰, 在很多 GAN 的拓展工作中也取得了很大的提高。但是 GAN 生成中的多樣性不足以及訓練過程不穩定是 GAN 一直以來的問題,同時 GAN 沒有潛在空間編碼器,從而缺乏對數據的全面支持。?
基于流的生成模型,首先在 NICE 中得到提出并在 RealNVP 中延伸。可以說流的生成模型被 GAN 的光芒掩蓋了,但是是金子總會發光。Glow 一文算是將流生成模型推到了學術的前沿,已經有很多學者在討論 Glow 的價值,甚至有說 Glow 將超越 GAN。
具體還要看學術圈的進一步發展,不過 Glow 確實在圖像的生成,尤其是在圖像編碼得到的潛在向量精確推斷上展示了很好的效果。在 OpenAI 放出的 Demo 上展示了很驚艷的實驗效果,就人臉合成和屬性變化上可以看出 Glow 確實可以媲美 GAN。
基于流的生成模型總結一下具有以下優點:
1. 精確的潛在變量推斷和對數似然評估,在 VAE 中編碼后只能推理出對應于數據點的潛在變量的近似值,GAN 根本就沒有編碼器更不用談潛在變量的推斷了。在 Glow 這樣的可逆生成模型中,可以在沒有近似的情況下實現潛在變量的精確的推理,還可以優化數據的精確對數似然,而不是其下限。
2. 高效的推理和合成,自回歸模型如 PixelCNN,也是可逆的,然而這樣的模型合成難以實現并行化,并且通常在并行硬件上效率低下。而基于流的生成模型如 Glow 和 RealNVP 都能有效實現推理與合成的并行化。
3. 對下游任務有用的潛在空間,自回歸模型的隱藏層有未知的邊際分布,使其執行有效的數據操作上很困難;在 GAN 中,由于模型沒有編碼器使得數據點通常不能在潛在空間中直接被表征,并且表征完整的數據分布也是不容易的。而在可逆生成模型和 VAE 中不會如此,它們允許多種應用,例如數據點之間的插值,和已有數據點的有目的修改。
4. 內存的巨大潛力,如 RevNet 論文所述,在可逆神經網絡中計算梯度需要一定量的內存,而不是線性的深度。
基于流的生成模型的優勢展示了 Glow 的魅力,但是在 Glow 論文解讀前,我們還是先回顧一下前兩個基于流的生成模型 NICE 和 RealNVP。
NICE
NICE 的全稱為 NON-LINEAR INDEPENDENT COMPONENTS ESTIMATION,翻譯過來就是“非線性獨立分量估計”。整體上來說,NICE 是為了對復雜的高維數據進行非線性變換,將高維數據映射到潛在空間,產生獨立的潛在變量。這個過程是可逆的,即可以從高維數據映射到潛在空間,也可以從潛在空間反過來映射到高維數據。?
為了實現這個可逆的映射關系,就需要找到一個滿足映射的函數 f,使得 h=f(x),這里的 x 就是高維數據,對應到圖像生成上 x 就是輸入的圖像,h 就是映射到的潛在空間。這個過程是可逆的,也就是。這個潛在空間可以給定一個先驗分布 pH(h),即 h~pH(h)。 所以實現 NICE 的關鍵就是找到這個可逆的映射 f,這個不是一件容易的事,此時就引入了一個矩陣用于輔助實現映射,這就是雅可比矩陣。
雅可比矩陣
假設是一個從歐式 n 維空間轉換到歐式 m 維空間的函數。這個函數由 m 個實函數組成。 這些函數的偏導數(如果存在)可以組成一個 m 行 n 列的矩陣,這就是所謂的雅可比矩陣:
此矩陣表示為:,或者。
雅可比行列式?
如果 m=n,那么 F 是從 n 維空間到 n 維空間的函數,且它的雅可比矩陣是一個方塊矩陣,此時存在雅克比行列式。
雅克比矩陣有個重要的性質就是一個可逆函數(存在反函數的函數)的雅可比矩陣的逆矩陣即為該函數的反函數的雅可比矩陣。即,若函數在點的雅可比矩陣是連續且可逆的,則 F 在點 p 的某一鄰域內也是可逆的,且有。?
對雅克比矩陣有所了解后就可以實現映射:
其中就是 x 處的函數 f 的雅可比矩陣。
設計這個映射函數 f 的核心就是將輸入 x 進行分塊,即。
其中 m 是任意復雜的函數,但是這個分塊對于任何 m 函數都具有單位雅可比行列式,且下面是可逆的:
上面的映射用對數表示就是:
計算具有高維域函數的雅可比行列式并計算大矩陣的行列式通常計算量是很大的,所以直接去算雅克比行列式是不現實的,所以需要對計算做一定的簡化。 NICE論文采用分層和組合變換的思想處理,即(此處符號根據 NICE 一文與 Glow 有些許出入)。 在一些細節優化上可以采用矩陣的上三角矩陣和下三角矩陣做變換表示方陣。?
有了分層和組合變換的處理,接著就是對組合關系的確立,文中采用尋找三角形雅克比矩陣函數簇,通過耦合層關聯組合關系,也就是對 x 做分塊找到合適的函數 m。 具體的細節這里不展開了,有興趣的可以閱讀原文了解。
RealNVP
RealNVP 的全稱為 Real-valued Non-volume Preserving 強行翻譯成中文就是“實值非體積保持”,文章的全稱為 DENSITY ESTIMATION USING REAL NVP, 翻譯過來就是“使用 RealNVP 進行密度估計”。RealNVP 是在 NICE 的基礎上展開的,在 NICE 的基礎上將分層和組合變換的思想進一步延伸。?
NICE 中采用的耦合關系是加性耦合層,即對于一般的耦合層:
所謂加性耦合層就是取 g(a;b)=a+b,其中,此時:
除了可以選擇加性耦合層,還可以選擇乘法耦合層或者仿射耦合層(affine coupling layer)。
而 RealNVP 正是采用仿射耦合層來代替加性耦合層,仿射耦合層采用 g(a;b)=a⊙b1+b2,其中 b1≠0,此時的 m 函數為:,⊙ 為哈達馬積,也就是矩陣的乘法表示,RealNVP 引入仿射耦合層后模型更加靈活。 用 s 代表尺度,t 代表平移量,此時的分塊表示為:
這樣就實現了通過堆疊一系列簡單的雙射來構建靈活且易處理的雙射函數。?
RealNVP 在 NICE 的基礎上的另一大改進就是做多尺度框架的設計。所謂的多尺度就是映射得到的最終潛在空間不是一次得到的,而是通過不同尺度的 潛在變量拼接而成的。我們看一下 RealNVP 給出的多樣性示例解釋圖,這個圖其實還不太清晰,在 Glow 中給的圖就已經很清晰了。
上圖的意思就是每一次做流生成潛在變量時,由于要將兩個潛在變量拼接后輸出,為了保證多尺度就每次保留一個潛在變量,將另一個潛在變量返回到輸入再次進行流操作, 經過 L?1 次流操作后將不再返回到輸入而是直接輸出和之前的 L?1 個潛在變量拼接形成最后的潛在變量的輸出。我們再結合公式理解一下,這里稍微有點繞:
舉個例子就是,比如輸入 x 有 D 維,第一次經過流得到潛在變量 (z1,h1) 其中 z1 和 h1 維度都是, 保留 z1,將 h1 送入下一輪流將得到的潛在變量,保留一個,送入另一個,直到第 L?1 輪將潛在變量直接輸出和其余的潛在變量拼接形成最終的輸出 z。 這里強調一下,多尺度框架的循環和流內部的經歷的次數沒關系,這里為了保留 RealNVP 原文的符號,采用的符號都是原文中的符號。?
RealNVP 基本上就是這樣,但是細節還有很多,這里不詳細展開,深入了解的可讀原文。
Glow模型
我們先一起來看看 Glow 的模型框架:
可以看到整個模型分為 (a) 和 (b),其實 (a) 只是對 (b) 中的“step of flow”的展開。Glow 的思想和前兩篇整體上是一致的,都是為了找到可逆的雙射來實現輸入和潛在空間的相互轉換。?
在設計映射函數時,采用分層變換的思想,將映射 f 函數變換為,也就是一個完整的流需要 K 次單步流才能完成,即(這里的 h 值是內部流的過渡符號和上文提到的多尺度結構不同)。在完整流結束后經過 split 后做多尺度循環,經過 L?1 循環最終的潛在變量就是。?
我們把單步流的框架再仔細分析一下。
Actnorm?
單步流中的第一層就是 Actnorm 層,全稱為 Activation Normalization 翻譯為激活標準化,整體的作用類似于批歸一化。但是批量歸一化添加的激活噪聲的方差與 GPU 或其他處理單元(PU)的小批量大小成反比,這樣造成了性能上的下降,所以文章推出了 Actnorm。
Actnorm 使用每個通道的標度和偏差參數執行激活的仿射變換,類似于批量標準化,初始化這些參數,使得在給定初始數據小批量的情況下,每個通道的后行為動作具有零均值和單位方差。初始化后,標度和偏差被視為與數據無關的常規可訓練參數。可以理解 Actnorm 就是對輸入數據做預處理。?
Invertible 1x1 Convolution?
可逆 1x1 卷積是在 NICE 和 RealNVP 上的改進,NICE 和 RealNVP 是反轉通道的排序,而可逆 1×1 卷積替換該固定置換,其中權重矩陣被初始化為隨機旋轉矩陣。具有相等數量的輸入和輸出通道的 1×1 卷積是置換操作的概括。通過矩陣的簡化計算,可以簡化整體的計算量。
Affine Coupling Layers?
仿射耦合層在 RealNVP 中就已有應用,而 Glow 的基礎是默認讀者已經掌握了 NICE 和 RealNVP 所以單單只讀 Glow 可能不能輕易的理解文章。?
仿射耦合層的映入是實現可逆轉換的關鍵,仿射耦合的思想我們上面也有提過,Glow 將其分為三部分講解。?
零初始化(Zero initialization):用零初始化每個 NN () 的最后一個卷積,使得每個仿射耦合層最初執行一個同一性函數,這有助于訓練深層網絡。?
拆分和連接(Split and concatenation):split () 函數將輸入張量沿通道維度分成兩半,而concat () 操作執行相應的反向操作:連接成單個張量。 RealNVP 中采用的是另一種類型的分裂:沿著棋盤圖案的空間維度拆分。Glow 中只沿通道維度執行拆分,簡化了整體架構。?
排列(Permutation):上面的每個流程步驟之前都應該對變量進行某種排列,以確保在充分的流程步驟之后,每個維度都可以影響其他每個維度。 NICE 完成的排列類型是在執行加性耦合層之前簡單地反轉通道(特征)的排序;RealNVP 是執行(固定)隨機排列;Glow 則是采用可逆 1 x 1 卷積。文中也對三種方法做了實驗上的比較。?
對于單步流的內部操作,文章也做了解釋:
Glow實驗
實驗的開篇是比較 Glow 和 RealNVP,反轉操作上 NICE 采用反轉,RealNVP 采用固定隨機排列,Glow 采用可逆 1 × 1 卷積,并且耦合方式也影響實驗的效果,文章比較了加性耦合層和仿射耦合層的性能差距。通過在 CIFAR-10 數據集的平均負對數似然(每維度的比特)來衡量不同操作的差距,其中所有模型都經過 K = 32 和 L = 3 的訓練,實驗效果如下圖:
可以從上圖看出,Glow 采用的方法都取得了較小的平均負對數似然,這說明了在實驗上是由于其他幾個模型的。
為了驗證 RealNVP 和 Glow 整體的框架下的差距,實驗進一步擴展,比較了 CIFAR-10,ImageNet 和 LSUN 數據集上兩者的差距,在相同預處理下得到的結果如下:
正如表 2 中顯示的,模型在所有數據集上實現了顯著的改進。?
在高分辨率圖像的生成上,Glow 使用了 CelebA-HQ 數據集,數據集包含 3 萬張高分辨率的圖片。實驗生成 256 x 256 圖像,設置 K=32,L=6。我們看到這里的 L 取了 6,在高分辨率下,多尺度的豐富可能會讓得到的潛在變量具有更多的圖像細節。試驗中采用了退火算法來優化實驗,在退火參數 T=0.7 時候,合成的隨機樣本如下圖:
可以看到合成的圖像質量和合理性都是很高的,為了對潛在變量插值生成圖像,實驗以兩組真實圖片為依據,插值中間的過渡,生成的結果如下:
從上圖能看出整體的過渡還是相當順暢的,感覺很自然,這就是 Glow 在潛在變量精確推斷的優勢所在,這樣的實驗結果讓人很驚訝!
為了生成更多含語義的圖像,文章利用了一些標簽來監督訓練,對于不同人臉屬性合成的圖像如下:
生成的效果和過渡都是很自然合理。
退火模型對提高生成也是很重要的環節,文章對比了不同退火參數 T 下的實驗效果,合理的 T 的選擇對于實驗效果還是很重要的。
為了說明模型深度(多尺度)的意義,文中對比了 L=4 和 L=6 的效果,可以看出多尺度對于整體模型的意義還是很大的。
總結
Glow 提出了一種新的基于流的生成模型,并在標準圖像建模基準上的對數似然性方面展示了改進的定量性能,特別是在高分辨率人臉圖像合成和插值生成上取得了驚艷的效果。從整體的閱讀上可以看出 Glow可以完成較好的圖像合成和變換的工作,具體的工作還要在吃透代碼再進一步了解。寫的過程中有什么問題,歡迎指正,謝謝。
參考文獻
[1]. NICE: Non-linear independent components estimation" Laurent Dinh, David Krueger, Yoshua Bengio. ArXiv 2014.
[2]. Density estimation using Real NVP. Ding et al, 2016.
[3]. Glow Demo:?https://blog.openai.com/glow/
本文由 AI 學術社區 PaperWeekly 精選推薦,社區目前已覆蓋自然語言處理、計算機視覺、人工智能、機器學習、數據挖掘和信息檢索等研究方向,點擊「閱讀原文」即刻加入社區!
點擊標題查看更多論文解讀:?
??ACL2018高分論文:混合高斯隱向量文法
??基于詞向量的簡單模型 | ACL 2018論文解讀
??COLING 2018最佳論文:序列標注經典模型復現
??圖像壓縮哪家強?請看這份超詳細對比
??CVPR 2018 最佳論文解讀:探秘任務遷移學習
??深度學習模型復現難?句子對模型復現論文
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點擊 |?閱讀原文?| 下載論文
總結
以上是生活随笔為你收集整理的换脸效果媲美GAN!一文解析OpenAI最新流生成模型「Glow」的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 岗位推荐 | 微软小冰团队招聘数据挖掘/
- 下一篇: AI 趋势