1. 程式人生 > >GAN的彙總

GAN的彙總

  1. DCGAN
    DCGAN全稱為Deep convolutional generative adversarial networks,即將深度學習中的卷積神經網路應用到了對抗神經網路中。
    生成器,可以看做圖片分類的逆過程,圖片生成器輸入隨機向量,輸出一個圖片。隨機向量不含畫素級的位置資訊。
    而最初卷積網路,引入感受野,捕捉鄰近區域的特徵,越靠近輸入端的資訊,包含位置資訊越明顯,隨著層層深入,感受野涵蓋的區域的擴大,過於細節的位置資訊丟失,留下高階語義資訊,反映圖片的類別。傳統卷積神經網路只是捕捉或識別位置資訊,不負責產生位置資訊,位置源於圖片,會在逐層計算中丟棄掉。
    因此,如果使用卷積網路,從隨機向量生成圖片,生成過程符合兩點原則
  • 保證資訊在逐層計算中增多
  • 不損失位置資訊,並且不斷產生更多的位置資訊

在這裡插入圖片描述
DCGAN的生成器網路結構如上圖所示,相較原始的GAN,DCGAN幾乎完全使用了卷積層代替全連結層,判別器幾乎是和生成器對稱的,從上圖中我們可以看到,整個網路沒有pooling層和上取樣層的存在,實際上是使用了帶步長(fractional-strided)的卷積代替了上取樣,以增加訓練的穩定性。

DCGAN能改進GAN訓練穩定的原因主要有:

◆ 使用步長卷積代替上取樣層,卷積在提取影象特徵上具有很好的作用,並且使用卷積代替全連線層。

◆ 生成器G和判別器D中幾乎每一層都使用batchnorm層,將特徵層的輸出歸一化到一起,加速了訓練,提升了訓練的穩定性。(生成器的最後一層和判別器的第一層不加batchnorm)

◆ 在判別器中使用leakrelu啟用函式,而不是RELU,防止梯度稀疏,生成器中仍然採用relu,但是輸出層採用tanh

◆ 使用adam優化器訓練,並且學習率最好是0.0002,(我也試過其他學習率,不得不說0.0002是表現最好的了)

  1. CGAN
    使用GAN生成全新的樣本,但是有個問題,不能確切控制新樣本的型別。如果控制生成的結果,cGan可以解決問題。
    cGAN的全稱為Conditional Generative Adversarial Networks, 即條件對抗生成網路,它為生成器、判別器都額外加入了一個條件y, 這個條件實際是希望生成的標籤。生成器G必須要生成和條件y匹配的樣本,判別器不僅要判別影象是否真實,還要判別影象和條件y是否匹配。cGAN的輸入輸為:
    生成器G,輸入一個噪聲z,一個條件y,輸出符合該條件的影象G(z|y)。
    判別器D,輸入一張影象x,一個條件y,輸出該影象在該條件下的真實概率D(x|y) 。
    在這裡插入圖片描述

  2. WGAN
    與DCGAN不同,WGAN主要從損失函式的角度對GAN做了改進,損失函式改進之後的WGAN即使在全連結層上也能得到很好的表現結果,WGAN對GAN的改進主要有:
    ◆ 判別器最後一層去掉sigmoid
    ◆ 生成器和判別器的loss不取log
    ◆ 對更新後的權重強制截斷到一定範圍內,比如[-0.01,0.01],以滿足論文中提到的lipschitz連續性條件。
    總的來說,GAN中交叉熵(JS散度)不適合衡量生成資料分佈和真實資料分佈的距離,如果通過優化JS散度訓練GAN會導致找不到正確的優化目標,所以,WGAN提出使用wassertein距離作為優化方式訓練GAN,但是數學上和真正程式碼實現上還是有區別的,使用Wasserteion距離需要滿足很強的連續性條件—lipschitz連續性,為了滿足這個條件,作者使用了將權重限制到一個範圍的方式強制滿足lipschitz連續性,但是這也造成了隱患,接下來會詳細說。另外說實話,雖然理論證明很漂亮,但是實際上訓練起來,以及生成結果並沒有期待的那麼好。

  3. SeqGAN-生成文字序列
    GAN在之前發的文章裡已經說過了,不瞭解的同學點我,雖然現在GAN的變種越來越多,用途廣泛,但是它們的對抗思想都是沒有變化的。簡單來說,就是在生成的過程中加入一個可以鑑別真實資料和生成資料的鑑別器,使生成器G和鑑別器D相互對抗,D的作用是努力地分辨真實資料和生成資料,G的作用是努力改進自己從而生成可以迷惑D的資料。當D無法再分別出真假資料,則認為此時的G已經達到了一個很優的效果。
    它的諸多優點是它如今可以這麼火爆的原因:

  • 可以生成更好的樣本
  • 模型只用到了反向傳播,而不需要馬爾科夫鏈
  • 訓練時不需要對隱變數做推斷
  • G的引數更新不是直接來自資料樣本,而是使用來自D的反向傳播
  • 理論上,只要是可微分函式都可以用於構建D和G,因為能夠與深度神經網路結合做深度生成式模型
    它的最後一條優點也恰恰就是它的侷限,之前我發過的文章中也有涉及到,在NLP中,資料不像圖片處理時是連續的,可以微分,我們在優化生成器的過程中不能找到“中國 + 0.1”這樣的東西代表什麼,因此對於離散的資料,普通的GAN是無法work的。
    使用RL來解決這個問題
    在這裡插入圖片描述
    如上圖(左)所示,仍然是對抗的思想,真實資料加上G的生成資料來訓練D。但是從前邊背景章節所述的內容中,我們可以知道G的離散輸出,讓D很難回傳一個梯度用來更新G,因此需要做一些改變,看上圖(右),paper中將policy network當做G,已經存在的紅色圓點稱為現在的狀態(state),要生成的下一個紅色圓點稱作動作(action),因為D需要對一個完整的序列評分,所以就是用MCTS(蒙特卡洛樹搜尋)將每一個動作的各種可能性補全,D對這些完整的序列產生reward,回傳給G,通過增強學習更新G。這樣就是用Reinforcement learning的方式,訓練出一個可以產生下一個最優的action的生成網路。
  1. CycleGAN-自動將某一類圖片轉換成另外一類圖片
    CycleGAN的原理可以概述為:將一類圖片轉換成另一類圖片。也就是說,現在有兩個樣本空間,X和Y,我們希望把X空間中的樣本轉換成Y空間中的樣本。比如如何把女人變成男人,男人變成女人,貓狗之間的互相轉換,如何去除圖片中的馬賽克。
    CycleGAN是一個環形的結構,主要由兩個生成器及兩個判別器組成,如上圖所示。X表示X域的影象,Y表示Y域的影象。X域的影象通過生成器G生成Y域的影象,再通過生成器F重構回X域輸入的原影象;Y域的影象通過生成器F生成X域影象,再通過生成器G重構回Y域輸入的原影象。判別器Dx和Dy起到判別作用,確保影象的風格遷移。
    在這裡插入圖片描述

  2. LAPGAN
    江湖人稱拉普拉斯對抗生成網路,主要致力於生成更加清晰,更加銳利的資料。LAPGAN事實上受啟發與CGAN,同樣在訓練生成模型的時候加入了conditional variable,這也是本案例成功的一大重要原因。

  3. SimGAN
    Apple出品的SimGAN本質地利用了GAN可以產生和訓練資料質量一樣的生成資料這個特性,通過GAN生成大量的和訓練資料一樣真實的資料,從而解決當前大規模的精確標註資料難以獲取,人工標註成本過高等一系列問題。

  4. InfoGAN
    InfoGAN是一種能夠學習disentangled representation的GAN,比如人臉資料集中有各種不同的屬性特點,如臉部表情、是否帶眼鏡、頭髮的風格眼珠的顏色等等,這些很明顯的相關表示, InfoGAN能夠在完全無監督資訊(是否帶眼鏡等等)下能夠學習出這些disentangled representation,而相對於傳統的GAN,只需修改loss來最大化GAN的input的noise和最終輸出之間的互資訊。

  5. AC-GAN
    AC-GAN即auxiliary classifier GAN。

  6. IRGAN
    生成離散樣本