本文作為自己學習李宏毅老師2021春機器學習課程所做筆記,記錄自己身為入門階段小白的學習理解,如果錯漏、建議,還請各位博友不吝指教,感謝!!
概率生成模型
概率生成模型(Probabilistic Generative Model)簡稱生成模型,指一系列用於隨機生成可觀測數據的模型。
假設在一個連續或離散的高維空間\(\mathcal{X}\)中,存在一個隨機向量\(X\)服從一個未知的數據分布\(p_r(x), x \in \mathcal{X}\)。生成模型根據一些可觀測的樣本\(x^{(1)},x^{(2)}, \cdots ,x^{(N)}\)來學習一個參數化的模型\(p_\theta(x)\)來近似未知分布\(p_r(x)\),並可以用這個模型來生成一些樣本,使得生成的樣本和真實的樣本盡可能地相似。
生成模型的兩個基本功能:概率密度估計和生成樣本(即采樣)。
隱式密度模型
在生成模型的生成樣本功能中,如果只是希望一個模型能生成符合數據分布\(p_r(x)\)的樣本,可以不顯示的估計出數據分布的密度函數。
假設在低維空間\(\mathcal{Z}\)中有一個簡單容易采樣的分布\(p(z)\),\(p(z)\)通常為標准多元正態分布\(\mathcal{N}(0,I)\),我們用神經網絡構建一個映射函數\(G : \mathcal{Z} \rightarrow \mathcal{X}\),稱為生成網絡。利用神經網絡強大的擬合能力,使得\(G(z)\)服從數據分布\(p_r(x)\)。這種模型就稱為隱式密度模型(Implicit Density Model)。
隱式密度模型生成樣本的過程如下圖所示:
生成對抗網絡
生成對抗網絡(Generative Adversarial Networks,GAN)是一種隱式密度模型,包括判別網絡(Discriminator Network)和生成網絡(Generator Network)兩個部分,通過對抗訓練的方式來使得生成網絡產生的樣本服從真實數據分布。
在生成對抗網絡中:
- 判別網絡:目標是盡量准確地判斷一個樣本是來自於真實數據還是由生成網絡產生。
- 生成網絡:目標是盡量生成判別網絡無法區分來源的樣本。
生成對抗網絡的訓練過程
在訓練過程中,將判別網絡和生成網絡兩個網絡不斷地進行交替訓練。當最后收斂時,如果判別網絡再也無法判斷一個樣本地來源,那么也就等價於生成網絡可以生成符合真實數據分布的樣本。生成對抗網絡的流程圖如下圖所示:
以李宏毅老師所舉的生成二次元頭像的例子來看生成對抗網絡的訓練過程:
Step 1:固定生成網絡,訓練判別網絡
在完成生成網絡和判別網絡參數的初始化之后,固定住生成網絡,我們將從分布\(p(z)\)中采樣出來的向量輸入到生成網絡中,得到對應的輸出(圖片)。
我們拿得到的輸出結果與真正的二次元頭像來訓練判別網絡,目標是讓判別網絡學習這兩中圖片之間的差異,從而可以將他們進行區分。具體來說,我們可以將真正的二次元頭像圖片標為1,生成網絡的輸出結果標為0。接下來,我們既可以將此看作一個分類問題,也可以看作一個回歸問題:
- 分類問題:將真正的頭像看作類別1,生成網絡產生的圖像看作類別2,然后利用這些圖片訓練一個分類器。
- 回歸問題:訓練判別網絡看到真正的頭像圖片時輸出1,看到生成網絡生成的頭像圖片時輸出0,來學習兩者之間的差異。
Step 2: 固定判別網絡,訓練生成網絡
我們將生成網絡輸出的圖片輸入到判別網絡中,最終訓練的目標是是讓判別網絡的輸出值越大越好。判別網絡在訓練的過程中就是看到好的圖片就給它大的分數,如果生成網絡調整參數后輸出的圖片在判別網絡中得到高分,那意味着生成網絡生成的圖片是比較真實的。
在這個訓練過程中,可以看作將Generator和Discriminator拼接成一個更大的網絡,在這個更大的網絡中,我們固定住屬於Discriminator的隱藏層的參數,只更新屬於Generator的隱藏層的參數。Generator和Discriminator拼接的中間部分有一個很寬的中間層,在該層中,我們將Generator輸出的結果整理成圖片的形式輸入到Discriminator中得到分類得分。
生成網絡
我們在訓練一個網絡的時候,基本的思路是:
- 確定一個Loss Function
- 使用Gradient Descent 調節參數
- 然后最小化Loss Function就可以了
那在生成網絡中,我們要Minimize或者Maximize的目標是什么呢?在該網絡中,我們首先輸入從Normal Distribution 中采樣出來的向量,得到一個比較復雜的分布\(p_\theta(x)\),而真實的數據形成另一個分布\(p_r(x)\)。那么在生成網絡中,我們的目標就是讓\(p_\theta(x)\)和\(p_r(x)\)越接近越好,表達為如下公式:
其中\(Div\)表示\(p_\theta(x)\)和\(p_r(x)\)兩個分布之間的散度(Divergence)。散度是衡量兩個分布之間相似度的標准,散度越大,表示兩個分布越不像,散度越小,表示兩個分布越像。但是,這個作用在連續的分布上的散度,我們是無法計算出來的,那突破這一計算限制的方法就是和判別網絡交替訓練完成優化。
判別網絡
如果看作一個分類問題,在判別網絡中,給定一個樣本\((x,y)\),\(y=\{1,0\}\)表示樣本來自真實分布\(p_r(x)\)還是生成模型\(p_\theta(x)\),則判別網絡\(D(x;\phi)\)的輸出為樣本\(x\)屬於真實數據分布的概率:
那樣本來自生成模型的概率為:
所以,判別網絡的目標函數為最小化交叉熵,即:
假設分布\(p(x)\)是由分布\(p_r(x)\)和分布\(p_\theta(x)\)等比例混合而成,即\(p(x)=\frac{1}{2}(p_r(x)+p_\theta(x))\),則上式等價於:
- \(\mathbb{E}_{x \sim p_r(x)}\):是將真實的圖像數據輸入到判別網絡中,得到一個分數再取\(logD(x;\phi)\),為了讓公式(5)中的目標函數越大,該項的值越大越好。
- \(\mathbb{E}_{z \sim p(z)}\):是將生成的圖像數據輸入到判別網絡中,得到一個分數再取\(log(1-D(G(z;\theta); \phi))\),為了讓公式(5)中的目標函數越大,該項的值越小越好。
而根據GAN原始的Paper,這里的公式(5)得到的結果和公式(1)中的散度其實是相關的。如下圖所示:
圖中\(P_{data}\)表示真實分布,\(P_G\)表示生成器產生的分布。在該圖中,直觀的來說,兩個分布的散度比較小,代表真實圖像的藍色星星和代表生成圖像的紅色星星混合在一起,我們使用判別網絡很難將其分開,所以我們在解這個優化問題的時候,就沒有辦法讓這個目標函數的值非常的大,最終得到的公式(5)的值就比較小。
在該圖中,兩組數據很不像,他們的散度很大,而且我們使用判別網絡可以輕易的將他們分開,此時的目標函數的值也就變的很大。綜上所述,小的公式(5)的值對應小的散度,大的公式(5)的值對應大的散度。
既然公式(5)中的目標函數和衡量分布差異的散度相關,不妨做如下替換:
這個就是生成網絡所要解的目標函數了,而求解過程則是生成網絡和判別網絡交替訓練完成的。
參考資料:
《神經網絡與深度學習》 邱錫鵬
