在圖像生成領域裡,GAN這一大家族是如何生根發芽的

2020-12-04 機器之心Pro

機器之心原創

作者:思源

生成對抗網絡這一 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 項目了。

相關焦點

  • 生成式對抗網絡GAN的高級議題
    生成器創建"假的"數據,在這種情況下,是大熊貓的圖像,試圖欺騙鑑別器將圖像分類為真正的熊貓。我們可以逐步迭代地改進這兩個網絡,以便生成逼真的圖像以及執行其他應用程式。最初,圖像可能是相當明顯的偽造,但隨著訓練變得更好,區分真實和虛假圖像變得更加困難,即使對於人類也是如此!這兩個網絡可以被認為是黑盒子,代表一些任意的複雜的特徵,應用於噪聲或真實數據。
  • 用GAN來做圖像生成,這是最好的方法
    前言在我們之前的文章中,我們學習了如何構造一個簡單的 GAN 來生成 MNIST 手寫圖片。對於圖像問題,卷積神經網絡相比於簡單地全連接的神經網絡更具優勢,因此,我們這一節我們將繼續深入 GAN,通過融合卷積神經網絡來對我們的 GAN 進行改進,實現一個深度卷積 GAN。如果還沒有親手實踐過 GAN 的小夥伴可以先去學習一下上一篇專欄:生成對抗網絡(GAN)之 MNIST 數據生成。
  • 茶罐裡的鐵皮石斛生根發芽了 中醫師:不影響食用
    原標題:茶罐裡的鐵皮石斛生根發芽了 中醫師:不影響食用   中國寧波網訊(寧波晚報記者 吳震寧 通訊員 唐麗芸 劉揚) 放在茶葉罐裡曬乾的鐵皮石斛居然能生根發芽?近日,餘姚市民蔡先生就遇上了這麼個稀罕事。
  • 乾貨| 直觀理解GAN背後的原理:以人臉圖像生成為例
    GAN 背後的理念舉個例子吧,假設我們想讓 GAN 生成類似於訓練集(如 CelebA 資料庫)中的人臉圖片我們生成器的架構可能會像下面這樣:對於一個 DGGAN 生成器而言 , 輸入是一個隨機法向量並通過反卷積棧輸出圖像辨別器辨別器的輸入是一張圖片,通過卷積棧後輸出這幅圖是否為真的概率我們的整個 GAN
  • 看GAN如何一步步控制圖像生成風格?詳解StyleGAN進化過程
    在 GAN 中,z 的分布應與真實圖像的潛在因子分布類似。如果我們從正態或均勻分布中採樣 z,則優化後的模型可能需要 z 來嵌入類型和風格以外的信息。例如,我們為軍人生成圖像,並基於男性化程度和頭髮長度這兩個潛在因子來可視化訓練數據集的數據分布。下圖中缺失的左上角表示男性軍人不允許留長髮。如果我們均勻採樣此空間,則生成器會試圖生成留長髮的男性軍人圖像。
  • 使用Wasserstein GAN生成小狗圖像
    最初我參照JensLee大神的講解,使用keras構造了一個DCGAN(深度卷積生成對抗網絡)模型,來對數據集中的256張小狗圖像進行學習,都是一些類似這樣的狗狗照片:他的方法是通過隨機生成的維度為1000的向量,生成大小為64*64的狗狗圖。
  • 超全的GAN PyTorch+Keras實現集合
    然後將繪製後的圖像展現給判別器網絡,並判斷它們是否是真實圖像。這一任務可充當判別器標準監督訓練的正則化器。使用這種方法,我們能以半監督的方式直接訓練大規模 VGG 風格的網絡。最後,作者們還在 STL-10 和 PASSCAL 數據集上評估了該方法,它的結果能至少獲得當前業內最優的水平。
  • GAN(生成對抗網絡)萬字長文綜述
    ⊓(Pdata,Pg) 表示一組聯合分布,這組聯合分布裡的任一分布 γ 的邊緣分布均為 Pdata(x) 和 Pg(x)。 對生成器而言,則要試圖生成具有多樣性的樣本。關於GAN隱空間的理解隱空間是數據的一種壓縮表示的空間。通常來說,我們直接在數據空間對圖像進行修改是不現實的,因為圖像屬性位於高維空間中的流形中。但是在隱空間,由於每一個隱變量代表了某個具體的屬性,所以這是可行的。
  • 萬字綜述之生成對抗網絡(GAN)
    Wasserstein 距離具體定義如下:(Pdata,Pg) 表示一組聯合分布,這組聯合分布裡的任一分布 γ 的邊緣分布均為 Pdata(x) 和 Pg(x)。對生成器而言,則要試圖生成具有多樣性的樣本。關於GAN隱空間的理解隱空間是數據的一種壓縮表示的空間。通常來說,我們直接在數據空間對圖像進行修改是不現實的,因為圖像屬性位於高維空間中的流形中。但是在隱空間,由於每一個隱變量代表了某個具體的屬性,所以這是可行的。
  • 如何使用GAN做一個禿頭生產器
    看過這部劇後,我突然很想知道自己禿頭是什麼樣子,於是查了一下飛槳官網,果然它有圖片生成的模型庫。那麼,我們如何使用PaddlePaddle做出一個禿頭生成器呢。  生成對抗網絡介紹  說到圖像生成,就必須說到GAN,它是一種非監督學習的方式,通過讓兩個神經網絡相互博弈的方法進行學習,該方法由lan Goodfellow等人在2014年提出。生成對抗網絡由一個生成網絡和一個判別網絡組成,生成網絡從潛在的空間(latent space)中隨機採樣作為輸入,其輸出結果需要儘量模仿訓練集中的真實樣本。
  • 不到200 行代碼,教你如何用 Keras 搭建生成對抗網絡(GAN)
    在訓練過程中,兩個網絡最終都要學習如何處理任務。通常,我們會用下面這個例子來說明 GAN 的原理:將警察視為判別器,製造假幣的犯罪分子視為生成器。一開始,犯罪分子會首先向警察展示一張假幣。警察識別出該假幣,並向犯罪分子反饋哪些地方是假的。接著,根據警察的反饋,犯罪分子改進工藝,製作一張更逼真的假幣給警方檢查。這時警方再反饋,犯罪分子再改進工藝。
  • 用機器學習生成圖片:GAN的局限性以及如何GAN的更爽
    用機器學習生成圖片(上)—— GAN 和 pix2pix本文翻譯、總結自朱俊彥的線上報告,主要講了如何用機器學習生成圖片。在傳統的圖形學管線(pipeline)中,輸出圖像需要經過建模、材質貼圖、光照、渲染等一系列繁瑣的步驟(見下圖)。
  • 把茉莉花的枝條丟進塑料瓶裡,不用半個月就能生根發芽,快學起來
    小妹今天寫這篇文章主要是想跟各位愛花的朋友分享一下扦插繁殖的經驗。有很多植物都是可以用一根枝條就能扦插繁殖的,下面小妹就用一段茉莉花的莖水培扦插方法,操作的過程超簡單的呦!扦插方法1、我們準備好一個礦泉水瓶,不需要蓋子,只要瓶身就好了,把水瓶洗乾淨,然後裝4分之一左右的自來水,不需要裝太多哦;2、接下來我們去茉莉花上剪一段看上去比較健壯的枝條,不需要太長,大概10cm左右的樣子就可以啦;然後把枝條最下面的葉子摘掉
  • 用Keras搭建GAN:圖像去模糊中的應用(附代碼)
    這些只是對生成對抗網絡的一個簡單回顧,如果還是不夠明白的話,可以參考完整介紹。數據Ian Goodfellow首次使用GAN模型是生成MNIST數據。 而本篇文章是使用生成對抗網絡進行圖像去模糊。因此生成器的輸入不是噪聲,而是模糊圖像。
  • 讓「垃圾不落地」真正生根發芽
    今後的行動將以「垃圾不落地」為著力點,繼而推行「垃圾分類」管理和「垃圾減量」措施,並引導居民自治、發動社會組織參與,同時輔以「以獎代補」等機制,讓「垃圾不落地」真正生根發芽。 要做到「垃圾不落地」,需要確保制度先著地。「垃圾不落地」,可是垃圾要去哪裡、又怎麼去,這些問題光喊口號肯定不行,憑空想像更不行,必須要有實打實的措施,形成科學規範合理的制度。
  • 真菌孢子真能在身體裡生根發芽?
    它隱藏在任何可能的陰暗潮溼角落,例如洗手臺、馬桶、洗衣機等地方,甚至,它還躲在家裡的綠植、魚缸中,廢舊書籍、被子、衣物中也能找到它的影子。甚至,它可以在空氣中四處飄散!它隨著呼吸進入肺部,在適合的條件下,在肺部「生根發芽」,長成一個個「小蘑菇」!
  • 多肉葉插,巧用塑料瓶,保你1周生根發芽!
    點擊上方藍色「關注」,讓養花專業又有趣多肉能夠葉插繁殖,這個大家都知道,但是要想讓多肉葉片快速生根發芽,扦插成活率百分之百,那就得用到養花利器——塑料瓶。今天就教大家塑料瓶養花扦插小妙招。然後在瓶子的底部再戳一個洞,專門用來向瓶子裡添水。在塑料瓶底部注入適量的水,加水量不超過瓶子底部挖的添水孔,3、把葉片向上插入塑料瓶小孔之後,將瓶子放在散光通風處,不能曬太陽,底部缺水添加即可。如葉片乾癟,可以往葉片上噴噴水。4、塑料瓶底部的水分能促進葉片生根發芽,並且不會使根部被土壤裡的病菌感染。不久葉片上就會長出新的小植株,接下來就可以移植上盆了。
  • GAN快速入門資料推薦:17種變體的Keras開原始碼,附相關論文
    在這類GAN變體中,生成器生成的每張圖像,都帶有一個類別標籤,鑑別器也會同時針對來源和類別標籤給出兩個概率分布。論文中描述的模型,可以生成符合1000個ImageNet類別的128×128圖像。原版GAN不適用於離散數據,而BGAN用來自鑑別器的估計差異度量來計算生成樣本的重要性權重,為訓練生成器來提供策略梯度,因此可以用離散數據進行訓練。BGAN裡生成樣本的重要性權重和鑑別器的判定邊界緊密相關,因此叫做「尋找邊界的GAN」。
  • 3種漂亮花,生命力頑強,葉子沾土就能生根發芽,成活率極高
    3種漂亮花,生命力頑強,葉子沾土就能生根發芽,成活率極高隨著社會的不斷發展,現在越來越多的人都喜歡在家裡養一些花草來裝點居室,說到養花,大家都喜歡養一些開花漂亮的花卉。其實我們可以自己扦插花卉,有些花卉開花漂亮,生命力頑強,沾土就能活,沒多久就能繁殖出一片,比如這幾種。1、落雪泥落雪泥又叫作大巖桐花,花朵漂亮,絢麗多彩,深受觀眾的喜歡,而且繁殖很簡單,我們只需要將葉片摘下來,上葉片上劃幾刀,注意留下葉脈就可以了。這樣平鋪在土壤表面,保持土壤溼潤,就能繁殖出很多新植株。
  • 10分鐘就能生根發芽,這個植物的種子不一般!
    本文來自:百度知道日報大自然總是充滿了奧秘, 不僅動物的世界是這樣, 植物的世界裡同樣也是如此。從發芽到成長為一棵大樹,很多植物都要從一粒小小的種子開始,而種子世界卻是千姿百態, 比如有的種子萌發需要好幾天,而有的只需要10分鐘。