介紹
Yann LeCun將其描述為「過去10年機器學習中最有趣的想法」。當然,來自深度學習領域這樣一位傑出研究人員的這種稱讚總是對我們所談論的主題的一個很好的廣告!而且,事實上,剖成對抗性網絡(甘斯的簡稱)都產生了巨大的成功,因為他們在2014年的一篇文章中介紹了由Ian J.古德費洛和共同作者剖成對抗性籃網。
那麼Generative Adversarial Networks是什麼?是什麼讓他們如此「有趣」?在這篇文章中,我們將看到對抗性訓練是一個啟發性的想法,其簡潔美觀,代表了機器學習的真正概念進展,尤其是生成模型(與反向傳播相同的方式是一個簡單但非常聰明的技巧,使神經網絡的基本思想變得如此受歡迎和高效)。
在進入細節之前,讓我們快速概述一下GAN的用途。生成性對抗網絡屬於一組生成模型。這意味着他們能夠生成/生成(我們將看到如何)新內容。為了說明這種「生成模型」的概念,我們可以看一些用GAN獲得的結果的眾所周知的例子。
當然,這種生成新內容的能力使GAN看起來有點「神奇」,至少在第一眼看上去。在以下部分中,我們將克服GAN的明顯魔力,以深入了解這些模型背後的想法,數學和建模。我們不僅會討論Generative Adversarial Networks所依賴的基本概念,而且我們將逐步建立並從一開始就推出導致這些想法的推理。
不用多說,讓我們一起重新發現GAN!
注意:雖然我們試圖使本文儘可能獨立,但仍需要機器學習的基本先驗知識。然而,大多數概念將在需要時保留,否則將提供一些參考。我們真的試圖讓這篇文章儘可能順利閱讀。不要猶豫,在評論部分提及您希望閱讀的更多內容(關於該主題的可能的其他文章)。
大綱
在下面的第一節中,我們將討論從給定分佈生成隨機變量的過程。然後,在第2節中,我們將通過一個例子展示GAN試圖解決的問題可以表示為隨機變量生成問題。在第3節中,我們將討論基於匹配的生成網絡,並展示它們如何回答第2節中描述的問題。最後在第4節中,我們將介紹GAN。更具體地說,我們將展示具有其損失功能的一般架構,並且我們將與之前的所有部分建立鏈接。
生成隨機變量
在本節中,我們將討論生成隨機變量的過程:我們提醒一些現有方法,尤其是逆變換方法,它允許從簡單的均勻隨機變量生成複雜的隨機變量。儘管所有這些看起來與我們的物質主題GAN相差甚遠,但我們將在下一節中看到與生成模型存在的深層聯繫。
可以偽隨機生成均勻隨機變量
計算機基本上是確定性的。因此,從理論上講,生成真正隨機的數字是不可能的(即使我們可以說「真正的隨機性是什麼?」這個問題很困難)。但是,可以定義生成數字序列的算法,其特性非常接近理論隨機數序列的屬性。特別是,計算機能夠使用偽隨機數生成器生成一系列數字,這些數字近似地遵循0和1之間的均勻隨機分佈。統一的情況是一個非常簡單的情況,可以在其上建立更複雜的隨機變量不同的方法。
隨機變量表示為操作或過程的結果
存在旨在產生更複雜的隨機變量的不同技術。其中我們可以找到,例如,逆變換方法,拒絕抽樣,Metropolis-Hasting算法等。所有這些方法都依賴於不同的數學技巧,這些技巧主要在於表示我們想要生成的隨機變量作為操作(通過更簡單的隨機變量)或過程的結果。
拒絕抽樣表示隨機變量是一個過程的結果,該過程不是從複雜分佈中採樣,而是從眾所周知的簡單分佈中採樣,並根據某些條件接受或拒絕採樣值。重複此過程直到採樣值被接受,我們可以證明,在正確接受條件下,有效採樣的值將遵循正確的分佈。
在Metropolis-Hasting算法中,想法是找到馬爾可夫鏈(MC),使得該MC的靜態分佈對應於我們想要對隨機變量進行採樣的分佈。一旦這個MC發現,我們可以在這個MC上模擬足夠長的軌跡來考慮我們已經達到穩定狀態,然後我們以這種方式獲得的最後一個值可以被認為是從感興趣的分佈中得出的。
我們不會再進一步了解拒絕抽樣和Metropolis-Hasting的細節,因為這些方法不會引導我們遵循GAN背後的概念(儘管如此,感興趣的讀者可以參考指向的維基百科文章及其中的鏈接) 。但是,讓我們更多地關注逆變換方法。
逆變換方法
逆變換方法的想法只是為了表示我們的複雜性 – 在本文中,「複雜」應該始終被理解為「不簡單」而不是數學意義 – 隨機變量作為應用於函數的函數的結果統一隨機變量我們知道如何生成。
我們在下面的一個例子中考慮。設X是我們想要採樣的複雜隨機變量,U是[0,1]上的均勻隨機變量,我們知道如何從中採樣。我們提醒隨機變量由其累積分佈函數(CDF)完全定義。隨機變量的CDF是從隨機變量的定義域到區間[0,1]的函數,並且在一個維度中定義,使得
在我們的均勻隨機變量U的特定情況下,我們有
為簡單起見,我們在此假設函數CDF_X是可逆的並且表示其反函數
(通過使用函數的廣義逆,可以很容易地將該方法擴展到不可逆的情況,但它實際上不是我們想要關注的主要點)。然後,如果我們定義
我們有
我們可以看到,Y和X具有相同的CDF,然後定義相同的隨機變量。因此,通過如上定義Y(作為均勻隨機變量的函數),我們設法定義了具有目標分佈的隨機變量。
總而言之,逆變換方法是通過使均勻隨機變量經過精心設計的「變換函數」(逆CDF)來生成遵循給定分佈的隨機變量的方式。事實上,這種「逆變換方法」的概念可以擴展到「變換方法」的概念,「變換方法」更廣泛地說,它是由一些較簡單的隨機變量生成隨機變量(不一定是均勻的,然後變換函數是不再是逆CDF)。從概念上講,「變換函數」的目的是使初始概率分佈變形/重塑:變換函數從初始分佈與目標分佈相比過高,並將其置於過低的位置。
生成模型
我們試圖生成非常複雜的隨機變量……
假設我們有興趣生成大小為n乘n像素的狗的黑白方形圖像。我們可以將每個數據重新整形為N = n×n維向量(通過將列堆疊在彼此之上),使得狗的圖像可以由向量表示。然而,這並不意味着所有的矢量都代表一隻狗形狀回到正方形!因此,我們可以說,有效地給出看起來像狗的東西的N維向量根據整個N維向量空間上的非常特定的概率分佈來分佈(該空間的某些點很可能代表狗,而它是對其他人來說極不可能)。同樣的精神,在這個N維向量空間上存在貓,鳥等圖像的概率分佈。
然後,生成狗的新圖像的問題等同於在N維向量空間上生成跟隨「狗概率分佈」的新向量的問題。事實上,我們面臨著針對特定概率分佈生成隨機變量的問題。
在這一點上,我們可以提到兩件重要的事情。首先,我們提到的「狗概率分佈」是在非常大的空間上非常複雜的分佈。其次,即使我們可以假設存在這樣的基礎分佈(實際上存在看起來像狗的圖像而其他圖像看起來不像),我們顯然不知道如何明確地表達這種分佈。之前的兩點都使得從該分佈生成隨機變量的過程非常困難。然後讓我們嘗試解決以下兩個問題。
…所以讓我們使用神經網絡的變換方法作為函數!
當我們嘗試生成狗的新圖像時,我們的第一個問題是N維向量空間上的「狗概率分佈」是一個非常複雜的問題,我們不知道如何直接生成複雜的隨機變量。然而,正如我們非常清楚如何生成N個不相關的均勻隨機變量,我們可以使用變換方法。為此,我們需要將N維隨機變量表示為應用於簡單N維隨機變量的非常複雜函數的結果!
在這裡,我們可以強調這樣的事實:找到變換函數並不像我們在描述逆變換方法時所做的那樣只採用累積分佈函數(我們顯然不知道)的閉式逆。轉換函數無法明確表達,因此,我們必須從數據中學習它。
在這些情況下,大多數情況下,非常複雜的功能自然意味着神經網絡建模。然後,我們的想法是通過一個神經網絡對變換函數進行建模,該神經網絡將一個簡單的N維均勻隨機變量作為輸入,並作為輸出返回另一個N維隨機變量,在訓練之後,該隨機變量應遵循正確的「狗概率分佈」 。一旦設計了網絡架構,我們仍然需要對其進行培訓。在接下來的兩節中,我們將討論培訓這些生成網絡的兩種方法,包括GAN背後的對抗訓練的想法!
生成匹配網絡
免責聲明:「生成匹配網絡」的名稱不是標準的。但是,我們可以在文獻中找到,例如,「Generative Moments Matching Networks」或「Generative Features Matching Networks」。我們只是想在這裡使用稍微更一般的面額來描述我們所描述的內容。
培養生成模型
到目前為止,我們已經證明了我們生成狗的新圖像的問題可以被重新描述為在N維向量空間中生成跟隨「狗概率分佈」的隨機向量的問題,並且我們建議使用變換方法,用神經網絡來模擬變換函數。
現在,我們仍然需要訓練(優化)網絡來表達正確的變換功能。為此,我們可以建議兩種不同的訓練方法:直接訓練方法和間接訓練方法。直接訓練方法包括比較真實和生成的概率分佈,並通過網絡反向傳播差異(誤差)。這是規則生成匹配網絡(GMNs)的想法。對於間接訓練方法,我們不直接比較真實和生成的分佈。相反,我們通過使這兩個分佈經過選擇的下游任務來訓練生成網絡,使得生成網絡相對於下游任務的優化過程將強制生成的分佈接近真實分佈。最後一個想法是生成對抗網絡(GAN)背後的一個,我們將在下一節中介紹。但就目前而言,讓我們從直接方法和GMN開始。
比較基於樣本的兩個概率分佈
如上所述,GMN的想法是通過直接將生成的分佈與真實分佈進行比較來訓練生成網絡。但是,我們不知道如何明確表達真正的「狗概率分佈」,我們也可以說生成的分佈過於複雜而無法明確表達。因此,基於顯式表達式的比較是不可能的。但是,如果我們有一種比較基於樣本的概率分佈的方法,我們可以使用它來訓練網絡。實際上,我們有一個真實數據的樣本,我們可以在訓練過程的每次迭代中生成生成數據的樣本。
雖然理論上可以使用任何能夠有效比較基於樣本的兩個分佈的距離(或相似性度量),但我們可以特別提到最大均值差異(MMD)方法。MMD定義了可以基於這些分佈的樣本計算(估計)的兩個概率分佈之間的距離。雖然它不完全超出了本文的範圍,但我們決定不再花費更多時間來描述MDD。但是,我們的項目很快就會發佈一篇文章,其中將包含有關它的更多詳細信息。想要了解MMD的更多信息的讀者可以參考這些幻燈片,本文或本文。
反向傳播分佈匹配錯誤
因此,一旦我們定義了一種基於樣本比較兩種分佈的方法,我們就可以定義GMN中生成網絡的訓練過程。給定具有均勻概率分佈的隨機變量作為輸入,我們希望所生成的輸出的概率分佈是「狗概率分佈」。然後,GMN的想法是通過重複以下步驟來優化網絡:
- 產生一些統一的輸入
- 使這些輸入通過網絡並收集生成的輸出
- 比較真實的「狗概率分佈」和基於可用樣本生成的一個(例如計算真實狗圖像樣本與生成的樣本的樣本之間的MMD距離)
- 使用反向傳播來進行梯度下降的一個步驟,以降低真實分佈和生成分佈之間的距離(例如MMD)
如上所述,當遵循這些步驟時,我們在網絡上應用梯度下降,其具有損失函數,該函數是當前迭代中的真實分佈與生成分佈之間的距離。
生成性對抗網絡
「間接」訓練方法
上面提出的「直接」方法在訓練生成網絡時直接比較生成的分佈與真實分佈。規則GAN的好主意在於用間接的替代方式替換這種直接比較,後者採用這兩種分佈的下游任務的形式。然後對該任務進行生成網絡的訓練,使得它迫使所生成的分佈越來越接近真實分佈。
GAN的下游任務是真實樣本和生成樣本之間的歧視任務。或者我們可以說「非歧視」任務,因為我們希望歧視儘可能地失敗。因此,在GAN架構中,我們有一個鑒別器,它可以獲取真實數據和生成數據的樣本,並嘗試儘可能地對它們進行分類,以及一個經過培訓的發生器,以儘可能地欺騙鑒別器。讓我們看一個簡單的例子,為什麼我們提到的直接和間接方法理論上應該導致相同的最優生成器。
理想的情況:完美的發電機和鑒別器
為了更好地理解為什麼訓練生成器以欺騙鑒別器將導致與直接訓練生成器以匹配目標分佈相同的結果,讓我們採用簡單的一維示例。我們暫時忘記了如何表示生成器和鑒別器,並將它們視為抽象概念(將在下一小節中指定)。而且,兩者都被認為是「完美的」(具有無限的容量),因為它們不受任何類型(參數化)模型的約束。
假設我們有一個真正的分佈,例如一維高斯分佈,並且我們想要一個從這個概率分佈中採樣的生成器。我們所謂的「直接」訓練方法將包括迭代地調整生成器(梯度下降迭代)以校正真實分佈和生成分佈之間的測量差異/誤差。最後,假設優化過程完美,我們應該最終得到與真實分佈完全匹配的生成分佈。
對於「間接」方法,我們還必須考慮一個鑒別器。我們現在假設這個鑒別器是一種oracle,它確切知道什麼是真實和生成的分佈,並且能夠根據這些信息預測任何給定點的類(「真」或「生成」)。如果這兩個分佈很明顯,那麼鑒別器將能夠輕鬆地進行分類,並且可以高度自信地將我們呈現給它的大多數點分類。如果我們想欺騙鑒別器,我們必須使生成的分佈接近真實的分佈。當兩個分佈在所有點上相等時,鑒別器將最難預測類:在這種情況下,
在這一點上,似乎有理由懷疑這種間接方法是否真的是一個好主意。實際上,它似乎更複雜(我們必須基於下游任務而不是直接基於分佈來優化生成器)並且它需要我們在此認為是給定oracle的鑒別器,但實際上,它既不是已知的也不完美。對於第一點,直接比較基於樣本的兩個概率分佈的難度抵消了間接方法的明顯更高的複雜性。對於第二點,很明顯,鑒別器是未知的。但是,它可以學到!
近似:對抗性神經網絡
現在讓我們描述採用GANs架構中的生成器和鑒別器的具體形式。生成器是一個模擬轉換函數的神經網絡。它將一個簡單的隨機變量作為輸入,並且必須在訓練後返回一個跟隨目標分佈的隨機變量。由於它非常複雜和未知,我們決定用另一個神經網絡對鑒別器進行建模。該神經網絡模擬判別函數。它將一個點(在我們的狗示例中為N維向量)作為輸入,並將該點的概率作為輸出返回為「真」。
請注意,我們現在強加一個參數化模型來表達生成器和鑒別器(而不是前一小節中的理想化版本)的事實,實際上並沒有對上面給出的理論論證/直覺產生巨大影響:我們只是然後,在一些參數化空間而不是理想的全空間中工作,因此,在理想情況下我們應達到的最佳點可以被視為由參數化模型的精確容量「舍入」。
一旦定義,兩個網絡就可以聯合(同時)進行相反的目標訓練:
- 生成器的目標是欺騙鑒別器,因此訓練生成神經網絡以最大化最終分類錯誤(真實數據和生成數據之間)
- 鑒別器的目標是檢測偽造的數據,因此訓練判別神經網絡以最小化最終的分類錯誤
因此,在訓練過程的每次迭代中,更新生成網絡的權重以增加分類錯誤(錯誤梯度上升到生成器的參數),同時更新判別網絡的權重以減少此錯誤(誤差梯度下降超過鑒別器的參數)。
這些相反的目標和兩個網絡的對抗性訓練的隱含概念解釋了「對抗性網絡」的名稱:兩個網絡都試圖相互擊敗,這樣做,它們都變得越來越好。他們之間的競爭使這兩個網絡在各自的目標方面「進步」。從博弈論的角度來看,我們可以將此設置視為極小極大雙玩家遊戲,其中均衡狀態對應於發生器從精確目標分佈生成數據並且鑒別器預測「真實」或「生成」的情況「它接收的任何一點的概率為1/2。
關於GAN的數學細節
注意:本節更具技術性,對於全面了解GAN並非絕對必要。所以,現在不想讀一些數學的讀者可以暫時跳過這一部分。對於其他人,讓我們看看上面給出的直覺是如何在數學上形式化的。
放棄:下面的等式不是Ian Goodfellow的文章。我們在這裡提出另一個數學形式化有兩個原因:第一,保持更接近上面給出的直覺,第二,因為原始論文的方程已經非常清楚,只是重寫它們是沒有用的。另請注意,我們絕對不會參與與不同可能的損失函數相關的實際考慮(消失梯度或其他)。我們強烈建議讀者也要看看原始論文的方程式:主要區別在於Ian Goodfellow和共同作者使用交叉熵誤差而不是絕對誤差(正如我們所做的那樣)。此外,在下文中我們假設具有無限容量的發生器和鑒別器。
神經網絡建模本質上需要定義兩件事:架構和損失函數。我們已經描述了Generative Adversarial Networks的架構。它包含兩個網絡:
- 生成網絡G(。),其採用密度為p_z的隨機輸入z,並返回輸出x_g = G(z),該輸出應遵循(訓練後)目標概率分佈
- 一個判別網絡D(。),它取一個可以是「真」的輸入x(x_t,其密度用p_t表示)或「生成」的一個(x_g,其密度p_g是由密度p_z引起的密度通過G)並將x的概率D(x)返回為「真實」數據
現在讓我們仔細看看GAN的「理論」損失函數。如果我們以相同的比例向鑒別器「真實」和「生成」數據發送,則鑒別器的預期絕對誤差可以表示為
生成器的目標是欺騙鑒別器,其目標是能夠區分真實數據和生成數據。因此,在訓練生成器時,我們希望最大化此錯誤,同時我們嘗試將其最小化以用於鑒別器。它給了我們
對於任何給定的發生器G(以及誘導概率密度p_g),最佳可能的鑒別器是最小化的鑒別器
為了最小化(相對於D)這個積分,我們可以最小化x的每個值的積分內的函數。然後,它為給定的發電機定義最佳可能的鑒別器
(事實上,最好的因為x值,使得p_t(x)= p_g(x)可以用另一種方式處理,但對於後面的內容並不重要)。然後我們搜索G最大化
同樣,為了最大化(相對於G)這個積分,我們可以最大化x的每個值的積分內的函數。由於密度p_t獨立於發電機G,我們不能比設置G更好
當然,由於p_g是應該與1整合的概率密度,我們必然擁有最佳的G
因此,我們已經證明,在具有無限容量發生器和鑒別器的理想情況下,對抗性設置的最佳點使得發生器產生與真密度相同的密度,並且鑒別器不能比真實的更好。一個案例中有兩個,就像直覺告訴我們的那樣。最後,還要注意G最大化
在這種形式下,我們最好看到G想要最大化鑒別器出錯的預期概率。
小貼士
本文的主要內容是:
- 計算機基本上可以生成簡單的偽隨機變量(例如,它們可以生成非常接近均勻分佈的變量)
- 存在不同的方法來生成更複雜的隨機變量,包括「變換方法」的概念,其包括將隨機變量表示為一些更簡單的隨機變量的函數。
- 在機器學習中,生成模型試圖從給定(複雜)概率分佈生成數據
- 深度學習生成模型被建模為神經網絡(非常複雜的函數),它將一個簡單的隨機變量作為輸入,並返回一個跟隨目標分佈的隨機變量(「變換方法」)
- 這些生成網絡可以「直接」訓練(通過比較生成數據與真實分佈的分佈):這就是生成匹配網絡的思想
- 這些生成網絡也可以「間接」訓練(通過試圖欺騙同時訓練的另一個網絡來區分「生成的」數據和「真實」數據):這就是生成對抗網絡的想法
即使圍繞GAN的「炒作」可能有點誇張,我們可以說Ian Goodfellow及其合著者提出的對抗性訓練的想法確實很棒。這種扭曲損失函數從直接比較到間接比較的方式實際上可以激發深度學習領域的進一步工作。總而言之,讓我們說我們不知道GAN的概念是否真的是「機器學習中過去10年中最有趣的想法」……但很明顯它至少是最有趣的一個!
本文轉自towardsdatascience,原文地址
8 Comments
這裏面有些是直接谷歌翻譯的?太生硬了。
新聞類的文章的確是Google翻譯的,由於自己一個人維護網站,所以沒有做更好的翻譯,只要讀者能理解文章大意目的就達到了。請諒解
謝謝小強,喜歡你的講解,頁面簡潔大氣,配圖精美,讓我對GAN有了更清晰的認識!
多謝你的肯定,覺得不錯可以推薦給身邊的朋友
這篇文章給我的感覺一會講的通熟易懂,一會這說的是人話嗎!?
機器翻譯的,有些地方會不通順
HALLO, 能把原網站貼出來么
文末有原文地址