機器之心原創
作者:思源
生成對抗網絡這一 ML 新成員目前已經枝繁葉茂了,截止今年 5 月份,目前 GAN 至少有 300+的論文與變體。而本文嘗試藉助機器之心 SOTA 項目梳理生成對抗網絡的架構與損失函數發展路徑,看看 GAN 這一大家族都有什麼樣的重要歷程。
在前一篇文章中,我們展示了如何藉助 SOTA 項目探索機器翻譯最前沿的進展。我們可以發現,擁有最頂尖效果的模型,通常都有非常美妙的想法,這對於理解整個任務或領域非常重要。但是如果從另一個角度,探討這些頂尖模型的關係與演化,我們能獲得另一種全局體驗。
為了獲得這種全局概覽,我們探索了 SOTA 項目中圖像生成領域的頂級模型。根據機器之心的 SOTA 模型統計,在圖像生成領域 58 個頂尖模型中,有 32 個模型在命名中帶了「GAN」。這還是包含了生成對抗網絡、變分自編碼器和流模型三大生成模式的結果。
由此可見,GAN 最近兩年構建的變體非常多,我們難以理清它的發展主線。為此,通過 SOTA 項目理解 GAN 的發展全景,也不失為一個好方法。
圖像生成 SOTA 排名:https://www.jiqizhixin.com/sota/tech-task/3070d792-9832-48aa-bb1c-3b899fc3c100
因為圖像生成領域的 SOTA 排名涉及非常多的數據集與度量方法,我們並不能直觀展示不同 GAN 的發展路線。但是通過統計最主流的一些解決方案,我們還是能從模型架構與損失函數兩方面介紹 GAN 的發展。
圖註:模型由淺到深、機制由簡單到複雜、圖片質量由低到高的發展過程,其中 SinGAN 獲得了 ICCV 2019 最佳論文。圖片改編自 arXiv:1906.01529。
圖註:不同生成對抗網絡所採用的損失函數,它們針對 GAN 的不同缺點提出了自己的解決方案。
生成對抗這個思想可以很早
我們都知道生成對抗網絡是 Ian Goodfellow 在 2014 年提出來的,它在圖像生成上得到了令人驚豔的效果。本身生成對抗的思想非常容易理解,可以總結為「茅與盾」這幾個字。稍微具體一點的話,我們可以看看 Goodfellow 在原論文中給出的一個案例:
圖註:生成對抗網絡的簡要學習過程,選自 arXiv: 1406.2661。
GAN 主要分為生成器與判別器,如上圖所示生成器會將初始的隨機分布 z 映射到 x,並得到綠色的隨機分布。而判別器會判斷黑點的真實分布與綠線分布是不是一致,只要判別器能分辨出來,那就它就能指導生成器繼續更新。如藍色虛線所示,較高的位置表示判別器認為樣本來自真實分布,較低位置則來自生成分布。直到藍色虛線一直處於中間位置,那麼它分辨不出兩個分布的差別,上圖從 a 到 d 展示的就是 GAN 的學習過程。
雖然這種生成對抗的思路是通過 GAN 來發揚光大的,但是之前其實就有比較類似的思想。Olli Niemitalo 在 2010 年就在博客寫到:「與生成器同時訓練一個分類器網絡,以隨機或交替順序向該網絡輸入生成數據和原始數據。然後,分類器根據周圍圖像的語境猜測該輸入是原始數據 (1) 或生成數據 (0)。同時,生成器網絡嘗試從分類器中獲得高分 (1)。」
此外,Jurgen Schmidhuber 也表示,GAN 與他 1992 年提出的 Predictability Minimization(PM)非常相似,GAN 和 PM 的主要區別只在於方向相反。在 Jurgen 今年的一篇概述論文中(arXiv: 1906.04493),他表示 PM 模型與 GAN 都是建模給定數據的無監督技術,它們都利用基於梯度的對抗網絡來實現極小極大博弈。
圖註:PM 模型與 GAN 的工作流,其包括了各種變體。其中 PM 模型通過極小極大策略訓練一個編碼器,從而得到高質量的中間表徵,該表徵是可以生成為對應樣本。而 GAN 看起來正好相反,它根據隨機的中間表徵,學習一個能生成真實樣本的編碼器。選自 arXiv: 1906.04493。
如上所示,PM 模型使用基於梯度的極小極大策略學習數據的編碼器,從而使中間表徵與數據的分布保持一致。而 GAN 卻使用基於梯度的極小極大策略直接學習給定中間表徵的解碼器。因此,PM 模型編碼器的輸入類似於 GAN 解碼器的輸出,PM 模型編碼器的輸出類似於 GAN 解碼器的輸入。
此外,GAN 嘗試根據其它給定類型的分布逼近真實數據分布,通常可以給定高斯或二項分布等。而 PM 模型嘗試通過多變量階乘(factorial)二項分布畢竟真實分布。
總的而言,儘管 GAN 為大家所熟知,但之前也有沿著極小極大博弈做生成模型的思路。1992 年的 PM 模型儘管不是那麼為人所知,但它的思想還是非常先進的。
GAN 的損失函數演進
除了核心思想外,另一個重要的問題是我們該如何拉近真實圖像分布與生成分布之間的距離。如同上文黑色點線和綠色實線一樣,GAN 的學習本質就是令生成分布逼近未知的真實分布。要做到這一點,損失函數就必不可少了,GAN 的損失函數會度量兩個分布之間的距離,並儘可能拉近它們。
在 14 年 Goodfellow 等研究者提出來的 GAN 中,它使用 KL 散度度量這種距離。機器之心之前曾詳細推導過這種基於 KL 散度的學習過程,感興趣的讀者可以查閱該文章。但是原版 GAN 的訓練並不穩定,最開始的對抗階段可能一直生成隨機噪聲,最後收斂的結果也很可能只生成少量類別的大量重複圖像。
為了解決這一系列問題,生成對抗網絡後續也就有了一系列的損失函數創新。上文按時間順序展示了不同的損失函數,其中有一些耳熟能詳的損失函數,例如 Wasserstein 距離、最小二乘距離、幾何距離或相對距離等等。
總體而言,不同的損失函數主要從梯度消失問題、圖像質量和樣本多樣性三個方面提升 GAN 的效果。不同的度量方法也會有其獨特的角度,例如 WGAN-GP 就特別關注梯度消失問題與圖像質量,Spectral normalization GAN 對於處理梯度消失與樣本多樣性是最高效的。
圖註:相比原始 GAN 採用的 KL 散度,不同損失函數能獲得的性能增益,選自 arXiv: 1906.01529。
Wasserstein 距離
W 距離又稱之為推土機距離,直觀理解的話,真實圖像分布是一堆土,生成分布也是一堆土,而 W 距離就是將生成分布的一堆土沿著某種路徑移動到真實分布位置所做的功。當然這種路徑對 W 距離是最優的,所做的功也是最小的。在 WGAN 論文中,研究者將該距離描述為:
其中 Π(P_r, P_g) 表示所有聯合分布的集合,而 γ(x, y) 的邊緣分布分別表示 p_r 與 p_g,它們分別代表真實圖像分布與生成分布。相比原版 GAN 採用的 KL 散度與 JS 散度,推土機距離即使在 p_r 與 p_g 之間完全沒有重複的情況下,也能反映真實距離。而 JS 散度只會給出固定值 log2,因此也就沒有梯度來拉近分布。
圖註:兩個分布 P_r 與 P_g 之間的 W 距離與 JS 距離,在θ小於或大於 0 時,兩個分布沒有交叉,JS 散度只能給出定值 log2,而 W 距離能反映兩個分布的真實距離。選自 arXiv: 1701.07875。
相對距離
另一種非常有意思的距離是相對距離,在 2018 年研究者提出這種距離後,Ian Goodfellow 在小型數據集上嘗試了這種 Relativistic GAN,他表示這種相對距離有很好的屬性。之前 GAN 主要希望增加偽造圖像看起來很真實的概率,而 Relativistic GAN 同時希望降低真實數據看起來為真的概率。
下面展示了 Relativistic GAN 的損失函數,其中 f_1、f_2、g_1、g_2 都是標量到標量的函數。
看起來這個損失很複雜,但實際上並不難理解,其最為重要的地方在於 C(x_r) - C(x_f),正是這種減法帶來了相對性。而通常 GAN 度量的只是 C(x_r) 或 C(x_f),它們是絕對的。
正常情況下,GAN 只要求判別器最大化真實樣本的概率,即將 D(x) 推向 1,而 RGAN 會要求度量給定一張真實圖像,它在多大程度上比隨機生成的樣本更真實,即將 D(x) 推向 0.5。
圖註:右圖在訓練生成器中,判別器將假數據識別為真的概率推向 1。而理想情況下,真識別為假和假識別為真的概率應該推向中間。選自 arXiv: 1807.00734。
GAN 的圖像生成演進
除了拉近分布距離這一制勝法寶,模型的能力也非常重要。模型的能力越強,就表示它能構建更複雜的生成分布,能更好地擬合真實分布。因此模型越深越複雜,它生成的圖像質量就越高。在 14 年原版 GAN 中,Goodfellow 採用最簡單的淺層全連接網絡作為判別器與生成器的架構,它可以在 MNIST 等低解析度的數據集上獲得很好的效果。
既然全連接可行,那麼很自然的想法是利用深度卷積網絡加強它的能力,後續 LAPGAN 利用卷積網絡由低像素向高像素層級地生成;DCGAN 利用轉置卷積的空間上採樣能力生成更高解析度的圖像。如下圖所示為 GAN 的代表性架構演進:
後面根據不同的任務,生成對抗網絡架構也有更多的變化。在 17 年提出來的 BEGAN 中,它為判別器加上了一個自編碼器。與一般的 GAN 相比,BEGAN 度量生成分布與自編碼器損失函數的距離,而不是直接度量生成分布與真實圖像分布之間的距離。通過這種修改,模型能幫助生成器生成自編碼器容易重建的數據,因此早期訓練更加高效。
此外,Progressive GAN 或 Self-attention GAN 等模型都有其獨特的地方,PGGAN 一點點增加解析度,這類似於通過簡單小任務走向最終的生成目標;SAGAN 用自注意力機制構建生成器與判別器,能學到生成圖像的全局依賴性關係。所有這些創新,都為更真實的圖像生成打下了基礎。
BigGAN 相信讀者們已經非常熟悉了,它在 SAGAN 的基礎上證明,通過增加批量大小和模型複雜度,我們能極大地提升生成的圖片質量。從 BigGAN 提出以來,我們看到的生成圖片真的能欺騙人類的判斷,StyleGAN 已經創建了一匹極其真實的「假人類」。但 StyleGAN 在論文中表明,它並沒有構建新方法以穩定 GAN 的訓練,也沒有引入新的架構,它只是引入了一種生成效果非常好的 GAN。
SinGAN
最後,談到生成對抗網絡架構,那就要介紹一下這幾天公布的 ICCV 2019 最佳論文,它提出了一種新的 Unconditional GAN。該模型能捕捉圖像塊(patch)的內部分布,從而生成高質量、多樣化的樣本,並承載與訓練圖像相同的視覺內容。
我們先看一些生成樣本,模型在經過左側單張圖片的訓練後,它就能生成真實的圖片,這些生成樣本都能描述真實圖像的全局結構與精細紋理。
圖註:SinGAN 的生成效果,選自 arXiv: 1905.01164。
我們可以看到,上面案例的不同之處在於,生成圖像的橫縱比或尺寸是可變的。這主要在於 SinGAN 包含了一個全卷積金字塔 GAN,金字塔的每一層負責學習不同比例的圖像塊分布。
具體而言,給定單張圖片 x,SinGAN 能捕捉圖片的內部統計信息。與一般的 GAN 不同,SinGAN 的訓練樣本是圖片塊,而不是整張圖像。SinGAN 希望獲得紋理之外的圖像信息,從而生成更一般的自然圖像,這就要求模型能捕捉到不同尺度的複雜圖像結構。
為此,研究者提出了如下架構的 SinGAN,它由一系列分層的 patch-GAN 組成,不同的 GAN 負責捕捉不同尺度的圖像塊分布。整個模型都採用了較小的感受野,從而限制模型的能力,並防止模型記住單張圖片的某些特徵。
圖 4:SinGAN 的多尺度生成流程,模型由 GAN 的一種金字塔方案組成,每一層都是一個生成對抗網絡,它們從下到上學習著不同尺度的圖像生成效果。SinGAN 的訓練和推斷過程都是從粗粒度到細粒度的方向進行,選自 arXiv: 1905.01164。
如上都是拿圖像生成舉例,這些技巧很多都能遷移到其它領域,例如圖像轉換、圖像修復、圖像超解析度和表徵學習等等。當然這些領域也有更多令人拍案叫絕的生成對抗網絡,例如 CycleGAN、FaceSwap、BigBiGAN 等等,這些領域的頂尖模型就期待讀者自行探索機器之心 SOTA 項目了。