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