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表示前一步的生成器,給出的D是G下的最優判別器
,即
那麼,當前G的最小化目標變為
(2)
傳統概率生成模型要定義一個描述概率分布的表達式P(X),通常是一個聯合概率分布的密度函數P(X1, X2,…,XN),然後基於此表達式做最大似然估計。這個過程少不了做概率推斷計算,如:計算邊緣概率P(Xi),計算條件概率P(Xi|Xj),計算作分母的partition function等。當隨機變數很多時,概率模型會變得十分複雜,做概率計算變得非常困難,即使做大量近似計算,效果常不盡人意。而GANs在刻畫概率生成模型時,並不對概率密度函數P(X)直接建模,而是通過直接製造樣本X,間接地體現出分布P(X),就是說我們實際上看不到P(X)的一個表達式。那麼怎麼做呢?
我們知道,如果有兩個隨機變數Z和X,且它們之間存在某種映射關係,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」微信公號,點擊菜單欄「機器學習」獲得更多系列文章。下期再見。
http://weixin.qq.com/r/_EMrM0TEAhl9rQBQ9xbq (二維碼自動識別)
推薦閱讀:
※男士面試時,需要注意的儀容儀錶問題有哪些?
※面試時,你最不想聽到HR說什麼?
※難倒全球無數學霸的牛津大學面試題 你能答出幾道?
※職場小白該如何向面試官提問