1. 程式人生 > >對於GANs原始論文的理解

對於GANs原始論文的理解

1. 訓練過程以及理解

  GAN要同時訓練一個生成網路(Generator)和一個判別網路(Discriminator),前者輸入一個noise變數z,輸出一個偽圖片資料 G ( z ; θ g

) G\left ( z;\theta _{g} \right ) ,後者輸入一真實圖片(real image)以及偽圖片(fake image)資料 x ,輸出一個表示該輸入是真實圖片或者偽造圖片的二分類置信度 G ( x
; θ d ) G\left ( x;\theta _{d} \right )
,理想情況下,判別器 D 需要儘可能準確的判斷輸入資料到底是一個真實圖片還是某種偽造的圖片,而生成器G又需要盡最大可能去欺騙D,讓D把自己產生的偽造圖片全部判斷為真實的圖片。然後我們就這樣互相欺騙,互相成長,樂此不疲。
根據上述訓練過程的描述,我們可以定義一個損失函式:
L
o s s F u n c t i o n = 1 m i = 1 m [ l o g D ( x i ) + l o g ( 1 D ( G ( z i ) ) ) ] Loss Function=\frac{1}{m}\sum_{i=1}^{m}\left [ logD\left ( x^{i} \right ) +log\left ( 1-D\left ( G\left ( z^{i} \right ) \right ) \right )\right ]

其中, x i x^{i} , z i z^{i} 分別表示真實的圖片,noise變數。
優化目標為 :
m i n G m a x D L o s s F u n c t i o n = 1 m i = 1 m [ l o g D ( x i ) + l o g ( 1 D ( G ( z i ) ) ) ] min_{G}max_{D} Loss Function=\frac{1}{m}\sum_{i=1}^{m}\left [ logD\left ( x^{i} \right ) +log\left ( 1-D\left ( G\left ( z^{i} \right ) \right ) \right )\right ]
訓練網路D使得最大概率地分對訓練樣本的標籤(最大化 l o g D ( x i ) logD\left ( x^{i} \right ) ),訓練網路G最小化KaTeX parse error: Expected '\right', got 'EOF' at end of input: …ight ) \right ),即最大化D的損失,使得G生成的圖片儘可能真實,訓練過程中固定一方,更新另一個網路的引數,交替迭代,使得對方的錯誤最大化。

不過需要注意的一點是,實際訓練過程中並不是直接在上述優化目標上對 θ d \theta_{d} , θ g \theta_{g} 計算梯度,而是分成幾個步驟:
訓練判別器即更新 θ d \theta_{d} :迴圈k次,每次準備一組real image資料 x = x 1 , x 2 , , x m x=x^{1},x^{2},\cdot \cdot \cdot ,x^{m} 和一組fake image資料 z = z 1 , z 2 , , z m z=z^{1},z^{2},\cdot \cdot \cdot ,z^{m} ,計算
θ d 1 m i = 1 m [ l o g D ( x i ) + l o g ( 1 D ( G ( z i ) ) ) ] \triangledown _{\theta _{d}}\frac{1}{m}\sum_{i=1}^{m}\left [ logD\left ( x^{i} \right ) +log\left ( 1-D\left ( G\left ( z^{i} \right ) \right ) \right ) \right ]
然後梯度上升法更新 θ d \theta_{d}

訓練生成器即更新 θ g \theta_{g} :準備一組fake image資料 z = z 1 , z 2 , , z m z=z^{1},z^{2},\cdot \cdot \cdot ,z^{m} ,計算
θ g 1 m i = 1 m [ l o g ( 1 D ( G ( z i ) ) ) ] \triangledown _{\theta _{g}}\frac{1}{m}\sum_{i=1}^{m}\left [log\left ( 1-D\left ( G\left ( z^{i} \right ) \right ) \right ) \right ]
然後梯度下降法更新 θ g \theta_{g}

可以看出,第一步內部有一個k層的迴圈,某種程度上可以認為是因為我們的訓練首先要保證判別器足夠好然後才能開始訓練生成器,否則對應的生成器也沒有什麼作用,然後第二步求提督時只計算fake image那部分資料,這是因為real image不由生成器產生,因此對應的梯度為 0.

具體的流程如下:
uuu

2. GAN的優勢與缺陷
與其他生成式模型相比較,生成式對抗網路有以下四個優勢
  1. 根據實際的結果,它們看上去可以比其它模型產生了更好的樣本(影象更銳利、清晰)。
  2. 生成對抗式網路框架能訓練任何一種生成器網路(理論上-實踐中,用 REINFORCE 來訓練帶有離散輸出的生成網路非常困難)。大部分其他的框架需要該生成器網路有一些特定的函式形式,比如輸出層是高斯的。重要的是所有其他的框架需要生成器網路遍佈非零質量(non-zero mass)。生成對抗式網路能學習可以僅在與資料接近的細流形(thin manifold)上生成點。
  3. 不需要設計遵循任何種類的因式分解的模型,任何生成器網路和任何鑑別器都會有用。
  4. 無需利用馬爾科夫鏈反覆取樣,無需在學習過程中進行推斷(Inference),迴避了近似計算棘手的概率的難題。
    與PixelRNN相比,生成一個樣本的執行時間更小。GAN 每