1. 程式人生 > >生成對抗網路學習(GAN)學習筆記

生成對抗網路學習(GAN)學習筆記

文章目錄


2018-11-16 GAN的原理

GAN

GAN的思想就是一個博弈的思想。GAN有兩個互相對抗的模型,一個生成模型G用於擬合樣本資料分佈和一個判別模型D用於估計輸入樣本是來自於真實的訓練資料還是生成模型G。我們讓兩個網路相互競爭,生成網路來生成假的資料,對抗網路通過判別器去判別真偽,最後希望生成器生成的資料能夠以假亂真。

判別網路的目的:就是能判別出來屬於的一張圖它是來自真實樣本集還是假樣本集。假如輸入的是真樣本,網路輸出就接近1,輸入的是假樣本,網路輸出接近0,那麼很完美,達到了很好判別的目的。

生成網路的目的:生成網路是造樣本的,它的目的就是使得自己造樣本的能力盡可能強,強到什麼程度呢,你判別網路沒法判斷我是真樣本還是假樣本。(不需要像傳統圖模型一樣,需要一個嚴格的生成資料的表示式。這就避免了當資料非常複雜的時候,複雜度過度增長導致的不可計算。同時,它也不需要 inference 模型中的一些龐大計算量的求和計算。它唯一的需要的就是,一個噪音輸入,一堆無標準的真實資料,兩個可以逼近函式的網路。)

在訓練網路時:
(1)訓練判別器。
• 固定生成器
• 對於真圖片,判別器的輸出概率值儘可能接近 1
• 對於生成器生成的假圖片,判別器儘可能輸出 0
(2)訓練生成器。
• 固定判別器
• 生成器生成圖片,儘可能讓判別器輸出 1
(3)返回第一步,迴圈交替訓練。
訓練生成器時無須調整判別器的引數;訓練判別器時,無須調整生成器的引數。

其中的損失函式應用了最大最小優化問題:
min G max D

V ( D , G ) = E x p d a t a ( x ) [ log D ( x ) ] + E z p z ( z ) [ log ( 1 D ( G ( z ) ) ) ] \min\limits_G\max\limits_D V(D, G) = E_{x \sim p_{data}(x)}[\log D(x)] + E_{z \sim p_{z}(z)}[\log (1-D(G(z)))]
(z表示輸入G的隨機噪聲)

訓練模型D要最大概率地分對真實樣本(最大化 log ( D ( x ) ) \log(D(x)) ,而生成模型G要最小化 log ( 1 D ( G ( z ) ) ) \log(1-D(G(z))) ,即最大化D的損失。G和D同時訓練,但是訓練中要固定一方,更新另一方的引數,交替迭代,使對方的錯誤最大化。最終,G能估計出真實樣本的分佈。

上面那個loss函式可以分開看成下面的兩個公式。
優化D:
max D V ( D , G ) = E x p d a t a ( x ) [ log D ( x ) ] + E z p z ( z ) [ log ( 1 D ( G ( z ) ) ) ] \max\limits_D V(D, G) = E_{x \sim p_{data}(x)}[\log D(x)] + E_{z \sim p_{z}(z)}[\log (1-D(G(z)))]
優化G:
min G V ( D , G ) = E z p z ( z ) [ log ( 1 D ( G ( z ) ) ) ] \min\limits_G V(D, G) = E_{z \sim p_{z}(z)}[\log (1-D(G(z)))]

可以看到,優化D的時候,也就是判別網路,其實沒有生成網路什麼事,後面的G(z)這裡就相當於已經得到的假樣本。優化D的公式的第一項,使的真樣本x輸入的時候,得到的結果越大越好,可以理解,因為需要真樣本的預測結果越接近於1越好嘛。對於假樣本,需要優化是的其結果越小越好,也就是D(G(z))越小越好,因為它的標籤為0。但是呢第一項是越大,第二項是越小,這不矛盾了,所以呢把第二項改成1-D(G(z)),這樣就是越大越好,兩者合起來就是越大越好。 那麼同樣在優化G的時候,這個時候沒有真樣本什麼事,所以把第一項直接卻掉了。這個時候只有假樣本,但是我們說這個時候是希望假樣本的標籤是1的,所以是D(G(z))越大越好,但是呢為了統一成1-D(G(z))的形式,那麼只能是最小化1-D(G(z)),本質上沒有區別,只是為了形式的統一。之後這兩個優化模型可以合併起來寫,就變成了最開始的那個最大最小目標函數了。

也就是說,在訓練過程中,會把生成模型生成的樣本和真實樣本隨機地傳送一張(或者一個 batch)給判別模型 D。判別模型 D 的目標是儘可能正確地識別出真實樣本(輸出為“真”,或者1),和儘可能正確地揪出生成的樣本,也就是假樣本(輸出為“假”,或者0)。而生成模型的目標則和判別模型相反,就是儘可能最小化判別模型揪出它的概率。這樣 G 和 D 就組成了一個min-max,在訓練過程中雙方都不斷優化自己,直到達到平衡——雙方都無法變得更好,也就是假樣本與真樣本完全不可區分。

  1. 李巨集毅2017深度學習 GAN生成對抗神經網路相關學習視訊合集

體會:如果GAN能夠學出真實樣本的分佈,那麼把G和D拆開看,它們各自的功能是什麼?
而在分割網路結果上,進行判別性學習,是否能夠使目標域學習到源域的分佈?


2018-11-15 Multimodal Unsupervised Image-to-Image Translation

無監督image-to-image翻譯是計算機視覺裡的一個重要和富有挑戰性的問題。給定源域中的一張影象,目標是學習目標域對應的影象的條件分佈,在沒有看到任何對應的影象對。雖然該條件分佈本質上是多模態的,現有方法做了過於簡化的假設,把該分佈作為確定的一對一的對映進行建模。結果是,他們無法從一個給定源域影象生成多樣化的輸出。為了解決這個限制,我們提出一個多模態無監督Image-to-image翻譯(MUNIT)框架。我們假設影象表示可以分解成一個內容編碼,它是域不變的,和一個風格/樣式編碼,它捕獲域特定的屬性。將一個影象轉化到另一個域,我們重組其內容與一個隨機風格編碼,它是從目標域的風格空間取樣來的。我們分析了提出的框架並建立一些理論結果。廣泛的實驗與最先進的方法進行比較,進一步證明了提出的框架的優勢。此外,我們的框架允許使用者通過提供一個例子風格影象來控制翻譯輸出的風格。程式碼和pretrained模型 https://arxiv.org/abs/1804.04732.

論文連結
舉例:給定貓的一張圖片,提取它的內容程式碼和風格程式碼,用貓的內容程式碼和狗的風格程式碼可以生成狗的影象。


2018-11-13 Image-to-Image的論文彙總

影象生成一直是計算機視覺領域非常有意思的方向,影象到影象的變換是其中一個非常重要的應用,使用影象到影象的變換,可以完成非常多有趣的應用,可以把黑熊變成熊貓,把你的照片換成別人的表情,還可以把普通的照片變成畢加索風格的油畫,自從GAN橫空出世之後,這方面的應用也越來越多,下面是對這個領域的相關論文的一個整理,而且大部分都有程式碼!

文章連結