理解生成對抗網絡,一步一步推理得到GANs(一)

2019-08-14     AI公園
作者:Joseph Rocca
編譯:ronghuaiyang

導讀

GANs在2014年提出,然後就在圖像生成領域取得了巨大的成功,但是其背後的原理卻不是那麼好理解,這篇文章帶你從最基礎的隨機變量開始,一步一步推理得到GANs,非常的詳細,一定要看看!由於文章較長,分兩部分分享給大家,今天是第一部分。

介紹

Yann LeCun將其描述為「過去10年機器學習領域最有趣的想法」。當然,這樣一個來自深度學習領域的傑出研究者的讚美,對於我們正在談論的主題來說,總是一個很好的廣告!事實上,自從2014年Ian J. Goodfellow和他的合著者在Generative Adversarial Nets中介紹生式對抗網絡(GANs)以來,它已經取得了巨大的成功。

那麼什麼是生成性對抗性網絡呢?是什麼讓它們如此「有趣」?在這篇文章中,我們將看到對抗性的訓練是一個極有啟發性的想法,簡單美,代表了機器學習的真正進步的概念,更尤其是生成模型(以同樣的方式作為反向傳播是一個簡單但很聰明的技巧,使神經網絡變得如此受歡迎和有效)。

在討論細節之前,讓我們先簡要介紹一下GANs的用途。生成對抗性網絡屬於生成模型。這意味著他們能夠產生新的內容。為了說明「生成模型」的概念,我們可以看一些使用GANs獲得結果的著名的例子。

Ian Goodfellow及其合著者對GANs能力的說明。這些是在兩個數據集:MNIST和TFD上進行訓練後對抗網絡生成的樣本。對於這兩種情況,最右邊的列是離生成的直接相鄰樣本最近的真實數據。這表明產生的數據實際上是生成的,而不僅僅是由網絡記憶的。

很自然,這種生成新內容的能力讓GANs看起來有點「神奇」,至少乍一看是這樣。在下面的部分中,我們將克服GANs的魔法,以便深入研究這些模型背後的思想、數學和建模。我們不僅會討論生成對抗網絡所依賴的基本概念,而且,我們還會一步一步地構建這些概念,並從一開始就對這些概念進行推理。

廢話不多說,讓我們一起重新發現GANs !

:雖然我們試圖使本文儘可能地可以獨立的閱讀,但仍然需要具備機器學習的基本先驗知識。然而,大多數概念將在需要時保留,並提供一些參考資料。我們盡力使這篇文章讀起來儘可能流暢。不要猶豫,在評論部分會提到你想要閱讀的更多內容(可能會有更多關於這個主題的文章)。

概要

在下面的第一部分中,我們將討論從給定的分布生成隨機變量的過程。然後,在第2節中,我們將通過一個例子說明,GANs試圖解決的問題可以表示為隨機變量生成問題。在第3節中,我們將討論基於匹配的生成網絡,並展示它們如何回答第2節中描述的問題。最後在第4節中,我們將介紹GANs。更特別的是,我們將展示帶有損失函數的通用架構,並與之前的所有部分進行連結。

生成隨機變量

在本節中,我們將討論隨機變量的生成過程:我們將提醒一些現有的方法,特別是允許從簡單的均勻隨機變量生成複雜隨機變量的逆變換方法。儘管所有這些似乎都與我們的主題GANs有些不同,我們將在下一節中看到與生成模型的深層聯繫。

均勻隨機變量可以偽隨機生成

計算機基本上是確定的。因此,從理論上講,不可能生成真正隨機的數字(即使我們可以說「什麼是隨機?」這個問題很難回答)。然而,定義生成屬性非常接近理論隨機數序列的數字序列的算法是可能的。具體地說,計算機能夠使用偽隨機數字生成器生成一個數字序列,該序列近似地遵循0和1之間的均勻隨機分布。均勻的情況是一個非常簡單的情況,在此基礎上可以用不同的方式構建更複雜的隨機變量。

由一個操作或過程的結果表示的隨機變量

有不同的技術旨在生成更複雜的隨機變量。其中包括逆變換法、拒絕抽樣法、Metropolis-Hasting算法等。所有這些方法都依賴於不同的數學技巧,這些技巧主要是包括用一個操作的結果(相對於更簡單的隨機變量)來表示我們希望的隨機變量。

拒絕抽樣表示隨機變量是一個過程的結果,這個過程不是從複雜的分布中抽樣,而是從一個眾所周知的簡單分布中抽樣,並根據某些條件接受或拒絕抽樣值。重複這個過程直到採樣值被接受,我們可以證明在接受的條件正確的情況下,有效採樣的值將遵循正確的分布。

在Metropolis-Hasting算法中,我們的想法是找到一個馬爾可夫鏈(MC),使這個MC的平穩分布對應於我們想要對隨機變量進行抽樣的分布。一旦這個MC找到了,我們就可以在這個MC上模擬一個足夠長的軌跡,考慮到我們已經達到了一個穩定的狀態,然後我們用這種方法得到的最後一個值可以被認為是從感興趣分布中得到的。

我們不再深入討論拒絕抽樣和Metropolis-Hasting抽樣的細節,因為這些方法並不能引導我們理解GANs背後的概念(儘管如此,感興趣的讀者可以參考Wikipedia中有針對性的文章和連結)。讓我們更加關注一下逆變換方法。

逆變換方法

逆變換方法的想法只是代表我們的複雜性—在本文中「複雜」應該理解「不簡單」的感覺,而不是在數學意義上的複雜,我們知道如何生成隨機變量函數的結果應用於一個統一的隨機變量。

我們以一維的例子來考慮。假設X是一個複雜隨機變量,U是一個均勻隨機變量,取值範圍為[0,1],我們知道如何抽樣。我們提醒你一下,一個隨機變量是由它的累積分布函數 (CDF)完全定義的。隨機變量的CDF是一個從隨機變量的定義域到區間[0,1]的函數,並且在一維中定義。

在U為均勻隨機變量的特殊情況下,我們有

為了簡單起見,我們在這裡假設函數CDF_X是可逆的,它的逆表示為

(使用泛函的逆,該方法可以很容易地推廣到非可逆的情況下,但這真的不是我們想要關注的重點)。如果我們定義

我們有

我們可以看到,Y和X有相同的CDF然後定義出的隨機變量。因此,通過定義上面的Y(作為一個均勻隨機變量的函數),我們成功地定義了一個具有目標分布的隨機變量。

綜上所述,逆變換法是一種使一個均勻的隨機變量通過一個精心設計的「變換函數」(逆CDF)來生成一個服從給定分布的隨機變量的方法。實際上,「逆變換法」的概念可以推廣到「變換法」的概念,即更一般地,將隨機變量作為一些更簡單的隨機變量的函數來生成(不一定是一致的,那麼變換函數就不再是逆CDF)。從概念上講,「變換函數」的目的是對初始機率分布進行變形/重塑:轉換函數從初始機率分布相對於目標機率分布過高的地方入手,將其放到初始機率分布過低的地方。

逆變換法的圖解。藍色表示[0,1]上的均勻分布。橙色表示標準高斯分布。灰色:從均勻分布到高斯分布的映射(逆CDF)。

生成模型

我們嘗試生成更加複雜的隨機變量…

假設我們對生成大小為n×n像素的狗的黑白正方形圖像感興趣。我們可以將每個數據重新塑造為一個N=n×n維向量(通過將列疊加在一起),這樣狗的圖像就可以用一個向量來表示。然而,這並不意味著所有的向量變回正方形之後都表示為狗!因此,我們可以說,N維向量可以有效地給到一些東西,看起來像一隻狗,這個N維向量的分布是根據特定的機率分布在整個N維向量空間中的(一些空間中的點很可能代表狗,而另外的可能不像)。本著同樣的精神,在這個N維向量空間中,存在著貓、鳥等圖像的機率分布。

然後,生成一個新的dog圖像的問題等價於在N維向量空間中按照「dog機率分布」生成一個新的向量的問題。實際上,我們面臨的問題是根據特定的機率分布生成一個隨機變量。

在這一點上,我們可以提到兩件重要的事情。首先,我們提到的「狗的機率分布」在一個非常大的空間是一個非常複雜的分布。其次,即使我們可以假設存在這樣的底層分布(實際上存在看起來像狗的圖像和其他不像狗的圖像),我們顯然不知道如何顯式地表達這種分布。前面的兩點使得從這個分布中生成隨機變量的過程非常困難。接下來讓我們嘗試解決這兩個問題。

… 所以讓我們在變換方法中使用神經網絡作為變換函數吧!

我們在生成dog的新圖像時遇到的第一個問題是,在N維向量空間上的「dog機率分布」是一個非常複雜的問題,我們不知道如何直接生成複雜的隨機變量。然而,我們很清楚如何生成N個不相關的均勻隨機變量,我們可以利用變換方法。為此,我們需要將N維隨機變量表示為將一個非常複雜的函數,應用在生成一個簡單的N維隨機變量上!

在這裡,我們可以強調這樣一個事實,即找到變換函數並不像描述逆變換方法那樣簡單,只需對累積分布函數(我們顯然不知道)求出封閉形式的逆。轉換函數不能顯式表達出來,我們必須從數據中進行學習。

在大多數情況下,非常複雜的函數自然意味著神經網絡建模。然後,通過神經網絡對變換函數進行建模,該神經網絡將一個簡單的N維均勻隨機變量作為輸入,並返回另一個N維隨機變量,該隨機變量在訓練後應遵循正確的「dog機率分布」。一旦網絡架構設計完成,我們仍然需要對其進行訓練。在接下來的兩節中,我們將討論兩種方法來訓練這些生成網絡,包括GANs背後的對抗性訓練!

圖解使用神經網絡生成模型的概念。顯然,我們討論的維度比這裡表示的要高得多。

英文原文:https://towardsdatascience.com/understanding-generative-adversarial-networks-gans-cd6e4651a29

更多文章,請關注微信公眾號:AI公園

文章來源: https://twgreatdaily.com/zh-hk/SmCbkWwBvvf6VcSZ0CnS.html