當前位置:
首頁 > 新聞 > 綜述|一文幫你發現各種出色的GAN變體

綜述|一文幫你發現各種出色的GAN變體

選自Guimperarnaublog

作者:Guim Perarnau

機器之心編譯

參與:趙華龍、黃小天


你是否曾經想了解生成對抗網路(GAN)?也許你只是想趕時髦?或者也許只想看看這些網路在過去幾年中的改進?那麼在這些情況下,你沒準會對這篇文章感興趣!

本文不涉及的內容

首先,你不會在本文中發現:

  • 複雜的技術說明

  • 代碼(儘管有為那些感興趣的人留的代碼鏈接)

  • 詳盡的研究清單(點擊這裡進行查看 鏈接:http://suo.im/2opXlF)

本文涉及的內容

  • 關於 GAN 的相關主題的總結

  • 許多其他網站、帖子和文章的鏈接,幫助你確定專註點

目錄

1. 理解 GAN

2. GAN: 一場革命

1. DCGAN

2. 改進的 DCGAN

3. 條件性 GAN

4. InfoGAN

5. Wasserstein GAN

3. 結語

理解 GAN

如果你熟悉 GAN,可以跳過本節。

如果你正在閱讀本文,很有可能已聽說 GAN 大有前途。這種誇張說法合理嗎?以下是 Facebook 人工智慧研究室主任楊立昆(Yann LeCun)對 GAN 的看法:


生成對抗網路(GAN)是過去十年機器學習中最有趣的想法。

我個人認為,GAN 有巨大的潛力,但我們還有很多事情要搞明白。

綜述|一文幫你發現各種出色的GAN變體

那麼,什麼是 GAN?接下來我將要對其做一個簡要描述。如果你不熟悉並想了解更多,有很多很棒的網站有很好的解釋。我個人推薦 Eric Jang(鏈接:http://suo.im/4y0bxU)和 Brandon Amos(鏈接:http://suo.im/3Ur3DW)的博客。

GAN 最初由 Ian Goodfellow 提出,它有兩個網路:生成器和鑒別器。兩個網路在同一時間進行訓練,並在極小極大(minimax)遊戲中相互博弈。生成器通過創建逼真的圖像來愚弄鑒別器,而鑒別器被訓練從而不被生成器所愚弄。

綜述|一文幫你發現各種出色的GAN變體

訓練概述

首先,生成器生成圖像。它通過從簡單分布中(例如正態分布)採樣向量雜訊 Z,然後將該矢量上採樣到圖像來生成圖像。在第一次迭代中,這些圖像看起來很嘈雜。然後,鑒別器被給予真、假圖像,並學習區分它們。生成器稍後通過反向傳播步驟接收鑒別器的「反饋」,在產生圖像時變得更好。最後,我們希望假圖像的分布儘可能接近真實圖像的分布。或者,簡單來說,我們希望假圖像看起來儘可能貌似真實。

值得一提的是,由於 GAN 中使用的極小極大(minimax)優化,訓練有可能相當不穩定。但是,有一些技巧可以用來使得訓練更魯棒。

這就是使得生成的臉部圖像逐漸變得更加真實的一個例子:

前兩個階段 GAN 的輸出結果。使用的數據集是 CelebA。

代碼

如果您對 GAN 的基本實現感興趣,這裡是一些簡短代碼的鏈接:

  • Tensorflow(鏈接:http://suo.im/pLYbO)

  • Torch 和 Python(PyTorch):[代碼](鏈接:http://suo.im/1LcbX5)[博客文章](鏈接:http://suo.im/2V9ICE)

  • Torch 和 Lua

這些不是最先進的,但它們很好地抓住了核心思想。如果你正在尋找最佳實現來做自己的東西,請看下一節。

GAN: 一場革命

在這裡,我將按照時間順序大體描述一下過去幾年出現的一些有關 GAN 的進展和類型。



深度卷積 GAN(DCGAN)

TL; DR:DCGAN 是 GAN 架構的第一大改進。它們在訓練方面更穩定,併產生更高質量的採樣。

[文章](鏈接:https://arxiv.org/abs/1511.06434)

DCGAN 的作者著重於改進初始 GAN 的架構。我認為他們花了很長時間來做深度學習里最令人興奮的事情:嘗試很多參數!好極了!最後,它完全有了回報。除此之外,他們發現:

  • 兩個網路都必須進行批量歸一化。

  • 採用完全隱藏的連接層不是一個好主意。

  • 避免池化(pooling),簡單地跨越你的卷積!

  • ReLU 激活是你的朋友(幾乎總是)。

DCGAN 也是相關的,因為它們已經成為實現和使用 GAN 的主要基準之一。在本文發表之後不久,Theano、Torch、Tensorflow 和 Chainer 中有容易獲得的不同實現用於測試你所能想到的任何數據集。因此,如果你遇到奇怪的生成數據集,你完全可以責怪這些人。

在以下情況,你可能想要使用 DCGAN:

  • 你想要比常規 GAN 更好的東西(或者說,總是)。常規 GAN 可以在簡單的數據集上工作,但是 DCGAN 相比要好得多。

  • 你正在尋找一個堅實的基準,以便與最新、最先進的 GAN 演算法進行比較。

從這一點上,我將描述的所有類型的 GAN 都被假定為具有 DCGAN 架構,除非明確說明。



改進的 DCGAN

TL; DR:一系列改進以前 DCGAN 的技術。比如,這個改進的基準允許生成更好的高解析度圖像。

[文章](鏈接:https://arxiv.org/abs/1606.03498)

與 GAN 有關的主要問題之一是它們的收斂性。它是不能保證的,而且即使優化了 DCGAN 架構,訓練仍然相當不穩定。在這篇文章中,作者提出了對 GAN 訓練的不同增強方案。這裡是其中的一些:

  • 特徵匹配:他們沒有使生成器儘可能地欺騙鑒別器,而是提出了一個新的目標函數。該目標要求生成器生成與實際數據的統計信息相匹配的數據。在這種情況下,鑒別器僅用於指出哪些是值得匹配的統計信息。

  • 歷史平均:更新參數時,還要考慮其過去值。

  • 單邊標籤平滑:這一點很簡單:只需將你的鑒別器目標輸出從 [0 = 假圖像,1 = 真圖像] 切換到 [0 = 假圖像,0.9 =真圖像]。是的,這改善了訓練。

  • 虛擬批量歸一化:通過使用在一個參考批處理中收集的統計信息,避免同一批次的數據依賴性。它在計算上的代價很大,所以僅用於生成器。

所有這些技術都可以使模型更好地生成高解析度圖像,這是 GAN 的弱點之一。作為對比,請參見原始 DCGAN 與改進的 DCGAN 在 128x128 圖像上的區別:

綜述|一文幫你發現各種出色的GAN變體

這些應該是狗的圖像。如你所見,DCGAN 無法表徵它們,而使用改進的 DCGAN,你至少可以看到有一些像小狗一樣的東西。這也暴露了 GAN 的另一個局限,即生成結構化的內容。

你也許想要使用改進的 DCGAN,如果:

  • 你想要一個改進版本的 DCGAN(我確信你原本不指望:P)以生成更高解析度的圖像。


條件性 GAN(CGAN)

TL; DR:這些是使用額外標籤信息的 GAN。這會帶來更好質量的圖像,並能夠在一定程度上控制生成圖像的外觀。

[來源文章](https://arxiv.org/abs/1411.1784)

條件性 GAN 是 GAN 框架的擴展。這裡我們有條件信息 Y 來描述數據的一些方面。例如,如果我們正在處理人臉,則 Y 可以描述頭髮顏色或性別等屬性。然後,將該屬性信息插入生成器和鑒別器。

綜述|一文幫你發現各種出色的GAN變體

具有面部屬性信息的條件性 GAN 概述。

條件性 GAN 有趣的原因有兩個:

1. 當你向模型輸入更多信息時,GAN 學習利用它,因此能夠生成更好的樣本。

2. 我們有 2 種方式來控制圖像表示。沒有條件性 GAN,所有的圖像信息都被編碼在 Z 中。有了 cGAN,當我們添加條件信息 Y 時,現在這兩個 Z 和 Y 將編碼不同的信息。例如,假設 Y 編碼手寫數的數字(從 0 到 9)。然後,Z 將編碼所有不在 Y 中編碼的其它變數。例如,可以是數字的樣式(大小、重量、旋轉等)。

綜述|一文幫你發現各種出色的GAN變體

MNIST 樣本上 Z 和 Y 之間的差異。Z 固定在行上,Y 在列上。Z 編碼數字的樣式,Y 編碼數字本身。



最近的研究

有很多關於這個主題的有趣文章。我重點說這其中的兩個:

  • 學習畫什麼和在哪裡畫 [文章](鏈接:https://arxiv.org/abs/1610.02454)[代碼](鏈接:https://github.com/reedscot/nips2016):在這篇文章中,作者提出了一種機制來告訴 GAN(通過文本描述),(a)你想要得到的圖像內容是什麼樣,(b)通過邊界框/地標來告知元素的位置。看看它的生成結果:

綜述|一文幫你發現各種出色的GAN變體

  • StackGAN [article](鏈接:https://arxiv.org/abs/1612.03242)[code](https://github.com/hanzhanggit/StackGAN):這篇文章與前一篇相似。在這種情況下,他們專註於通過同時使用 2 個 GAN 來提高圖像的質量:Stage-I 和 Stage-II。Stage-I 用於獲取包含圖像「一般」構想的低解析度圖像。Stage II 採用更多的細節和更高的解析度來優化 Stage-I 的圖像。據我所知,這篇在生成高質量圖像里是最好的模型之一。請自己看:

綜述|一文幫你發現各種出色的GAN變體

你也許想要使用條件性 GAN,如果:

  • 你有一個已標記的訓練集,並希望提高生成圖像的質量。

  • 你想要明確控制圖像的某些方面(例如,我想在這一特定位置生成這一尺寸的紅鳥)。

InfoGANs

TL; DR:能夠以無監督的方式在雜訊向量 Z 的一部分中編碼有意義的圖像特徵的 GAN。例如,對一個數字的旋轉進行編碼。

[文章](https://arxiv.org/abs/1606.03657)

你有沒有想過輸入雜訊 Z 在一個 GAN 中編碼的信息是什麼?它通常以非常「嘈雜」的方式編碼圖像不同類型的特徵。例如,你可以選擇 Z 向量的一個位置,並將其值從 -1 和 1 插值。這是你會在一個通過 MNIST 數字數據集訓練的模型上看到的:

綜述|一文幫你發現各種出色的GAN變體

對 Z 插值。左上圖像的 Z 位置設置為 -1。然後,它被內插到 1(右下圖像)。

在上圖中,生成的圖像看上去像是數字 4 慢慢變換成「Y」(最可能的是 4 和 9 之間的混合)。所以,這就是我所指的通過嘈雜的方式編碼這個信息:Z 的單一位置是圖像多個特徵的參數。在這種情況下,這個位置改變了數字本身(某種程度上從 4 到 9)和樣式(從粗體到斜體)。然後,你無法定義 Z 的該位置的任何確切含義。

如果我們可以有一些 Z 的位置來表示唯一和受限的信息會怎麼樣呢,就像 cGAN 中的條件信息 Y 一樣?例如,如果第一個位置是一個 0 到 9 之間的值,它來控制數字的數量,而第二個位置控制其旋轉,這會怎樣呢?這正是作者在文章中提出的。有意思的部分是,與 cGAN 不同,他們以無監督的方式實現了這一點,無需標籤信息。

將 Z 矢量分成兩部分——C 和 Z——是他們成功的原因:

  • C 對數據分布的語義特徵進行編碼。

  • Z 編碼該分布的所有非結構雜訊。

他們如何強制 C 對這些特徵進行編碼?他們改變了損失函數以防止 GAN 簡單地忽略 C。因此,他們採用一個信息理論的規則,來確保 C 與生成器分配之間的高互信息。換句話說,如果 C 改變,生成的圖像也需要改變。結果,你無法明確控制哪種類型的信息會被編碼進 C,但 C 的每個位置都具有唯一的含義。看一些視覺示例:

綜述|一文幫你發現各種出色的GAN變體

C 的第一個位置編碼數字類別,而第二個位置編碼旋轉。

但是,不使用標籤信息需要付出代價。這裡的限制是這些編碼僅適用於相當簡單的數據集,例如 MNIST 數字。此外,你仍然需要「手工製作」C 的每個位置。例如在文章中,他們需要指定 C 的第一個位置是 0 到 9 之間的整數,因此它適用於數據集的 10 個數字類別。所以,你可能會認為這不是 100% 無監督,因為你可能需要向模型提供一些小細節。

你也許想要使用 infoGAN,如果:

  • 你的數據集不是很複雜。

  • 你想訓練 cGAN,但你沒有標籤信息。

  • 你希望看到數據集的主要的有意義的圖像特徵是什麼,並且可以控制它們。

Wasserstein GAN

TL; DR:改變損失函數以包含 Wasserstein 距離。結果,WassGAN 具有與圖像質量相關的損失函數。此外,訓練穩定性也提高了,而且不依賴於架構。

[文章](https://arxiv.org/abs/1701.07875)

GAN 一直在收斂性方面存在問題,結果是,你不知道何時停止訓練。換句話說,損失函數與圖像質量不相關。這是一個頭痛的大問題,因為:

  • 你需要不斷查看樣本,以了解你的模型是否在正確訓練。

  • 你不知道何時應該停止訓練(沒有收斂)。

  • 你沒有一個量化數值告訴你調整參數的效果如何。

例如,看這兩個能夠完美生成 MNIST 樣本的 DCGAN 的毫無信息量的損失函數圖:

綜述|一文幫你發現各種出色的GAN變體

僅通過看這個圖你知道什麼時候停止訓練嗎?我也不行。

這個可解釋性問題是 Wasserstein GAN 旨在解決的問題之一。怎麼樣?GAN 可被解釋以最小化 Jensen-Shannon 發散,如果真和假的分布不重疊(通常是這種情況),則它為 0。所以,作者使用了 Wasserstein 距離,而不是最小化 JS 發散,它描述了從一個分布到另一個分布的「點」之間的距離。這大概是其主要思想,但如果你想了解更多,我強烈建議你訪問這一鏈接(http://suo.im/1wmf2t)進行更深入的分析或閱讀文章本身。

因此,WassGAN 具有與圖像質量相關的損失函數並能夠實現收斂。它也更加穩定,也就意味著它不依賴於架構。例如,即使你去掉批處理歸一化或嘗試奇怪的架構,它也能很好地工作。

綜述|一文幫你發現各種出色的GAN變體

這是 WassGAN 損失函數的圖。損失越低,圖像質量越高。整齊!

你也許想要使用 Wasserstein GAN,如果:

  • 你正在尋找具有最高訓練穩定性的最先進的 GAN。

  • 你想要一個有信息量的可解釋的損失函數。


結語

所以,現在就是這些!我知道還有更有趣的研究去評論,但在這篇文章中,我決定專註於一個有限的集合。只是舉幾個例子,下面是一些我沒有評論的文章的簡短列表,也許你想去看看:

  • GAN 應用於視頻:https://github.com/SKTBrain/DiscoGAN

  • 圖像完成:https://arxiv.org/abs/1609.04802

  • GAN + 可變性 AutoEncoder 混合:https://github.com/junyanz/iGAN

  • 向 GAN 添加一個編碼器以重建樣本:https://phillipi.github.io/pix2pix/

  • 圖像到圖像的翻譯:https://ishmaelbelghazi.github.io/ALI/

  • 互動式圖像生成:https://arxiv.org/abs/1512.09300

  • 使用 GAN 增加圖像質量:https://bamos.github.io/2016/08/09/deep-completion/

  • 將鞋子變成等價的包(DiscoGAN):http://web.mit.edu/vondrick/tinyvideo/

更廣泛的研究列表,請查看此鏈接:https://github.com/zhangqianhui/AdversarialNetsPapers。

此外,在這個 repo(https://github.com/wiseodd/generative-models)中,你會發現 Tensorflow 和 Torch 中的各種 GAN 實現。

綜述|一文幫你發現各種出色的GAN變體

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

OpenAI詳解進化策略方法:可替代強化學習
全面解讀深度強化學習:從基礎概念到AlphaGo
2017電聖人機大戰:騰訊「絕藝」再添勝利獎盃
新論文提出通用目標分割框架Mask R-CNN:更簡單更靈活

TAG:機器之心 |

您可能感興趣

歐錦賽人才輩出,來看看這些表現出色的NBA球員
索尼A1體驗:全畫面OLED屏幕發聲 音畫效果出色
如何把自己最出色的一面集中展現出來!12星座職場魅力指數PK
WP粉很無奈 三星DeX竟提供更出色的「桌面PC」模式
這一刻 潮出色 天梭時捷系列NBA球隊特別款全系列震撼發布
怎樣才能變成一名出色的UI設計師?
配置高功能全體驗出色,愛奇藝奇遇4KVR一體機小評
基礎體驗出色,尚需精品內容:HYPEREAL Pano三攝套裝評測
別怪 WiFi 邪惡 只怪固件「出色」
摩拜新一代單車「New Lite」科技感十足 用戶體驗出色
周琦的身體天賦極其出色,臂展真的很變態能否立足NBA就看態度
LOL宣告又要悲劇了?NB首秀擊敗SNG,AD發揮出色!
成就夢想,發揮出色,NBA中這個球員前途無量
逆勢而行!這些NBA球星在NBA出色,到FIBA卻不適應!
教你使用ACR和PS調出色彩通透的人像照片
引領數字娛樂芯體驗 高通驍龍帶來更出色的遊戲體驗
「限時特供」VOXCO唯可衣物包,「裝」的出色,一「包」搞定!
比OLED還出色 一起了解下一代Micro-LED顯示技術
襯衫就要這樣的,穿搭出彩更出色!