1. 程式人生 > >GAN(一):基本框架

GAN(一):基本框架

GAN(一):基本框架


小白的第一篇部落格,寫的有不對的地方,望各位批評指正;

一、GAN的概念

1)generator:Neural Network
image generation:
給定一個vector,經過NN Generator後,產生一張圖片
sentence generation:
給定一個vector,經過NN Generator後,產生一個句子
2)discriminator:Neural Network
image----->Discriminator----->scalar(一個數),這個數越大,表示image越realistic,越小表示image越fake

一個GAN正是包含上述兩部分,一個generator,一個discriminator(互相對抗)
generator和discriminator就像是獵食者和獵物之間的關係,一個產生圖片,一個辨別圖片的真假,互相促進,使得最終產生的圖片接近realistic

問題1:為什麼generator不通過樣本自己學習,而要通過discriminator評分?
解答1:generator是通過產生一個pixel一個pixel來產生整張影象的,因此對於影象區域性區域之間的聯絡不能控制,也就是沒有所謂的全域性觀。而discriminator是對整張影象進行打分,具有全域性觀,因此用discriminator來促進
問題2:為什麼discriminator不自己產生影象,而是隻打分呢?
解答2:事實上如果能解決如何取到argmax的問題,discriminator是可以自己產生影象的,但是argmax非常複雜,經常不好解或者根本解不出來,所以也不採用。

二、algorithm

1.Initialize generator and discriminator(隨機初始化G,D兩個神經網路)
2. In each training iteration:
step1:Fix generator G, and update discriminator D
Discriminator learns to assign high scores to real objects and low scores to generated objects.
(固定G,更新D。隨機取樣z,輸入到G,G產生一系列影象G(z),D將其和database中的影象相比較,學習給真實的影象打高分,給假的影象打低分)

step2:Gix discriminator D, and update generator G
vector–>generator(NN,update)–>image
image–>discriminator(NN,fix)–>score(higher is better)
so, we need Gradient Ascent not Gradient descent
(固定D,更新G)
上面是完整的演算法

首先,我們要明確一點:G和D是互相促進的。G的目的是產生的影象讓D感到模糊不知道該分成realistic(看起來像是現實的)還是fake(看起來是假的),D的目的是將realistic和fake的影象準確分辨。所以G產生的影象會越來越真,D的辨別能力會越來越強,最終達到一個平衡。
Pdata 表示真實資料的分佈,Pg generator產生的分佈,最終的目的就是讓Pg 的分佈儘可能的和Pdata 相同。
我們用D(x)表示真實影象經過discriminator後的分數,G(z)表示隨機變數z經過generator後產生的影象,那麼有:D(G(z)) 表示generator產生的影象經過discriminator後的分數
我們所希望的是最大化下面這個式子:
discriminator

  1. 從discriminator的角度來看,D(x)越大越好;上式的第二項越大越好(第二項中減號後面那項表示fake圖片的得分,自然越小越好,所以帶個減號之後就是越大越好CSDN上數學公式難輸。。。能懂-這意思就行)
    因此,我們希望最大化上面這個式子
    generator
    2.從generator的角度來看,當然是希望自己產生的圖片能夠瞞天過海,所以希望上式越大越好

有了這兩個式子以後,就可以使用梯度上升或者梯度下降(在兩個式子前面加負號)來解決了。