大家好,今天小米粥在有三AI開設新專欄《GAN的優化》。在這個專欄中,我們會講述GAN的相關背景、基本原理、優化等相關理論,尤其是側重於GAN目標函數的優化。小米粥和有三將帶領大家從零學起,深入探究GAN的點點滴滴。
本專欄將比較著重於理論,每周更新一次,歡迎大家和我一起學習。本人才學疏淺,有諸多不到之處還請各位包涵指正。
作者 | 小米粥
編輯 | 言有三
今天是第一期,在正式進入GAN之前,我們有必要先介紹一些GAN的背景知識,理一理各種生成模型的那些千絲萬縷的聯繫,然後深入到GAN中去。
1 生成模型
在機器學習或者深度學習領域,生成模型具有非常廣泛的應用,它可以用於測試模型的高維機率分布的表達能力,可以用於強化學習、半監督學習,可以用於處理多模輸出問題,以及最常見的產生「真實」數據問題。
我們有必要先說明一個問題,本專欄所講述的GAN包括的VAE、玻爾茲曼機等其他生成模型均屬於無監督學習的範疇,這與李航老師的《統計學習方法(第一版)》里的有監督學習生成方法有所區別。簡單而言,有監督學習與無監督學習的區別之處在於是否存在標籤信息。
在有監督學習生成方法中,我們學得聯合機率分布P(X,Y),然後求出生成模型P(Y|X),其重點在於學習聯合分布。例如,在樸素貝葉斯方法中,我們通過數據集學習到先驗機率分布P(Y)和條件機率分布P(X|Y),即可得到聯合機率分布P(X,Y);在隱馬爾可夫模型中,我們通過數據集學習到初始機率分布、狀態轉移機率矩陣和觀測機率矩陣,即得到了一個可以表示狀態序列和觀測序列的聯合分布的馬爾可夫模型。而在GAN、VAE等無監督生成模型中,只存在關於X的數據集,我們的目標是近似得到P(X)的機率密度函數,或者直接產生符合X本質分布的樣本。
2 極大似然估計
我們從最簡單的生成模型開始說起。考慮這樣一個問題,依機率P(X)在X中獨立採樣n次構建一個包含n樣本的數據集,如何根據這個數據集來求得X的機率密度函數P(X)。其實這個問題並不容易解決,可是如果再額外提供一些關於X的先驗知識,比如X服從正態分布,那這個問題便可以使用極大似然法輕鬆搞定。
如若X服從正態分布,則機率密度函數P(X)的表達式形式已知,只需要再確定均值、方差兩個參數值便可以得到P(X)。接下來便是計算數據集的似然函數,對似然函數取負對數,然後最小化即可,即
其實,對隨機變量X的機率密度函數的建模源於先驗知識,極大似然估計只是一個參數估計的方法。容易證明,極大似然法本質上是在最小化數據集的經驗性分布和模型分布之間的KL散度,而且當具備某些條件時,參數的極大似然估計值會趨近於真實值。
3 顯式的機率密度函數
當不知道X的機率密度函數P(X)的表達形式,或者該表達式極其複雜的時候,我們如何對P(X)建模?這時,借用神經網絡強大的函數擬合能力、表達能力,我們可以用來擬合相關函數來顯式地構造P(X)。
例如在自回歸網絡中,我們將d維隨機變量X的聯合機率分布通過鏈式法則進行分解,
其中的條件機率分布由神經網絡進行表示。
圖3.1 神經自回歸網絡
另一類是以深度信念網絡、深度玻爾茲曼機以及各種變體為代表的通過加入隱變量來建模P(X)的方法。它們的結構分為可見層和隱層,可見層用於接受輸入,隱層單元用於特徵表示。隱變量類似於多層感知器中的隱藏單元,用來模擬可見層的高階交互,可提高網絡的表達、擬合能力。訓練目標均是使可見層節點的分布最大可能接近樣本的真實分布。其區別之處在於深度玻爾茲曼機是一個完全無向模型,而深度信念網絡的是有向圖和無向圖的混合模型,是受限玻爾茲曼機的堆疊。
圖3.2 深度信念網絡
圖3.3 深度玻爾茲曼機
以深度玻爾茲曼機為例,使用能量函數定義聯合機率分布,其中Z為樸素的歸一化配分函數。
我們仍然可以使用極大似然法進行訓練,但是需要解決兩個困難的計算問題,一個是邊緣化隱變量時的推斷問題,一個是配分函數的梯度求解問題。
再一種是基於可微生成器網絡,使用可微函數g(z)將隱變量z的樣本變換為樣本x上的分布。其典型代表便是VAE,其將x顯式建模為
VAE中也需要使用變分法近似最大似然函數。
無論如何顯式地定義機率密度函數P(X),其基本思路都是極大化樣本集的似然函數,最終求解出P(X)中的參數,某些模型需要加一個邊緣化隱變量的操作。在自回歸網絡中,計算難度不算太大,但是在深度玻耳茲曼機、深度信念網絡中涉及到圖模型和隱變量時,不可避免要使用馬爾可夫鏈近似、變分推斷等技術。
4 GAN
再思考一個問題,依機率P(X)在X中獨立採樣n次構建一個包含n樣本的數據集,如何根據這個數據集來訓練一個模型,使得模型能源源不斷產生符合X機率分布的樣本?
如若只是產生樣本,生成模型不必非要去顯式定義機率密度函數,然後近似求解P(X),就比如在深度玻爾茲曼機中,不僅訓練時運算複雜,採樣產生樣本時還需要Gibbs採樣技術。
還是在可微生成器網絡中,不同於VAE,我們使用可微函數g(z)將潛變量z變化為樣本x,全程沒有任何顯式地出現過機率密度函數,直接做一個end-to-end的模型。g(z)的本質是一個參數化計算過程,它能很好地學習到z排布情況以及從z到x的映射。我們所做的就是根據訓練數據來推斷參數,然後選擇合適的g,其代表便是GAN。
GAN(對抗生成網絡)是一種深度生成模型,由Gooldfellow於2014年首次提出,現已發展成時下最火熱的模型之一。其設計靈感來自於博弈論,一般由生成器和判別器兩個神經網絡構成,通過對抗方式進行訓練,最後得到一個性能優異的生成器。
圖4.1 GAN結構
GAN的核心任務是:使生成器G產生的樣本的機率分布儘量接近訓練集的機率分布。判別器D的功能類似於邏輯回歸,對於一個樣本x,判別器D(x)將給出該樣本來源於訓練集的機率,所以一個「完美」的判別器應該對來自於訓練集的樣本輸出機率1,對來自於生成器的生成樣本輸出機率0;對於生成器G,它試圖捕捉到訓練集的本質模式,生成樣本並將樣本送至判別器D,最好能使該樣本「欺騙」判別器,使判別器誤認為該樣本來源於訓練集而輸出機率1。通過這個對抗生成過程,GAN沒有顯式地建模P(x),也可以得到滿足P(x)分布的樣本。
4.1 判別器
訓練判別器,就是在做類似於有監督學習中的邏輯回歸的問題。用於訓練的樣本包括兩部分,原始訓練集(其標籤為1)、生成樣本集(其標籤為0),還是使用極大似然方法便可以得到其目標函數。
圖4.2 判別器
接下來,我們看下最優判別器。我們訓練判別器,理論上存在一個最優解,我們來求解一下這個解。
理想狀態下的最優判別器的數學表達式還是非常「簡單而務實」的,也非常符合我們的直覺。
4.2 生成器
論文最開始提出的生成器是全連接網絡,它不斷優化,使產生的樣本儘量欺騙判別器(即使判別器輸出值儘量大)。
圖4.3 生成器
我們來看一下,生成器的目標函數到底是什麼。將最優判別器代入,可有
其實真正在指導生成器進行訓練的是隱式定義的分布和數據集真實分布的JS散度。當兩個分布完全重合時,生成器的目標函數值達到最小-lg4,且此時的判別器也為最優,對任意輸入,均給出D(x)=0.5。理論上可證明,只要有足夠的精度,模型一定能收斂到最優解。
另外,在訓練生成器時,可使用另一個目標函數trick,我們來看看這個目標函數的本質。
單純從數學的角度來看,這個目標函數是自相矛盾的,最大JS散度的同時減少KL散度,這樣的訓練可以認為是沒有什麼意義的。
5 作者介紹
小米粥,本科就讀于吉林大學物理學院、經濟學院,現為中科院二年級直博生,主要研究方向為機器學習、GAN。
總結
今天向大家講了講一部分關於的生成模型的內容,從極大似然法到顯式的定義機率密度函數到隱式定義機率密度函數的GAN。在GAN中,我們介紹了基本結構,推導了幾個基本結論,內容比較簡單。
下期預告:度量與fGAN