生成式對抗網路(GAN)基礎

1. 前言

在GAN被提出之前,深度學習在計算機視覺領域最令人矚目的成果基本上都是判別模型(Discriminative models),如圖像分類,目標識別等。但其實故事的另一半是深度生成模型(Deep Generative Models)。生成模型的影響力一直很小,主要原因是對深度神經網路(如CNN)使用最大似然估計時,遇到了棘手的概率計算問題,而GAN的提出則巧妙的繞過了這個問題。具體分析我們會在稍後給出。

2. GAN的直觀介紹

GAN是Ian Goodfellow提出的使用對抗過程來獲得生成模型的新框架。生成對抗網路主要由兩個部分組成,一個是生成器G(Generator),另一個是判別器D(discriminator)。

  • 生成器G的作用是盡量去擬合(cover)真實數據分布,生成以假亂真的圖片。它的輸入參數是一個隨機雜訊z,G(z)代表其生成的一個樣本(fake data)。
  • 判別器D的作用是判斷一張圖片是否是「真實的」,即能判斷出一張圖片是真實數據(training data)還是生成器G生成的樣本(fake data)。它的輸入參數是x,x代表一張圖片,D(x)代表x是真實圖片的概率。

具體過程:

(1) 對於從訓練數據中取樣出的真實圖片x,判別器D希望D(x)的輸出值接近1,即判定訓練數據為真實圖片。

(2) 給定一個隨機雜訊z,判別器D希望D(G(z))的輸出值接近0,即認定生成器G生成的圖片是假的;而生成器G希望D(G(z))的輸出值接近1,即G希望能夠欺騙D,讓D將生成器G生成的樣本誤判為真實圖片。這樣G和D就構成了博弈的狀態。

(3) 在博弈的過程中,生成器G和判別器D都不斷的提升自己的能力,最後達到一個平衡的狀態。G可以生成足以「以假亂真」的圖片G(z)。對於D來說,它難以判定G生成的圖片究竟是不是真實的,因此D(G(z)) = 0.5。這樣我們的目的就達成了:我們得到了一個生成式的模型G,它可以用來生成真實圖片。

下圖對這個過程進行了描述。

關於GAN的工作方式Ian Goodfellow舉了一個很有意思例子:生成器G可以被比作假幣製造者團隊,試圖生產出無法檢測出真偽的假幣;判別器D可以被比作警察,試圖區分出真幣和假幣。在比拼競爭的過程中,雙方都不斷提升自己的方法,最終導致假幣與真品無法區分。說明我們得到了一個效果非常好的生成器G。

3. 最大似然估計

在進入GAN的形式定義和理論推導之前,我們先來介紹一下使用最大似然原理工作的生成模型。

最大似然的基本想法是定義一個能夠給出概率分布(參數為 	heta )估計的模型。

似然定義為訓練數據在模型下的概率乘積: prod
olimits_{i=1}^mp_{model}(x^{(i)};	heta)

這個數據集中包含m個樣本 x^{(i)}

最大似然的原理實際上就是選擇可以最大化訓練數據的似然的模型參數。這在對數空間中很容易完成,我們可以將原來的乘積轉化為求和。這樣可以簡化似然關於模型的導數的代數表達式,而且在用計算機實現的時候,也能夠避免數值問題,比如說乘上幾個很小的概率值的時候出現的下溢情形。

egin{align*} 	heta^*&=mathop{argmax}_{	heta}prod_{i=1}^mp_{model}(x^{(i)};	heta) 	ag{1}\ &=mathop{argmax}_{	heta}logprod_{i=1}^mp_{model}(x^{(i)};	heta) 	ag{2}\ &=mathop{argmax}_{	heta}sum_{i=1}^mlog p_{model}(x^{(i)};	heta) 	ag{3} end{align*}

在方程(2)中我們使用了 mathop{argmax}
olimits_vf(v)=mathop{argmax}
olimits_vlog f(v) 的性質,因為log函數是單調遞增的,不會改變最大值點的位置。

我們可以把最大似然估計看做是數據生成分布和模型分布之間的KL散度:

	heta^*=mathop{argmin}_	heta D_{KL}(p_{data}(x)parallel p_{model}(x;	heta))

【KL散度(Kellback-Leibler divergence),也稱為相對熵(relative entropy),用於度量兩個概率分布p(x)和q(x)之間的差異, KL(p(x)parallel q(x))=int_xp(x)logfrac{p(x)}{q(x)},mathrm{d}x

證明:

egin{align*} 	heta^*&approx mathop{argmax}_{	heta}E_{xsim p_{data}}[log p_{model}(x;	heta)] 	ag{4}\ &=mathop{argmax}_{	heta}int_x p_{data}(x)log p_{model}(x;	heta),mathrm{d}x	ag{5}\ &=mathop{argmax}_{	heta}int_x p_{data}(x)log p_{model}(x;	heta),mathrm{d}x-int_xp_{data}(x)log p_{data}(x),mathrm{d}x	ag{6}\ &=mathop{argmax}_{	heta}int_xp_{data}(x)logfrac {p_{model}(x;	heta)}{p_{data}(x)}mathrm{d}x	ag{7}\ &=mathop{argmin}_{	heta}int_xp_{data}(x)logfrac {p_{data}(x)}{p_{model}(x;	heta)}	ag{8}\ &=mathop{argmin}_	heta D_{KL}(p_{data}(x)parallel p_{model}(x;	heta)) 	ag{9} end{align*}

如果我們能夠足夠準確地做到此操作,那麼若 p_{data}處在分布 p_{model}(x;θ) 族中,則模型能夠準確地恢復 p_{data}。實踐中,我們不能獲取 p_{data}本身,而僅僅是從 p_{data}中採樣出由m 個樣本組成的訓練集。我們將其定義為 hat p_{data},即用這m個點的概率經驗分布,來近似 p_{data} 。最小化  hat p_{data}p_{model} 之間的 KL 散度實際上就和最大化訓練集的似然完全等價。

(可以認為KL散度越小,兩個模型就越相似)

所以我們可以得出結論:最大似然估計就是在近似最小化真實數據分布和模型分布之間的KL散度。

但是我們注意上述結論是基於我們的一個假設,就是  p_{data}處在分布  p_{model}(x;θ)族中。那顯然這需要 p_{model}具有很強大的能力(capacity)。所以我們可以想像如果用高斯混合模型這樣能力不夠強的模型去擬合真實數據分布(如圖像),顯然是不行的。所以我們希望使用神經網路這樣能力很強的模型。

如下圖所示。當我們給神經網路的輸入是一個分布(如正態分布),它的輸出也可以看做一個分布。

這個過程可以用如下公式來表示:

P_G(x)=int_zP_{prior}(z)I_{[G(z)=x]},mathrm{d}z 	ag{10}

但此時如果使用最大似然估計會存在問題,就是神經網路的參數量太大,想要計算似然(likelihood)來對神經網路的參數進行估計是不現實的。

GAN最大的貢獻就是繞開了這個問題,不直接計算似然,而是通過使用判別器D與生成器G的對抗過程,來訓練生成器G。

4. GAN的形式定義

下面進行形式化的定義:

p_g: 生成模型的概率分布;

p_{data}: 真實數據概率分布 ;

p_{z}(z): 輸入雜訊變數 ;

G(z;	heta_g): G是可微函數;是參數為 	heta_g 的多層感知機 ;

D(x;	heta_d): D是可微函數;是參數為 	heta_d 的多層感知機;

D(x)代表x來自數據而不是 p_g的概率。訓練D來最大化D賦給訓練樣本和從G中取得的樣本正確標籤的概率。我們同時訓練G最小化 log(1-D(G(z)))

換句話說,D和G進行如下two-player minimax game: min_Gmax_DV(D,G)=mathbb{E}_{x{sim}p_{data}(x)}[logD(x)]+mathbb{E}_{z{sim}p_z(z)}[log(1-D(G(z)))] 	ag{11}

在下一節將給出對抗網路的理論分析,本質上說明當G和D具備足夠的能力(capacity)時,提出的訓練準則能夠使G覆蓋(cover)數據生成分布。下圖是一個不那麼正式,但是對這個訓練方式具有教學意義的解釋。

生成對抗網路在訓練中同時更新判別模型分布(D,藍色,虛線),D區分數據生成分布(黑色,點線) p_x 和生成模型分布 p_g(G)(綠色,實線)。下面的水平線代表z別採樣的區域(domain),在本例中z是均勻分布。上面的水平線是x的部分區域。向上的箭頭代表映射 x=G(z) 。(a)考慮接近收斂點的一組對抗對, p_gp_{data}是相似的,D是一個部分準確的分類器。(b)在演算法的內層循環D被訓練來區分生成樣本和真實數據,收斂於 D^*(x)=p_{data}(x) / p_{data}(x)+p_g(x) 。(c)當更新G時,D的梯度指導G(z)向更可能被判斷為真實數據的區域移動。(d)當訓練進行一定次數時(steps),如果G和D具有足夠的容量(capacity),它們會到達一個彼此都不能提升(improve)的點,因為此時 p_g=p_{data}。判別器(discriminator)不能區分兩個分布, D(x)=1/2

訓練方式:交替的訓練D和G,D訓練k步,G訓練1步。只要G變化的足夠慢,D就能保持接近他的最優解。

5. 理論推導

演算法:

5.1 全局最優 p_g=p_{data}

我們首先考慮給定任意的生成器G,推導最佳判別器D。

命題1. G固定,最優的D是  D_G^*(x)=frac{p_{data}(x)}{p_{data}(x)+p_g(x)} 	ag{12}

證明:判別器的訓練標準是,給定任意的生成器G,最大化 V(G,D) 的值。

egin{align*} V(G,D)&= int_xp_{data}(x)log(D(x)),mathrm{d}x+int_zp_z(z)log(1-D(G(z))),mathrm{d}z\ &=int_xp_{data}(x)log(D(x)) +p_g(x)log(1-D(x)),mathrm{d}x 	ag{13} end{align*}

若想方程(13)取得最大值,等價於對每一個x,都使 p_{data}(x)log(D(x)) +p_g(x)log(1-D(x)) 取得最大值。那麼給定x,  p_{data}(x)p_g(x)固定的,設 p_{data}(x)=a,p_g(x)=b,D(x)=y

對於任意的 (a,b)in mathbb{R}^2{0,0},函數 y	o alog(y)+blog(1-y)[0,1]frac a {a+b} 處取得最大值。

所以得到 D_G^*(x)=frac{p_{data}(x)}{p_{data}(x)+p_g(x)}

D的訓練目的可以解釋為最大化條件概率 P(Y=y|x) 的似然估計,Y代表x是來自 p_{data}(y=1)還是來自 p_g(y=0) 。方程(11)可以被重新寫成如下形式:

egin{align*} C(G) &=max_DV(G,D)\ &=mathbb{E}_{xsim p_{data}}[logD_G^*(x)]+mathbb{E}_{zsim p_z}[log(1-D_G^*(G(z)))] 	ag{14}\ &=mathbb{E}_{xsim p_{data}}[logD_G^*(x)]+mathbb{E}_{xsim p_g}[log(1-D_G^*(x))]\ &=mathbb{E}_{xsim p_{data}}[logfrac{p_{data}(x)}{p_{data}(x)+p_g(x)}]+mathbb{E}_{xsim p_g}[logfrac{p_g(x)}{p_{data}(x)+p_g(x)}] end{align*}

定理1 C(G)取得全局最小值當且僅當 p_g=p_{data}。在最小值點,C(G)值為 -log4

證明:對於 p_g=p_{data}, D_G^*=1/2 ,(考慮方程(12))。因此根據方程(14), C(G)=logfrac 12+logfrac 12=-log4egin{align*} C(G) &=max_DV(G,D)\ &=int_xp_{data}(x)logfrac{p_{data}(x)}{p_{data}(x)+p_g(x)},mathrm{d}x+int_xp_g(x)logfrac{p_g(x)}{p_{data}(x)+p_g(x)},mathrm{d}x\ &=-2log2+int_xp_{data}(x)logfrac{p_{data}(x)}{(p_{data}(x)+p_g(x))/2},mathrm{d}x+int_xp_g(x)logfrac{p_g(x)}{(p_{data}(x)+p_g(x))/2},mathrm{d}x 	ag{15}\ &=-2log2+KL(p_{data}(x)parallelfrac{p_{data}(x)+p_g(x)}2)+KL(p_g(x)parallelfrac{p_{data}(x)+p_g(x)}2)\ &=-2log2+2JSD(p_{data}(x)parallel p_g(x)) end{align*}

JS散度(Jensen–Shannon divergence):用于衡量兩個概率分布p(x)和q(x)之間的差異, JSD(p(x)parallel q(x))=frac 12KL(p(x)parallel frac{p(x)+q(x)}2)+frac 12KL(q(x)parallel frac{p(x)+q(x)}2)

兩個分布之間的JS散度總是非負的,只有當兩個分布相等時JS散度為0。所以當 p_g=p_{data} 時我們取得全局最小值,此時 C^*=-log4。此時我們的生成模型能夠完美的複製真實數據生成過程。

6. 總結

本文首先直觀介紹了GAN的基本工作方式,然後通過最大似然估計說明了GAN提出的最大貢獻,最後給出了GAN的形式化定義和理論推導。

參考文獻

Goodfellow, Ian, et al. "Generative adversarial nets." NIPS 2014

Goodfellow, Ian. "NIPS 2016 tutorial: Generative adversarial networks."

視頻

台灣大學李宏毅教授的深度學習課程

推薦閱讀:

計算機視覺涉及基礎總結與相關書目推薦
看AI產品經理如何介紹「計算機視覺」(基於實戰經驗和案例)
IROS2017筆記->Toward Unifying Model-based and Learning-based Robotics
目標跟蹤---ECO: Efficient Convolution Operators for Tracking

TAG:计算机视觉 | 生成对抗网络GAN | 深度学习DeepLearning |