一文看懂生成對抗網絡

2021-01-14 AI派

人工智慧目前的核心目標應該是賦予機器自主理解我們所在世界的能力。對於人類來說,我們對這個世界所了解的知識可能很快就會忘記,比如我們所處的三維環境中,物體能夠交互,移動,碰撞;什麼動物會飛,什麼動物吃草等等。這些巨大的並且不斷擴大的信息現在是很容易被機器獲取的,問題的關鍵是怎麼設計模型和算法讓機器更好的去分析和理解這些數據中所蘊含的寶藏。

Generative models(生成模型)現在被認為是能夠實現這一目標的最有前景的方法之一。Generative models通過輸入一大堆特定領域的數據進行訓練(比如圖像,句子,聲音等)來使得模型能夠產生和輸入數據相似的輸出。這一直覺的背後可以由下面名言闡述。

「What I cannot create, I do not understand.」  —Richard Feynman

生成模型由一個參數數量比訓練數據少的多神經網絡構成,所以生成模型為了能夠產生和訓練數據相似的輸出就會迫使自己去發現數據中內在的本質內容。訓練Generative models的方法有幾種,在這裡我們主要闡述其中的Adversarial Training(對抗訓練)方法。

Adversarial Training

上文說過Adversarial Training是訓練生成模型的一種方法。為了訓練生成模型,Adversarial Training提出一種Discriminative Model(判別模型)來和生成模型產生對抗,下面來說說Generative models G(z) 和 Discriminative Model D(x) 是如何相互作用的。

其中生成模型和判別模型合起來的框架被稱為GAN網絡。通過下圖我們來理清判別模型和生成模型之間的輸入輸出關係:生成模型通過輸入隨機噪聲 z(z 屬於 p_z) 產生合成樣本;而判別模型通過分別輸入真實的訓練數據和生成模型的訓練數據來判斷輸入的數據是否真實。

描述了GAN的網絡結構,但它的優化目標是什麼?怎麼就可以通過訓練使得生成模型能夠產生和真實數據相似的輸出?優化的目標其實很簡單,簡單來說就是:

下面用形式化說明下如果訓練GAN網絡, 先定義一些參數:

參數含義p_z輸入隨機噪聲 z 的分布p_{data}未知的輸入樣本的數據分布p_g生成模型的輸出樣本的數據分布,GAN的目標就是要p_g=p_{data}

訓練判別模型 D(x) 的目標:

對每一個輸入數據 x 屬於 p_{data} 要使得 D(x) 最大;

對每一個輸入數據 x 不屬於 p_{data} 要使得 D(x) 最小。

訓練生成模型 G(z) 的目標是來產生樣本來欺騙判別模型 D, 因此目標為最大化 D(G(z)),也就是把生成模型的輸出輸入到判別模型,然後要讓判別模型預測其為真實數據。同時,最大化 D(G(z)) 等同於最小化 1-D(G(z)),因為 D 的輸出是介於0到1之間的,真實數據努力預測為1,否則為0。

所以把生成模型和判別模型的訓練目標結合起來,就得到了GAN的優化目標:

總結一下上面的內容,GAN啟發自博弈論中的二人零和博弈,在二人零和博弈中,兩位博弈方的利益之和為零或一個常數,即一方有所得,另一方必有所失。GAN模型中的兩位博弈方分別由生成模型和判別模型充當。生成模型G捕捉樣本數據的分布,判別模型是一個二分類器,估計一個樣本來自於訓練數據(而非生成數據)的概率。G和D一般都是非線性映射函數,例如多層感知機、卷積神經網絡等。生成模型的輸入是一些服從某一簡單分布(例如高斯分布)的隨機噪聲z,輸出是與訓練圖像相同尺寸的生成圖像。向判別模型D輸入生成樣本,對於D來說期望輸出低概率(判斷為生成樣本),對於生成模型G來說要儘量欺騙D,使判別模型輸出高概率(誤判為真實樣本),從而形成競爭與對抗。

GAN實現

一個簡單的一維數據GAN網絡的tensorflow實現:genadv_tutorial其一維訓練數據分布如下所示,是一個均值-1, sigma =1 的正態分布。

我們結合代碼和上面的理論內容來分析下GAN的具體實現,判別模型的優化目標為最大化下式,其中 D_1(x) 表示判別真實數據, D_2(G(z)) 表示對生成的數據進行判別, 其中 D_1 和 D_2 是共享參數的, 也就是說是同一個判別模型。

對應的python代碼如下:

batch=tf.Variable(0)
obj_d=tf.reduce_mean(tf.log(D1)+tf.log(1-D2))
opt_d=tf.train.GradientDescentOptimizer(0.01)
.minimize(1-obj_d,global_step=batch,var_list=theta_d)

為了優化 G, 我們想要最大化 D_2(x')(成功欺騙 D ),因此 G 的優化函數為:

對應的python代碼:

batch=tf.Variable(0)
obj_g=tf.reduce_mean(tf.log(D2))
opt_g=tf.train.GradientDescentOptimizer(0.01)
.minimize(1-obj_g,global_step=batch,var_list=theta_g)

定義好優化目標後,下面就是訓練的主要代碼了:


for i in range(TRAIN_ITERS):
x= np.random.normal(mu,sigma,M)
z= np.random.random(M)
sess.run(opt_d, {x_node: x, z_node: z})
z= np.random.random(M)
sess.run(opt_g, {z_node: z})

下面是實驗的結果,左圖是訓練之間的數據,可以看到生成數據的分布和訓練數據相差甚遠;右圖是訓練後的數據分析,生成數據和訓練數據的分布接近了很多,且此時判別模型的輸出分布在0.5左右,說明生成模型順利的欺騙到判別模型。

DCGAN

GAN的一個改進模型就是DCGAN。這個網絡的生成模型的輸入為一個100個符合均勻分布的隨機數(通常被稱為code),然後產生輸出為64x64x3的輸出圖像(下圖中 G(z) ), 當code逐漸遞增時,生成模型輸出的圖像也逐漸變化。下圖中的生產模型主要由反卷積層構成, 判別模型就由簡單的卷積層組成,最後輸出一個判斷輸入圖片是否為真實數據的概率 P(x) 。

下圖為隨著迭代次數,DCGAN產生圖像的變化過程。



訓練好網絡之後,其中的生成模型和判別模型都有其他的作用。一個訓練好的判別模型能夠用來對數據提取特徵然後進行分類任務。通過輸入隨機向量生成模型可以產生一些非常有意思的的圖片,如下圖所示,當輸入空間平滑變化時,輸出的圖片也在平滑轉變。

GAN的訓練及其改進

上面使用GAN產生的圖像雖然效果不錯,但其實GAN網絡的訓練過程是非常不穩定的。通常在實際訓練GAN中所碰到的一個問題就是判別模型的收斂速度要比生成模型的收斂速度要快很多,通常的做法就是讓生成模型多訓練幾次來趕上生成模型,但是存在的一個問題就是通常生成模型和判別模型的訓練是相輔相成的,理想的狀態是讓生成模型和判別模型在每次的訓練過程中同時變得更好。判別模型理想的minimum loss應該為0.5,這樣才說明判別模型分不出是真實數據還是生成模型產生的數據。

Improved GANs

Improved techniques for training GANs這篇文章提出了很多改進GANs訓練的方法,其中提出一個想法叫Feature matching,之前判別模型只判別輸入數據是來自真實數據還是生成模型。現在為判別模型提出了一個新的目標函數來判別生成模型產生圖像的統計信息是否和真實數據的相似。讓 f(x) 表示判別模型中間層的輸出, 新的目標函數被定義為:

其實就是要求真實圖像和合成圖像在判別模型中間層的距離要最小。這樣可以防止生成模型在當前判別模型上過擬合。

InfoGAN

到這可能有些同學會想到,我要是想通過GAN產生我想要的特定屬性的圖片改怎麼辦?普通的GAN輸入的是隨機的噪聲,輸出也是與之對應的隨機圖片,我們並不能控制輸出噪聲和輸出圖片的對應關係。這樣在訓練的過程中也會倒置生成模型傾向於產生更容易欺騙判別模型的某一類特定圖片,而不是更好的去學習訓練數據的分布,這樣對模型的訓練肯定是不好的。InfoGAN的提出就是為了解決這一問題,通過對輸入噪聲添加一些類別信息以及控制圖像特徵(如mnist數字的角度和厚度)的隱含變量來使得生成模型的輸入不在是隨機噪聲。雖然現在輸入不再是隨機噪聲,但是生成模型可能會忽略這些輸入的額外信息還是把輸入當成和輸出無關的噪聲,所以需要定義一個生成模型輸入輸出的互信息,互信息越高,說明輸入輸出的關聯越大。

下面三張圖片展示了通過分別控制輸入噪聲的類別信息,數字角度信息,數字筆畫厚度信息產生指定輸出的圖片,可以看出InfoGAN產生圖片的效果還是很好的。

其他應用

GAN網絡還有很多其他的有趣應用,比如下圖所示的根據一句話來產生對應的圖片,可能大家都有了解karpathy大神的看圖說話, 但是GAN有能力把這個過程給反過來。

還有下面這個「圖像補全」, 根據圖像剩餘的信息來匹配最佳的補全內容。

還有下面這個圖像增強的例子,有點去馬賽克的意思,效果還是挺不錯的:-D。

總結

顏樂存說過,2016年深度學習領域最讓他興奮技術莫過於對抗學習。對抗學習確實是解決非監督學習的一個有效方法,而無監督學習一直都是人工智慧領域研究者所孜孜追求的「終極目標」之一。

參考Generative Adversarial Networks(https://arxiv.org/abs/1406.2661)


Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

(https://arxiv.org/abs/1511.06434)


Improved Techniques for Training GAN(https://arxiv.org/abs/1606.03498)
InfoGAN: Interpretable Representation Learning by Information Maximizing Generative Adversarial Nets

(https://arxiv.org/abs/1606.03657)



相關焦點

  • 生成對抗網絡的最新研究進展
    生成對抗網絡的工作原理給定一組目標樣本,生成器試圖生成一些能夠欺騙判別器、使判別器相信它們是真實的樣本。判別器試圖從假(生成)樣本中解析真實(目標)樣本。當然,許多研究人員已經提出了很好的解決方案,以減輕 GAN 網絡訓練中所涉及到的一些問題。然而,這一領域的研究進展速度如此之快,以至於人們來不及去追蹤很多有趣的想法。這個博客列出了一些常用的使 GAN 訓練表現穩定的技術。使用 GAN 的缺點概述GAN 很難用的原因有很多,本節的下面將列出其中一些原因。
  • GAN(生成對抗網絡)萬字長文綜述
    GAN的基本介紹生成對抗網絡(GAN,Generative Adversarial Networks)作為一種優秀的生成式模型,引爆了許多圖像生成的有趣應用。GAN 生成 real-like 樣本的方式通過生成器(Generator)的前向傳播,而傳統方法的採樣方式非常複雜,有興趣的同學可以參考下周志華老師的《機器學習》一書中對各種採樣方式的介紹。 下面,我們圍繞上述兩點展開介紹。
  • 基於生成對抗網絡的三維點雲自動修復
    為了在對點雲形狀修復補全中能保持形狀的精細結構信息,最近研究者提出了一種能夠自動修復補全三維點雲形狀的生成對抗網絡結構。針對形狀缺失的稠密點雲和稀疏點雲數據,該網絡在修復補全形狀缺失部分的同時能有效保持輸入點雲形狀的精細結構信息。《中國科學: 信息科學》在2020年第50卷第5期刊登了這一研究。
  • 萬字綜述之生成對抗網絡(GAN)
    文章目錄如下:GAN的基本介紹生成對抗網絡(GAN,Generative Adversarial Networks)作為一種優秀的生成式模型,引爆了許多圖像生成的有趣應用。GAN的基本概念GAN(Generative Adversarial Networks)從其名字可以看出,是一種生成式的,對抗網絡。再具體一點,就是通過對抗的方式,去學習數據分布的生成式模型。所謂的對抗,指的是生成網絡和判別網絡的互相對抗。
  • 18個生成對抗網絡(GAN)的絕妙應用!你確定不收藏一下?
    圖片來源:pexels.com/@gravitylicious生成對抗網絡(GAN)是生成模型的一種神經網絡架構。兩種模型(從博弈論的意義上來說)處於一種競爭狀態,生成器企圖愚弄判別器,而判別器則要同時處理生成案例和實際案例。經學習,生成模型可生成所需的新案例。生成對抗網絡具有極為具體的使用案例,一開始這些案例理解起來會有些困難。本文將回顧大量GAN的有趣應用,有助於你了解其能夠解決的案例類型。
  • 機器不學習:生成對抗網絡-NIPS 2017對抗樣本攻防賽冠軍算法分享
    第二項是non-target attack,即事先不知道需要攻擊的網絡細節,也不指定預測的類別,生成對抗樣本來欺騙防守方的網絡。最後一項是defense,抵禦前兩個項目的攻擊,即需要將前兩個項目生成的對抗樣本分類到正確的類別上。
  • 生成式對抗網絡GAN的高級議題
    生成對抗網絡(GAN)就是一個幫你實現的新朋友。"GAN是過去10年機器學習中最有趣的想法。" - Facebook AI人工智慧研究總監Yann LeCun最近引入了生成對抗網作為訓練生成模型的新方法,即創建能夠生成數據的模型。它們由兩個"對抗"模式:生成模型G獲得數據和判別模型D來估計訓練數據提供的樣本的準確性。G和D可能是一個非線性映射函數,如多層感知。在生成對抗網絡(GAN)中,我們有兩個神經網絡在零和遊戲中相互對抗,其中第一個網絡,即生成器,其任務是欺騙第二個網絡,即鑑別器。
  • 一文看懂通信網絡未來發展趨勢
    打開APP 一文看懂通信網絡未來發展趨勢 發表於 2019-07-13 09:02:57 但是目前的通信網絡一直在超負荷運轉,而網絡的需求卻並未因此減緩。 雖然顛覆性的技術不斷湧現,但各種協議之間卻互不兼容。此外,成果導向和高效實施新服務已然成為必需,通信網絡面臨諸多挑戰,亟需靈活高效且可擴展的端到端解決方案。
  • 揭秘騰訊變臉魔法,生成對抗網絡GAN的威力是什麼?
    不管是創造了微視視頻特效製作量新紀錄的王者臉,還是在QQ上線的全球首創光頭特效,都是騰訊光影研究室利用生成式對抗網絡 GAN所製造的魔法。隨著GAN網絡在生成質量上的不斷提高,它越來越頻繁地落地到社交娛樂場景中,給用戶帶去最直觀、新鮮的AI體驗。左右互搏生成完美圖片,AI界的"網紅"技術那麼使得新型變臉特效得以實現的生成式對抗網絡 GAN,究竟是什麼?它是由美國科學家Ian Goodfellow發明,試圖讓計算機自己生成逼真圖片的AI技術。
  • 程式設計師學習人工智慧,生成式對抗網絡(GAN)1,簡介與算法原理
    一、簡介生成式對抗網絡(GAN, Generative Adversarial Networks )是一種深度學習模型,是近年來複雜分布上無監督學習最具前景的方法之一。模型通過框架中(至少)兩個模塊:生成模型(Generative Model)和判別模型(Discriminative Model)的互相博弈學習產生相當好的輸出。原始 GAN 理論中,並不要求 G 和 D 都是神經網絡,只需要是能擬合相應生成和判別的函數即可。但實用中一般均使用深度神經網絡作為 G 和 D 。
  • 你真的懂對抗樣本嗎?一文重新思考對抗樣本背後的含義
    怎樣才能確保生成的對抗樣本符合這樣的定義?本文深入解析了對抗樣本背後的數學定義,並幫助讀者重新理解對抗樣本的定義。對抗樣本是各種機器學習系統需要克服的一大障礙。對抗樣本的存在表明模型傾向於依賴不可靠的特徵來最大化性能,如果特徵受到幹擾,那麼將造成模型誤分類,可能導致災難性的後果。
  • 不到200 行代碼,教你如何用 Keras 搭建生成對抗網絡(GAN)
    它的核心思想是:同時訓練兩個相互協作、同時又相互競爭的深度神經網絡(一個稱為生成器 Generator,另一個稱為判別器 Discriminator)來處理無監督學習的相關問題。在訓練過程中,兩個網絡最終都要學習如何處理任務。通常,我們會用下面這個例子來說明 GAN 的原理:將警察視為判別器,製造假幣的犯罪分子視為生成器。一開始,犯罪分子會首先向警察展示一張假幣。
  • 「GANs之父」Goodfellow 38分鐘視頻親授:如何完善生成對抗網絡...
    什麼是對抗生成網絡(GANs)?生成對抗網絡是一種生成模型(Generative Model),其背後最基本的思想就是從訓練庫裡獲取很多的訓練樣本(Training Examples),從而學習這些訓練案例生成的概率分布。一些生成模型可以給出概率分布函數定義的估測,而另一些生成模型可以給你全新的樣本,這些新樣本來自於原有生成訓練庫的概率分布。
  • WGAN:Wasserstein 生成對抗網絡
    的損失函數無法指示訓練過程,缺乏一個有意義的指標和生成圖片的質量相關聯模式崩壞(mode collapse),生成的圖片雖然看起來像是真的,但是缺乏多樣性原理相對於傳統的GAN,WGAN只做了以下三點簡單的改動
  • ...曲線分析|gartner|知識圖譜|生成對抗網絡|intelligence|人工智慧
    一、Gartner:AI領域2018-2020年成熟度曲線介紹近日,全球權威的技術研究和分析公司Gartner發布了2020人工智慧技術成熟度曲線報告(Hype Cycle for Artificial Intelligence, 2020)。人工智慧領域到底是越來越強大了?還是依舊比較「智障」呢?
  • 一文看懂光貓和企業路由器的區別
    打開APP 一文看懂光貓和企業路由器的區別 電工之家 發表於 2019-09-07 09:26:37   光貓
  • 一文看懂NLP神經網絡發展歷史中最重要的8個裡程碑!
    本文將討論用神經網絡方法解決 NLP 問題的主要進展,而第二篇文章將主要討論 NLP 中的開放性問題。在這篇文章中我嘗試將近 15 年的自然語言處理技術發展史濃縮為 8 個高度相關的裡程碑事件,為此不得不省略許多相關性較強同時也比較重要的技術事件。本文更偏向於選擇與當前比較流行的神經網絡技術相關的方向,這可能會給人一種錯誤的印象,即在這一時期沒有其他有影響力的技術方法產生。
  • GANZoo:千奇百怪的生成對抗網絡,都在這裡了73個
    允中編譯整理量子位出品|公眾號QbitAI自從Goodfellow2014年提出這個想法之後,生成對抗網絡(GAN)就成了深度學習領域內最火的一個概念,包括LeCun在內的許多學者都認為,GAN的出現將會大大推進AI向無監督學習發展的進程。於是,研究GAN就成了學術圈裡的一股風潮,幾乎每周,都有關於GAN的全新論文發表。
  • 【明星自動大變臉】最新StarGAN對抗生成網絡實現多領域圖像變換(附代碼)
    近日,香港科技大學、新澤西大學和韓國大學等機構在 arXiv 上聯合發表了一篇研究論文,提出了在同一個模型中進行多個圖像領域之間的風格轉換的對抗生成方法StarGan,突破了傳統的只能在兩個圖像領域轉換的局限性。
  • 循環生成網絡 CycleGan 原理介紹
    本文旨在解釋「循環生成網絡」的內部工作原理,以及如何將其應用於解決現實世界中的任務。介紹循環生成對抗網絡(簡稱CycleGans)[1]是功能強大的計算機算法,具有改善數字生態系統的潛力。 它們能夠將信息從一種表示形式轉換為另一種表示形式。