理解生成對抗網路,一步一步推理得到GANs(二)
作者:Joseph Rocca
編譯:ronghuaiyang
導讀
GANs在2014年提出,然後就在影象生成領域取得了巨大的成功,但是其背後的原理卻不是那麼好理解,這篇文章帶你從最基礎的隨機變數開始,一步一步推理得到GANs,非常的詳細,一定要看看!由於文章較長,分兩部分分享給大家,今天是第二部分。
生成匹配網路
免責宣告 :“Generative Matching Networks”的名稱不是標準名稱。但是,我們可以在文獻中找到,例如“Generative Moments Matching Networks”或者“Generative Features Matching Networks”。我們只是想在這裡為我們下面的描述使用一個稍微通用一點的命名。
訓練生成模型
到目前為止,我們已經表明,生成一個新的狗的影象的問題可以描述成一個生成一個符合在N維向量空間的“狗概率分佈”的隨機向量的問題,我們建議使用轉換方法來實現,變換函式用神經網路來建模。
現在,我們仍然需要訓練(優化)網路來表達正確的轉換函式。為此,我們可以提出兩種不同的訓練方法:直接法和間接法。直接訓練方法是比較真實概率分佈和生成的概率分佈,並通過網路反向傳播差值(誤差)。這就是規則生成匹配網路(GMNs)的思想。對於間接訓練方法,我們不直接比較真實分佈和生成的分佈。相反,我們訓練生成網路,讓這兩個分佈通過一個下游任務,這樣生成網路相對於下游任務的優化過程將強制生成的分佈接近真實的分佈。後面的想法就是生成對抗網路(GANs)背後的想法,我們將在下一節中介紹。但現在,讓我們從直接法和GMNs開始。
比較兩種基於樣本的概率分佈
如前所述,GMNs的思想是通過直接比較生成的分佈和真實分佈來訓練生成網路。然而,我們不知道如何明確表達真正的“dog概率分佈”,我們也可以說生成的分佈過於複雜,無法明確表達。因此,基於顯式表示式的比較是不可能的。然而,如果我們有一種方法來比較基於樣本的概率分佈,我們可以用它來訓練網路。事實上,我們有真實資料的樣本,我們可以在訓練過程的每次迭代中,生成一個生成資料的樣本。
雖然理論上可以使用任何基於樣本的距離(或相似性度量)來有效地比較兩個分佈,但是我們可以特別提到最大平均差異(Maximum Mean difference, MMD)方法。MMD定義了兩個概率分佈之間的距離,可以根據這些分佈的樣本進行計算(估計)。儘管它還沒有完全超出本文的範圍,但是我們已經決定不再花太多時間描述MDD。但是,我們有一個專案即將釋出一篇包含更多細節的文章。現在想了解MMD更多資訊的讀者可以參考這些幻燈片,這篇文章或這篇文章。
分佈的匹配誤差的反向傳播
因此,一旦我們定義了一種基於樣本的比較兩種分佈的方法,我們就可以定義GMNs生成網路的訓練過程。給定一個概率為分佈均勻的隨機變數作為輸入,我們希望生成輸出的概率分佈為“dog概率分佈”。GMNs的理念是通過重複以下步驟來優化網路:
- 生成一些均勻分佈的輸入
- 讓這些輸入通過網路並收集生成的輸出
- 根據可用的樣本比較真實的“dog概率分佈”和生成的“dog概率分佈”(例如計算真實dog影象樣本與生成影象樣本之間的MMD距離)
- 使用反向傳播做一個梯度下降的步驟,以降低真實分佈和生分佈之間距離(例如MMD)
如上所述,在執行這些步驟時,我們在網路上應用一個梯度下降函式,該函式是當前迭代中真實分佈和生成分佈之間的距離。
生成匹配網路採用簡單的隨機輸入,生成新的資料,直接將生成資料的分佈與真實資料的分佈進行比較,並反向傳播匹配誤差來訓練網路。
生成對抗網路
“間接”的訓練方法
在生成網路的訓練中,上述“直接”的方法直接將生成的分佈與真實分佈進行比較。GANs的絕妙之處在於用一個間接的比較來替代這種直接的比較,這兩個分佈的間接的比較以下游任務的形式出現。生成網路的訓練就是針對這個任務來完成的,這樣就可以使生成的分佈越來越接近真實的分佈。
GANs的下游任務是區分真樣本和生成樣本的任務。或者我們可以說“非區分”任務,因為我們希望區分儘可能失敗。所以,在GAN架構中,我們有一個判別器,它從真實的和生成的資料中提取樣本並儘可能地對它們進行分類,還有一個生成器,它被訓練成儘可能地欺騙判別器。讓我們看一個簡單的例子,為什麼我們提到的直接和間接方法在理論上應該導致相同的最優生成器。
理想的情況:完美的生成器和判別器
為了更好地理解為什麼訓練生成器欺騙判別器會得到與直接訓練生成器匹配目標分佈相同的結果,讓我們舉一個簡單的一維的例子。我們暫時忘記了生成器和判別器是如何表示的,並將它們視為抽象概念(將在下一小節中指定)。此外,它們都被認為是“完美的”(具有無限的容量),因為它們不受任何型別(引數化)模型的約束。
假設我們有一個真實的分佈,例如一維高斯分佈,我們想要一個生成器從這個概率分佈中取樣。我們所謂的“直接”訓練方法包括迭代地調整生成器(梯度下降迭代),以糾正真實分佈和生成的分佈之間的測量差/誤差。最後,假設優化過程是完美的,我們應該得到與真實分佈完全匹配的生成分佈。
圖解直接匹配法的概念。藍色的分佈是真實的,而生成的分佈用橙色表示。通過逐次迭代,我們比較了這兩個分佈,並通過梯度下降的步驟來調整網路的權重。這裡比較的是平均值和方差(類似於截斷矩匹配 方法)。注意(顯然)這個例子非常簡單,不需要迭代方法:目的只是為了說明上面給出的直覺。
對於“間接”方法,我們還必須考慮一個判別器。我們現在假設這個判別器是一種神器,它確切地知道什麼是真實的和生成的分佈,並且能夠根據這些資訊預測任意給定點的類(“真實的”或“生成的”)。如果這兩個分佈距離較遠,判別器將能夠很容易地對我們提供給它的大多數點進行分類,並具有較高的可信度。如果我們想欺騙判別器,我們必須使生成的分佈接近真實分佈。當兩個分佈在所有的點上都一樣時,判別器將最難預測這個點的類別:在這種情況下,每個點是“真實的”還是“生成的”具有相等的機會,這樣,判別器的預測沒辦法比直接取平均效果更好了。
對抗性方法的直覺。藍色的分佈是真實的,橙色的是生成的。在灰色中,在右側對應的y軸上,我們展示了鑑別器選擇每個點上密度較高的類(假設“真實”和“生成”資料的比例相等)的概率為真。兩個分佈越接近,判別器越容易出錯。訓練時,目標是“將綠色區域(生成的分佈太高)移動到紅色區域(生成的分佈太低)”。
在這一點上,懷疑這種間接方法是否真的是一個好主意似乎是合理的。實際上,它似乎更復雜(我們必須基於下游任務而不是直接基於分佈優化生成器),並且它需要一個判別器,我們在這裡將其視為給定的神器,但實際上它既不已知也不完美。首先,直接比較基於樣本的兩種概率分佈的難度抵消了間接法明顯較高的複雜性。對於第二點,很明顯判別器是未知的。然而,這是可以學會的!
近似:對抗神經網路
現在讓我們描述一下在GANs體系結構中使用生成器和判別器的特定形式。生成器是一個神經網路,它對轉換函式進行建模。它以一個簡單的隨機變數作為輸入,並且在經過訓練後必須返回一個遵循目標分佈的隨機變數。由於判別器結構複雜且未知,我們決定用另一種神經網路對其進行建模。這個神經網路模擬一個判別函式。它將一個點作為輸入(在我們的dog示例中是一個N維向量),並將這個點為“真”的概率作為輸出返回。
注意一個事實,我們現在用引數化模型表達生成器和判別器(而不是前面小節中的理想化版本),在實踐中,並沒有一個產生巨大影響的理論/觀點給出上面的直覺:我們只是工作在一些引數空間中,而不是理想的全空間,所以,我們應該達到的最佳點,在理想的情況下在引數模型的精確容量中可以被視為“圓”。
一旦確定,這兩個網路就可以(同時)以相反的目標聯合訓練:
- 生成器的目標是欺騙判別器,因此生成神經網路被訓練來最大化最終分類錯誤(在真資料和生成資料之間)
- 判別器的目標是檢測虛假生成的資料,因此對判別神經網路進行訓練,使最終的分類誤差最小化
因此,在每一次迭代的訓練過程,生成網路的權重更新為了增加分類錯誤(在生成器的引數上使用誤差梯度提升),而判別網路的初始權值更新,以便減少這種錯誤(在判別器的引數上用誤差梯度下降法)。
生成對抗網路表示。生成器以簡單的隨機變數作為輸入並生成新的資料。鑑別器對“真實”和“生成”的資料進行鑑別,構建一個分類器。生成器的目標是欺騙鑑別器(儘可能將生成的資料與真實資料混合以增加分類錯誤),而鑑別器的目標是區分真實和生成的資料。
這些相反的目標和對這兩種網路的對抗性訓練的隱含概念解釋了“對抗性網路”的名稱:這兩種網路都試圖打敗對方,這樣做,它們都變得越來越好。他們之間的競爭使得這兩個網路在各自的目標上“進步”。從博弈論的角度來看,我們可以認為這個設定是一個極大極小兩個玩家的遊戲,其平衡態對應的情況是,生成器產生的資料正好就完全符合目標分佈,判別器預測任何一個點為“真實”或“生成”的概率為1/2。
GANs的數學相關的細節
注 :本節比較技術性,對於全面理解GANs並不是絕對必要的。所以,現在不想讀數學的讀者可以跳過這部分。對於其他的,讓我們看看上面給出的直覺是如何用數學形式表示的。 免責宣告 :以下方程不是Ian Goodfellow文章中的方程。我們在這裡提出另一種數學形式,有兩個原因:第一,與上面給出的直覺更接近一些;第二,因為原始論文的方程已經非常清晰,重寫它們是沒有必要的。還請注意,我們絕對不會進行的可能的損失函式實際方面的考慮(梯度消失或其他)。我們強烈建議讀者也看一看原始論文的方程式:主要的區別是Ian Goodfellow和他的合著者使用的是交叉熵誤差,而不是絕對誤差(就像我們下面所做的那樣)。此外,在下面我們假設一個無限容量的生成器和判別器。
神經網路建模本質上需要定義兩個東西:結構和損失函式。我們已經描述了生成對抗網路的結構。它包括兩個網路:
- 生成網路G(.),它接受一個具有概率密度p_z的隨機輸入z,並返回一個輸出x_g = G(z),該輸出應該遵循(訓練後)目標概率分佈
- 判別網路D(.),輸入x,可以是一個“真實的”(x_t,其概率密度用p_t來表示)或一個“生成”(x_g,其概率密度用p_g由誘導密度p_z經過G得到)和返回的概率D(x),x是一個“真正的”資料
現在讓我們仔細看看GANs的“理論”損失函式。如果將“真實”和“生成”的資料按相同比例傳送給判別器,則判別器的期望絕對誤差可以表示為:
生成器的目標是欺騙判別器,判別器的目標是能夠區分真實資料和生成的資料。所以,在訓練生成器的時候,我們想要使誤差最大化,同時我們想要使判別器的誤差最小化。我們得到
對於任意給定的生成器G(以及誘導概率密度p_g),最好的判別器是最小化的那個
為了最小化(關於D的)這個積分,我們可以最小化每個x值在積分內的函式,然後定義給定生成器的最佳判別器
(實際上,這是最好的值之一,因為可以用另一種方式處理p_t(x)=p_g(x)這樣的x值,但這與後面的內容無關)。然後我們搜尋最大的G
同樣地,為了使(關於G的)這個積分最大化,我們可以對x的每個值使積分內的函式最大化,因為概率密度p_t獨立於生成函式G,我們不能做得更好了
當然,由於p_g是一個概率密度,它的積分應該是1,所以我們對於最好的G,我們的必要條件
所以,我們表明,在理想情況下無限容量的生成器和判別器,最優的對立的設定是這樣的,生成器生成和真實的概率密度一樣的概率密度,判別器無法區分真實的和生成的。就像直覺告訴我們的一樣,最後,注意G是最大化的
在這種形式下,我們最好看到G想要使判別器出錯的期望概率最大化。
要點總結
本文的主要結論是:
- 計算機基本上可以生成簡單的偽隨機變數(例如,它們可以生成與均勻分佈非常接近的變數)
- 產生更復雜隨機變數的方法有多種,包括“變換法”的概念,即把一個隨機變數表示為某個更簡單隨機變數的函式
- 在機器學習中,生成模型試圖從給定的(複雜的)概率分佈中生成資料
- 深度學習生成模型被建模為神經網路(非常複雜的函式),它接受一個簡單的隨機變數作為輸入,然後返回一個遵循目標分佈的隨機變數(與“轉換方法”類似)
- 這些生成網路可以“直接”訓練(通過比較生成資料的分佈和真實分佈):這是生成匹配網路的思想
- 這些生成網路也可以被“間接”訓練(通過試圖欺騙另一個同時被訓練來區分“生成”資料和“真實”資料的網路):這就是生成對抗網路的思想
儘管圍繞著GANs的“炒作”可能有點誇張,但我們可以說,Ian Goodfellow及其合著者提出的對抗性訓練的想法確實很棒。這種把損失函式從直接比較到間接比較的方法,對於深入學習領域的進一步研究是非常鼓舞人心的。綜上所述,我們不知道GANs的想法是否真的是“過去十年機器學習中最有趣的想法”……但很明顯,它至少是最有趣的想法之一!
前文連結:理解生成對抗網路,一步一步推理得到GANs(第一部分)
英文原文:https://towardsdatascience.com/understanding-generative-adversarial-networks-gans-cd6e4651a29
https://www.toutiao.com/a6725010870054683150/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2653732/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 理解生成對抗網路,一步一步推理得到GANs(一)
- LSGAN:最小二乘生成對抗網路
- dl4j-gans: Deeplearning4j生成對抗網路GNA的示例原始碼原始碼
- 【深度學習理論】通俗理解生成對抗網路GAN深度學習
- GAN生成對抗網路-DCGAN原理與基本實現-深度卷積生成對抗網路03卷積
- 一步一步,看圖理解長短期記憶網路與門控迴圈網路
- 第六週:生成式對抗網路
- 一步一步理解命令模式模式
- 實戰生成對抗網路[1]:簡介
- 實戰生成對抗網路[2]:生成手寫數字
- 卷積生成對抗網路(DCGAN)---生成手寫數字卷積
- 萬字綜述之生成對抗網路(GAN)
- TensorFlow 一步一步實現卷積神經網路卷積神經網路
- 如何應用TFGAN快速實踐生成對抗網路?
- 生成對抗網路的進步多大,請看此文
- 解讀生成對抗網路(GAN) 之U-GAN-IT
- [深度學習]生成對抗網路的實踐例子深度學習
- 0901-生成對抗網路GAN的原理簡介
- 一步一步理解Generator函式的原理函式
- 【生成對抗網路學習 其三】BiGAN論文閱讀筆記及其原理理解筆記
- 一步一步生成滑動驗證碼圖片
- 對Node.js非同步的進一步理解Node.js非同步
- 一步一步,實現自己的ButterKnife(二)
- NLP(二十九)一步一步,理解Self-Attention
- RNN是怎麼從單層網路一步一步構造的?RNN
- 生成對抗網路綜述:從架構到訓練技巧架構
- 訓練生成對抗網路的一些技巧和陷阱
- 【機器學習】李宏毅——生成式對抗網路GAN機器學習
- 一步一步帶你掌握webpack(二)——資產管理Web
- 海量案例!生成對抗網路(GAN)的18個絕妙應用
- 生成對抗網路,AI將圖片轉成漫畫風格AI
- 對抗網路學習記錄
- 一步一步搭建Flutter開發架子-網路請求,非同步UI更新封裝Flutter非同步UI封裝
- 一步一步來
- 一步一步教你實現iOS音訊頻譜動畫(二)iOS音訊動畫
- 極端影像壓縮的生成對抗網路,可生成低位元速率的高質量影像
- 極端影象壓縮的生成對抗網路,可生成低位元速率的高質量影象
- 一步一步上手MyBatisPlusMyBatis