1. 程式人生 > 實用技巧 >生成式對抗網路

生成式對抗網路

如果說前面學習的CNN主要用於影象分類或語義分割,那麼GAN主要用於影象生成或影象轉換,更多有趣的應用可參照:https://blog.csdn.net/qq_25737169/article/details/80874717

一、Generative Adversarial Network(GAN)

首先,GAN由生成模型和判別模型所組成:

  判別模型(區分真假樣本)

  • 輸入:一幅影象,輸出:一個概率值,用於判斷輸入影象的真假
  • 判別網路目的:判斷一張圖是來自是真樣本集還是假樣本集

  生成模型(欺騙判別器)

  • 輸入:一組隨機數Z,輸出:一個影象
  • 生成網路目的:使自己造樣本的能力盡可能強,使判別網路沒法判斷是真樣本 or 假樣本

但是GAN為什麼由生成器和判別器組成呢?

1、為什麼Generator學習的過程需要Discriminator呢?為什麼不能自己直接學習呢?可以只有一個Generator嗎?

Generator自己可以直接學習,但是它學習後生成的可能就只是一張模糊(或不清楚或錯誤)的圖片。沒有Discriminator就不能確定生成的圖片效果好不好。也就是說,只有一個Generator,它就只有一個任務——生成圖片,至於生成的圖片效果如何,就不是它所關心的任務了。

2、為什麼Discriminator不能自己產生一個Image呢?可以只有一個Discriminator嗎?

首先,Discriminator可以自己單獨產生圖片,但是這樣運算量太大——窮舉所有畫素點x,將其放入Discriminator中,一個一個地判斷,最後得到整張圖片。

其次,只有Discriminator的話,它的輸入永遠只有真實的圖片,沒有虛假的圖片,那麼Discriminator永遠成為優秀的判別器,即Discriminator面對稍微像樣的圖片,其判斷的結果基本是1(real)——比如一個動漫角色的兩個眼睛的顏色很不一樣,Discriminator判別圖片結果為1,但是優秀的Discriminator認為那是0(fake)。

3、如何理解Generative Adversarial Network的Adversarial?

生成對抗網路本質是一個生成圖片的過程。但是需要生成一個優秀的網路,就需要adversarial。Discriminator和Generator就是一個對抗競爭的關係。生成器生成的圖片要想辦法騙過判別器,而判別器要不斷訓練生成器生成的圖片和真實的圖片以提高判對生成器所生成圖片的稽核能力。沒有生成器和判別器的對抗就無法學習進步——生成更加優秀的圖片。

因此,如果沒有generator,就不能產生比較好的(真實的)negative樣例,Discriminator不能很好訓練。沒有Discriminator,就不能判斷出Generator產生的圖片怎麼樣。

其訓練演算法如下:

簡單說來:

1、隨機初始化生成器和判別器   

2、交替訓練判別器D和生成器G,直到收斂

- 固定生成器G,訓練判別器D區分真實影象與合成影象
- 固定判別器D,訓練生成器G欺騙判別器D

其訓練公式如下:

x:真實圖片

z:輸入G(generator)網路的噪聲

G(z):G網路生成的圖片

D(x):D(Discriminator) 網路判斷真實圖片是否真實的概率

D(G(z)):D網路判斷G生成的圖片是否真實的概率

二、KL散度和JS散度

KL散度:一種衡量兩個概率分佈的匹配程度的指標,在GAN中用於衡量Generator生成的圖片與真實的圖片的擬合程度

  • KL散度(相對熵,資訊散度,資訊增益):用於刻畫概率分佈q擬合概率分佈p的程度

  • P: 資料的真實分佈;Q:資料的理論分佈,模型分佈

  • KL(P||Q) = H(p) - H(p,q) = -∫p(x)logp(x)dx(資訊熵)- (-∫p(x)logq(x)dx) (交叉熵)

  • P1 = P2時,KL散度 = 0

  • KL散度具有非負性

  • 極大似然估計 = 最小化KL,理解如下:

    定義:資料分佈 P(x),Q(x;θ)---其中θ為引數,樣例{x1, x2,...,xm} from P(x)
    找出θ:使Q(x;θ) is colse to P(x)---即找出合適的θ,使得Q儘可能地擬合P
    即使用最大似然估計(MLE):找引數值,使樣本結果Q(x)出現像P(x)那樣的結果的可能性為最大
                         MLE的具體理解參照:https://zhuanlan.zhihu.com/p/26614750
    

    其等價關係:

JS散度:JS(P1||P2) = 1/2KL( P1 || (P1+P2)/2 ) + 1/2 KL( P2 || (P1+P2)/2 )

  • 度量兩個概率分佈的相似度,解決KL散度非對稱性問題

三、cGAN和DCGAN

cGAN(條件生成)

y:有條件地監督生成器生成的資料

DCGAN(深度卷積生成式對抗網路)

  • CNN與GAN結合,使用卷積神經網路作為判別器和生成器
  • 判別模型:用strided convolutions代替空間池化pooling
  • 生成模型:用fractional strided convolutions
  • 除了生成模型的輸出層和判別器的輸入層,網路其他層均使用了Batch Normalization
  • 無全連線層
  • 生成器的輸出層——Tanh啟用函式,其他層——ReLU;;判別器:leaky ReLU

四、程式碼練習

GAN

CGAN and DCGAN