一篇文章「簡單」認識《生成對抗網路》(GAN)

2021-04-16 19:00:04

前言

背景:在監督學習中,訓練集需要大量的人工標註資料,並且需要人工判斷生成結構好壞,這個過程是高成本且低效率的;GAN能自動完成這個過程,效率高成本低。

定義生成對抗網路(GAN,generative adversarial network),是一種常用於學習類別特徵的神經網路結構;主要有兩部分組成,分別是生成網路、判別網路。

生成對抗網路GAN讓機器能作詩、作曲、作畫。

 

生成對抗網路應用

GAN 的應用十分廣泛,它的應用包括影象合成、影象編輯、風格遷移、影象超解析度以及影象轉換,資料增強等。

1)風格遷移

影象風格遷移是將影象A的風格轉換到影象B中去,得到新的影象,取個名字為new B。其中new B中即包含影象B的內容,也包含影象A的風格。

 

2)影象生成

影象生成的目的是生成與訓練樣本影象類似的影象,其中被廣泛應用的一種網路結構是深度折積對抗網路(DCGAN,Deep Convolutional Generative Adversarial Network)

比如:動漫頭像生成、人臉生成等等。

 

3)音樂創作

通過學習各種型別音樂的特點,深度學習網路可以創作出對應型別的音樂。

Maddelta是一個線上AI音樂生成的網站,可以通過選擇歌曲型別來隨機生成對應型別的音樂。

 

生成學習演演算法

判別式學習:人工神經網路ANN、折積神經網路CNN、迴圈神經網路RNN 這些神經網路模型均屬於判別式學習演演算法。該類演演算法根據改定特徵x,計算樣本屬於y的概率。

生成式學習生成對抗網路GAN 這種神經網路模型屬於生成式學習演演算法。該類演演算法先從訓練集中總結出各個類別的特徵,即先得到p\left ( x\mid y \right ),再把待預測樣本的特徵與各個類別的特徵進行比較,以判斷出其所屬的類別。

生成式學習演演算法的核心在於求解p\left ( x\mid y \right );生成式演演算法能夠獲取類別本身的特徵,這使得演演算法具有創造出新樣本的可能。

 

生成對抗網路

生成對抗網路(GAN,generative adversarial network),是一種常用於學習類別特徵的神經網路結構;主要有兩部分組成,分別是生成網路、判別網路。

生成網路(也稱:生成器 Generator):用於生成(合成)資料,目的是「騙過」判別器。

判別網路(也稱:判別器 Discriminator):用於判別生成的資料是否真實,目的是找出生成器做的「假資料」。

兩個網路同時訓練,直到判別網路不能鑑別生成資料的真假。

GAN原理圖:

生成網路和判別網路,兩者的訓練目的是為了打敗彼此,兩者有互相對抗。

 

GAN的簡要實現流程

  1. Generator網路將形狀為(latent_dim,)的向量對映到形狀為(height, width, channel)的圖
  2. Discriminator網路將形狀(h,w,c)的影象對映為一個二進位制分數,用於評分影象為真的概率
  3. GAN網路將Generator網路和Discriminator網路連線在一起: gan(x) = discriminator(generator(x))
  4. 使用帶有「真假」標籤的影象訓練Discriminator網路(先)
  5. 訓練GAN,使得GAN的每步更新使Discriminator網路將其分類為真

 

GAN演演算法實現要點

1、初始化生成器G和判別器D

2、開始迭代訓練:

  • 1)首先固定生成器G的引數,訓練判別器D(先訓練別器,讓其有一個高分的模型)
  • 2)然後固定判別器D的引數,訓練生成器G(別器是一個較好的模型基礎上,此時它能判別真假資料了;再訓練生成器,讓它分數越高越好)

訓練技巧

1、一個模型訓練K次、另一個模型訓練1次;

2、單邊標籤平滑:正則化、防止判別器梯度過大。

 

MNIST 案例

對於MNIST,判別器網路是一個標準的折積網路,可以對饋送到其的影象進行分類,二項式分類器將影象標記為真實或偽造。

從某種意義上說,生成器是逆折積網路:雖然標準折積分類器獲取影象並對其進行下取樣以產生概率,但生成器獲取隨機噪聲的向量並將其上取樣至影象。第一個通過諸如maxpooling之類的下取樣技術丟棄資料,第二個生成新資料。

生成器和判別器相互博弈,隨著判別器改變,生成器也隨之變化;判別器需要判斷是真實圖片,還是假圖片(生成器生成的);生成器需要儘可能生成真實的圖片,以騙過判別器。

 

GAN優點

  1. 能更好建模資料分佈,生成的影象更銳利、清晰;
  2. 生成器G的引數更新不是直接來自資料樣本,而是使用來自D的反向傳播;
  3. GAN是一種生成式模型,相比較其他生成模型(玻爾茲曼機和GSNs)只用到了反向傳播,而不需要複雜的馬爾科夫鏈

 

GAN缺點

  1. 難訓練,訓練GAN需要達到納什均衡,判別器D與生成器G之間需要很好的同步;在實際訓練中很容易出現判別器D收斂,生成器G發散不收斂的情況。
  2. 訓練經常出現不穩定、梯度消失、模式崩潰的情況。
  3. 可解釋性差,生成模型的分佈沒有顯式的表達。

 

 

文獻學習

1. Generative Adversarial Networks

論文名稱:Generative Adversarial Nets

論文地址: https://arxiv.org/abs/1406.2661

「GAN之父」 Ian Goodfellow 發表的第一篇提出 GAN 的論文,提出了 GAN 這個模型框架,討論了非飽和的損失函數,然後對於最佳判別器(optimal discriminator)給出其導數,然後進行證明;最後是在 Mnist、TFD、CIFAR-10 資料集上進行了實驗。

 

2. Conditional GANs

論文名稱:Conditional Generative Adversarial Nets

論文地址:https://arxiv.org/abs/1411.1784

cGAN 在生成器部分新增了類別標籤這個輸入,通過這個改進,緩和了 GAN 的一大問題--訓練不穩定。

「引入先驗知識的做法」,這種思想,在如今大多數非常有名的 GAN 中都採用這種做法,後面介紹的生成圖片的 BigGAN,或者是圖片轉換的 Pix2Pix,都是這種思想, cGAN 的提出非常關鍵。

 

3. DCGAN

論文名稱:Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks

論文地址:https://arxiv.org/abs/1511.0643

採用 CNN 結構成功實現 GAN 模型,它介紹如何使用折積層,並給出一些額外的結構上的指導建議來實現。採用反折積構建生成器和判別器,新增BN駕駛學習和收斂過程。

它還討論如何視覺化 GAN 的特徵、隱空間的插值、利用判別器特徵訓練分類器以及評估結果。

 

4. Improved Techniques for Training GANs

論文名稱:Improved Techniques for Training GANs

論文地址:https://arxiv.org/abs/1606.0349

介紹了很多如何構建一個 GAN 結構的建議,它可以幫助你理解 GAN 不穩定性的原因,給出很多穩定訓練 DCGANs 的建議,比如特徵匹配(feature matching)、最小批次判別(minibatch discrimination)、單邊標籤平滑(one-sided label smoothing)、虛擬批歸一化(virtual batch normalization)等等,利用這些建議來實現 DCGAN 模型是一個很好學習瞭解 GANs 的做法。

 

5. Pix2Pix

論文名稱:Image-to-Image Translation with Conditional Adversarial Networks

論文地址:https://arxiv.org/abs/1611.0700

用原始圖片生成新風格的圖片;這個模型在訓練時候需要採用成對的訓練資料,並對 GAN 模型採用了不同的設定。

 

6. CycleGAN

論文名稱:Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks

論文地址:https://arxiv.org/abs/1703.1059

這篇論文提出了一個非常好的方法--迴圈一致性(Cycle-Consistency)損失函數;CycleGAN僅僅需要準備兩個領域的資料集即可,但不需要一一對應。

 

7. Progressively Growing of GANs

論文名稱:Progressive Growing of GANs for Improved Quality, Stability, and Variation

論文地址:https://arxiv.org/abs/1710.10196

它取得非常好的結果以及對於 GAN 問題的創造性方法;它利用一個多尺度結構,從 4*4 到 8*8 一直提升到 1024*1024 的解析度。

 

8. BigGAN

論文名稱:Large Scale GAN Training for High Fidelity Natural Image Synthesis

論文地址:https://arxiv.org/abs/1809.11096

BigGAN 應該是當前 ImageNet 上圖片生成最好的模型了,它的生成結果非常的逼真,但這篇論文比較難在本地電腦上進行復現,它同時結合了很多結構和技術,包括自注意機制(Self-Attention)、譜歸一化(Spectral Normalization)等,這些在論文都有很好的介紹和說明。

 

9.NAS

論文名稱:AdversarialNAS: Adversarial Neural Architecture Search for GANs

論文地址:https://arxiv.org/abs/1912.02037

程式碼地址:https://github.com/chengaopro/AdversarialNAS

提出一種專門針對生成對抗網路(GAN)量身客製化的Adversarial NAS方法,以搜尋無條件影象生成任務中的高階生成模型。網路架構自動化設計的神經架構搜尋(NAS),在許多計算機視覺領域取得了可喜的成果。

 

這裡收集了大量 GAN 論文的 Github 專案,並且根據應用方向劃分論文:https://github.com/zhangqianhui/AdversarialNetsPapers

 

溫故而知新

一篇文章「簡單」認識《人工神經網路》

人工神經網路 (Artificial Neural Network, ANN),由人工神經元構成的網路,模擬人類的大腦;它模擬生物過程以反映人腦某些特徵的計算結構。

神經元及其突觸是神經網路的基本器件;模擬生物網路首先模擬生物神經元。

一篇文章「簡單」認識《折積神經網路》

折積神經網路(Convolutional Neural Network, CNN),在計算機視覺中得到了廣泛的應用。

折積神經網路通過折積層池化層的疊加實現對輸入資料的特徵提取,最後連線全連線層實現分類。

折積神經網路是前饋網路;前饋神經網路是一個靜態網路,資訊的傳遞是單向的,網路的輸出只依賴於當前的輸入,不具備記憶能力。即:處理的資料是一個一個輸入的,前後資料沒有關係的。實際生活中,很多資料都是有上下文相關性的,這些資料稱為序列資料;處理的時候,不能只考慮當前的輸入就進行判斷,需要考慮前後輸入之間的關係。

一篇文章「簡單」認識《迴圈神經網路》

迴圈神經網路(Recurrent Neural Networks,RNN),是一種反饋網路,模擬「人腦記憶功能」,常用於語言識別、機器翻譯、視訊分析、生成影象描述等。

RNN能有效處理序列特性的資料,它能挖掘資料中的時序資訊以及語意資訊

 

參考:

1)西安電子科技大學《人工智慧導論》課程;

2)北京交通大學《影象處理與機器學習》課程;

3)上海交通大學《人工智慧技術》課程;

4)https://zhuanlan.zhihu.com/p/80128600

如有錯誤,歡迎指出;歡迎交流~

宣告:本篇文章,未經許可,謝絕轉載。

 

開原始碼

3 個復現多種 GANs 模型的 github 專案,分別是目前主流的三個框架,TensorFlow、PyTorch 和 Keras:

 搜尋論文:大佬們的優秀成果都喜歡放在arxiv上,不妨直接去arxiv網站上找,http://cn.arxiv.org/