Hulu機器學習問題與解答系列 | 二十五:初識生成式對抗網路(GANs)

【初識生成式對抗網路(GANs)】

[場景描述]

2014年的一天,Goodfellow與好友相約到酒吧聊天。也許平日里工作壓力太大,腦細胞已耗盡了創作的激情,在酒吧的片刻放鬆催生了一個絕妙的學術點子,然後就有了GANs的傳說。GANs全稱為生成式對抗網路,是一個訓練生成模型的新框架。

GANs自提出之日起,就迅速風靡深度學習的各個角落,GANs的變種更是雨後春筍般進入人們的視野,諸如:WGAN、InfoGAN、f-GANs、BiGAN、DCGAN、IRGAN等等。

GANs之火,就連任何初入深度學習的新手都能略說一二。GANs剛提出時沒有華麗的數學推演,描繪出的是一幅魅力感極強的故事畫面,恰好契合了東方文化中太極圖的深刻含義——萬物在相生相剋中演化,聽起來很有意思。想像GANs框架是一幅太極圖,「太極生兩儀」,這裡「兩儀」就是生成器和判別器,生成器負責「生」,判別器負責「滅」,這一生一滅間有了萬物。具體說來,生成器在初始混沌中孕育有形萬物,判別器甄別過濾有形萬物,扮演一種末日大審判的角色。回到嚴謹的學術語言上,生成器從一個先驗分布中採得隨機信號,經過神經網路的「妙手」轉換,得到一個模擬真實數據的樣本;判別器既接收來自生成器的模擬樣本,也接收來自實際數據集的真實樣本,我們不告訴判別器這個樣本是哪裡來的,需要它判斷樣本的來源。判別器試圖區分這兩類樣本,生成器則試圖造出迷惑判別器的模擬樣本,兩者自然構成一對「冤家」,置身於一種對抗的環境。然而,對抗不是目的,在對抗中讓雙方能力各有所長才是目的,理想情況下最終達到一種平衡,使得雙方的能力以臻完美,彼此都沒有了更進一步的空間。

[問題描述]

關於GANs,從基本理論到具體模型再到實驗設計,我們依次思考三個問題:

(1)GANs可看作一個雙人minimax遊戲,請給出遊戲的value function。我們知道在理想情況下最終會達到一個納什均衡點,此時生成器表示為G*,判別器表示為D*,請給出解(G*, D*)和value function的值;在未達到均衡時,我們將生成器G固定,去尋找當前下最優的判別器DG*,請給出DG*和此時的value function。至此的答案都很容易在原論文中找到,這裡進一步發問,倘若固定D,我們將G優化到底,那麼解GD*和此時的value function是什麼?

(2)發明GANs的初衷是為了更好地對概率生成模型作估計,我們知道在應用傳統概率生成模型(如:馬爾科夫場、貝葉斯網)時會涉及大量難以完成的概率推斷計算,GANs是如何避開這類計算的?

(3)實驗中訓練GANs的過程會如描述的那麼完美嗎,求解的最小化目標函數

在訓練中會遇到什麼問題,你有什麼解決方案?

[解答與分析]

(1)

在minimax遊戲里,判別器的目標是將來自實際數據集的樣本識別為真實樣本,同時將來自生成器的樣本識別為模擬樣本。簡單地看,這是一個二分類問題,損失函數自然是negative log-likelihood,也稱為categorical cross-entropy loss或cross-entropy loss,即:

其中,D(x)表示判別器D預測x為真實樣本的概率,p(data|x)和p(g|x)分別表示x為真實樣本和模擬樣本的後驗概率。另外,p(x) = Psrc(s = data)P(x|data) + Psrc(s = g)P(x|g), 這裡的P(x|data)即pdata(x)表示從實際數據集獲取樣本x的概率,P(x|g)即pg(x)表示從生成器生成樣本x的概率。由於假定實際數據集的和生成器的樣本各佔一半,即Psrc(s = data) = Psrc(s = g) = 1/2,我們可以得到

因此,判別器最小化L(D)的過程可以化作最大化如下value function:

同時,作為另一方的生成器G最小化該value function,故這個minimax遊戲可表示為:

我們發現在優化G的過程中,最小化value function本質是在最小化生成器樣本分布pg與真實樣本分布pdata的Jensen-Shannon divergence JSD(pdata||pg)。

進一步考慮最終達到的均衡點,JSD(pdata||pg)的最小值在pdata = pg取到零,故最優解G*滿足x = G*(z)~pdata(x),D*滿足D*(x)≡1/2,此時value function的值為V(G*, D*) =﹣㏒4。

進一步,在訓練時如果給定D求解當下最優的G,我們可以得到什麼?

我們不妨假設G表示前一步的生成器,給出的DG下的最優判別器

,即

那麼,當前G的最小化目標變為

(2)

傳統概率生成模型要定義一個描述概率分布的表達式P(X),通常是一個聯合概率分布的密度函數P(X1, X2,…,XN),然後基於此表達式做最大似然估計。這個過程少不了做概率推斷計算,如:計算邊緣概率P(Xi),計算條件概率P(Xi|Xj),計算作分母的partition function等。當隨機變數很多時,概率模型會變得十分複雜,做概率計算變得非常困難,即使做大量近似計算,效果常不盡人意。而GANs在刻畫概率生成模型時,並不對概率密度函數P(X)直接建模,而是通過直接製造樣本X,間接地體現出分布P(X),就是說我們實際上看不到P(X)的一個表達式。那麼怎麼做呢?

我們知道,如果有兩個隨機變數ZX,且它們之間存在某種映射關係,X = f(Z),那麼它們各自的概率分布PX(X)和PZ(Z)也存在某種映射關係。當Z, X∈R都是一維隨機變數時,

Z, X是高維隨機變數時,導數變成Jacobian矩陣,為PX = J PZ。因此,已知Z的分布,我們對隨機變數之間的轉換函數f直接建模,就唯一確定了X的分布。

這樣,不僅避開了大量複雜的概率計算,而且給了f更大的發揮空間,我們可以用神經網路來刻畫f。我們知道,近些年神經網路領域大踏步向前發展,湧現出一批新技術來優化網路結構,除了經典的CNN和RNN結構,ReLu激活函數、Batch Normalization、Dropout等,都可以自由地添加到生成器的網路中,大大增強了生成器的表達能力。

(3)

在實際訓練中,早期階段的生成器G很差,生成的模擬樣本很容易被判別器D識別,使得D回傳給的G梯度非常非常小,達不到訓練G的目的,這個現象稱為優化飽和。為什麼會出現這種現象呢?回答這個問題前,我們將判別器D的sigmoid輸出層的前一層記為o,那麼D(x)可表示成D(x) = sigmod(o(x)),當輸入的是一個真實樣本時x~pdata,當輸入的是一個模擬樣本時x = G(z;θg), z~pz。我們看判別器D的導數形式

訓練生成器的loss項的導數形式為

此時生成器獲得的導數基本為零,這說明判別器強大後對生成器的幫助反而變得微乎其微。怎麼辦呢?


下一題預告

【隱馬爾科夫模型】

[場景描述]

序列標註(sequence labeling)是對一個序列的每個元素給出標籤的機器學習任務。序列標註模型被應用於文本處理相關領域,包括中文分詞、詞性標註、語義角色標註、命名實體識別、語音識別等。我們前面已經提到過用RNN等深度學習模型解決序列標註問題,接下來我們還將回顧序列標註的一系列經典模型。

隱馬爾科夫模型是機器學習中一個經典的生成式模型,描述了由隱狀態的馬爾科夫鏈隨機生成觀測狀態序列的過程,常用於解決序列標註問題,在自然語言處理、語音識別等領域有廣泛的應用。

[問題描述]

簡述如何對中文分詞問題用隱馬爾科夫模型進行建模。給定語料庫,如何對模型進行訓練。


歡迎留言提問或探討~ 你可以關注並進入「Hulu」微信公號,點擊菜單欄「機器學習」獲得更多系列文章。下期再見。

weixin.qq.com/r/_EMrM0T (二維碼自動識別)


推薦閱讀:

男士面試時,需要注意的儀容儀錶問題有哪些?
面試時,你最不想聽到HR說什麼?
難倒全球無數學霸的牛津大學面試題 你能答出幾道?
職場小白該如何向面試官提問

TAG:人工智慧 | 機器學習 | 面試問題 |