1. 程式人生 > >GAN—生成對抗網路

GAN—生成對抗網路

原理:
假設我們有兩個網路:一個生G(Generator),一個判別D(Discriminator)。

G是一個生成圖片的的網路,它接受一個隨機的噪聲z,通過這個噪聲生成圖片,記做G(z)。

D是一個判別網路,判斷一張圖片是不是“真實的”。它的輸入引數是x,x代表一張圖片的。輸出D(x)代表x為真實圖片的概率,如果為1,就代表100%是真實的圖片,輸出為0,就代表不可能是真實的圖片。

“對抗”的由來:
G(生成網路)的目標是儘量生成真實的圖片去欺騙D(判別網路)。
D的目標是儘量把G生成的圖片和真實的圖片分別開來。

我們希望的狀態:
G可以生成以假亂真的圖片G(z)。
D難以判定G生成的圖片究竟是不是真實的,因此D(G(z)) =0.5。

我們的目的:得到一個生成式的模型G,可以用它來生成圖片。
目標函式:
這裡寫圖片描述
在這裡:
x表示真實圖片,z表示輸入G網路的噪聲,而G(z)表示G網路生成的圖片。
D(x)用來判斷真實的圖片為真實的概率。
D(G(z))是D網路判斷G生成的圖片是否為真實圖片的概率。

G的目的:G希望自己生成的圖片儘可能的接近真實圖片,也就是D(G(z))得到的概率值儘可能的大。這時候是減小V(D,G),因此前面式子標記是min_G。
D的目的:D越強,D(x)應該越大,D(G(x))應該越小,因此對於式子是max_D。
所以兩個網路是對抗不過,隨著網路優化,G生成影象越來越接近真實影象,D的判別能力也越來越高。
我們可以看看Lan Goodfellow的描述:
這裡寫圖片描述


(a)為一開始情況,黑線表示影象x的實際資料分佈。綠線表示生成的資料分佈。我們希望綠色的線能夠趨近於黑色的線。即讓生成的資料儘可能接近真實影象。藍線表示生成的資料對應於D的分佈。
一開始情況如a所示,G的能力有限,跟真實影象的資料分佈有一定差距,D網路識別真實影象和生成影象雖然有波動但無壓力,能夠區分出來。
訓練一段時間,到了b圖,D訓練的比較好,可以很明顯的區分生成資料,由藍線可以看出隨著黑線和綠線的差異增大,藍線明顯下降了。
訓練一段時間後,G的目標是提升概率,因此綠線往藍線高的方向移動。
訓練到D圖,隨著G網路的提升,G反過來影響D的分佈D最終會達到0.5,G網路和D網路處於平衡狀態,無法再進一步更新了。
網路實現
這裡寫圖片描述

演算法:使用小批量隨機梯度下降法來訓練GAN。k是訓練判別網路D的更新次數。根據以往經驗,我們設k=1。
for 訓練次數:
for k次:
從噪聲先驗知識 p(z) 中抽樣m個噪聲樣本{z1,z2,,…,zm};
從資料生成分佈pdata(x)中抽取小批量m個樣本{x1,x2,…,xm}。
根據以下隨機梯度上升法更新判別器D
這裡寫圖片描述
end for
從噪聲先驗知識 p(z) 中抽樣m個噪聲樣本{z1,z2,,…,zm};
根據以下隨機梯度下降法更新生成器G
這裡寫圖片描述
end for
(1)G和D是同步訓練的,但兩者訓練次數不一樣,G訓練一次,D訓練k次。
(2)D的訓練是同時輸入生成的資料和樣本資料計算loss。(不用交叉熵是因為交叉熵會使D(G(z))變為0,導致沒有梯度,無法更新G。
在實際訓練中,文章中G網路使用了RELU和sigmoid,而D網路使用了Maxout和dropout。並且文章中作者實際使用-log(D(G(z))來代替log(1-D(G(z)),從而在訓練的開始使可以加大梯度資訊,但是改變後的loss將使整個GAN不是一個完美的零和博弈。
GAN的訓練過程可用下圖來描述:
這裡寫圖片描述

GAN的缺點:不容易訓練