日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GAN学习

發布時間:2024/3/12 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GAN学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

開始學習GAN生成對抗網絡相關知識,將要點和心得總結于此。

文章目錄

    • 起源
    • 主要思想
    • 特點
    • 訓練技巧
    • 應用場景
    • 其他
    • GAN及其改進
      • GAN
      • DCGAN
      • WGAN和WGAN-gp
      • LSGAN
      • cGAN
      • pix2pix
      • CycleGAN

起源

GAN,全名 Generative Adversarial Networks,即生成式對抗網絡,是2014年Lan Goodfellow的論文《Generative Adversarial Nets》中提出的一種新的方法,是一種無監督學習模型,通過學習樣本分布讓算法生成類似分布的圖片。

主要思想

GAN的主要靈感來源于博弈論中零和博弈的思想。通過生成網絡G(Generator)和判別網絡D(Discriminator)不斷博弈,進而使G學習到數據的分布,根據一定的映射規則從一段隨機數中生成逼真的圖像。
G是一個生成網絡,輸入為一個隨機的噪聲,輸出為的生成圖像。
D是一個判別網絡,輸入為一張圖片,輸出為真實圖片的概率,范圍為0-1。
訓練過程中,G的目標就是盡量生成真實的圖片去欺騙D。而D的目標就是盡量辨別出G生成的假圖像。這樣,G和D構成了一個動態的“博弈過程”,最終的平衡點即納什均衡點
G的梯度更新信息來自判別器D,而不是來自數據樣本。

特點

GAN 的優點:

  • GAN是一種生成式模型,相比較其他生成模型(玻爾茲曼機和GSNs)只用到了反向傳播,而不需要復雜的馬爾科夫鏈。
  • 相比其他所有模型, GAN可以產生更加清晰,真實的樣本
  • GAN采用的是一種無監督的學習方式訓練,可以被廣泛用在無監督學習和半監督學習領域
  • 相比于變分自編碼器, GANs沒有引入任何決定性偏置( deterministic bias),變分方法引入決定性偏置,因為他們優化對數似然的下界,而不是似然度本身,這看起來導致了VAEs生成的實例比GANs更模糊
  • 相比VAE, GANs沒有變分下界,如果鑒別器訓練良好,那么生成器可以完美的學習到訓練樣本的分布.換句話說,GANs是漸進一致的,但是VAE是有偏差的
  • GAN應用到一些場景上,比如圖片風格遷移,超分辨率,圖像補全,去噪,避免了損失函數設計的困難,不管三七二十一,只要有一個的基準,直接上判別器,剩下的就交給對抗訓練了。
  • GAN的缺點:

  • 訓練GAN需要達到納什均衡,有時候可以用梯度下降法做到,有時候做不到.我們還沒有找到很好的達到納什均衡的方法,所以訓練GAN相比VAE或者PixelRNN是不穩定的,但我認為在實踐中它還是比訓練玻爾茲曼機穩定的多
  • GAN不適合處理離散形式的數據,比如文本
  • GAN存在訓練不穩定、梯度消失、模式崩潰(model collapse)的問題(目前已解決)
  • 模式崩潰(model collapse):生成的數據多樣性不足。原GAN論文中提出的loss函數經過變換后為KL散度項,KL散度不具有對稱性,即KL(A|B)≠KL(B|A)。
    故在優化過程中loss對于兩種錯誤的懲罰不同,第一種錯誤表示樣本中包含的數據沒有被生成,即缺乏多樣性,懲罰微小;第二種錯誤表示生成的數據在樣本中不存在 ,即缺乏準確性,懲罰巨大。由于不平衡的懲罰導致生成器寧可多生成一些重復但是正確的樣本,也不愿意去生成多樣性的樣本,因為那樣一不小心就會產生第二種錯誤。這種現象就是大家常說的collapse mode。

    訓練技巧

  • 輸入規范化到(-1,1)之間,最后一層的激活函數使用tanh。
  • 使用wassertein GAN的損失函數。
  • 使用batch norm 或者instance norm 或者weight norm。
  • 避免使用Relu和pooling層,可以使用Leaky-Relu激活函數以減少稀疏梯度的可能性。
  • 梯度下降算法選用Adam,學習率初始參考值1e-4。
  • 給判別網絡D輸入端增加高斯噪聲(正則化)。
  • 應用場景

  • GAN本身是一種生成式模型,最常見的是圖片生成。
  • GAN在分類領域也占有一席之地。替換判別器為一個分類器,做多分類任務,生成器輔助分類器訓練。
  • GAN可以和強化學習結合,例如seq-GAN。
  • GAN在圖像風格遷移,圖像降噪修復,圖像超分辨率都有比較好的結果,詳見pix-2-pix GAN 和cycle GAN。
  • 目前也有研究者將GAN用在對抗性攻擊上,就是訓練GAN生成對抗文本,有針對或者無針對的欺騙分類器或者檢測系統。
  • GAN應用匯總
    常見GAN變體及實現

    其他

    為什么GAN中的優化器不常用SGD

  • SGD容易震蕩,容易使GAN訓練不穩定,
  • GAN的目的是在高維非凸的參數空間中找到納什均衡點,GAN的納什均衡點是一個鞍點,但是SGD只會找到局部極小值,因為SGD解決的是一個尋找最小值的問題,GAN是一個博弈問題。
  • 為什么GAN不適合處理文本數據

  • 文本數據相比較圖片數據來說是離散的,因為對于文本來說,通常需要將一個詞映射為一個高維的向量,最終預測的輸出是一個one-hot向量,假設softmax的輸出是(0.2, 0.3, 0.1,0.2,0.15,0.05)那么變為onehot是(0,1,0,0,0,0),如果softmax輸出是(0.2, 0.25, 0.2, 0.1,0.15,0.1 ),one-hot仍然是(0, 1, 0, 0, 0, 0),所以對于生成器來說,G輸出了不同的結果但是D給出了同樣的判別結果,并不能將梯度更新信息很好的傳遞到G中去,所以D最終輸出的判別沒有意義。
  • 另外就是GAN的損失函數是JS散度,JS散度不適合衡量不想交分布之間的距離。(WGAN雖然使用wassertein距離代替了JS散度,但是在生成文本上能力還是有限,GAN在生成文本上的應用有seq-GAN,和強化學習結合的產物)
  • GAN及其改進

    GAN

    如上圖所示,生成對抗網絡會訓練并更新判別分布(即 D,藍色的虛線),更新判別器后就能將數據真實分布(黑點組成的線)從生成分布 P_g(G)(綠色實線)中判別出來。下方的水平線代表采樣域 Z,其中等距線表示 Z 中的樣本為均勻分布,上方的水平線代表真實數據 X 中的一部分。向上的箭頭表示映射 x=G(z) 如何對噪聲樣本(均勻采樣)施加一個不均勻的分布 P_g。(a)考慮在收斂點附近的對抗訓練:P_g 和 P_data 已經十分相似,D 是一個局部準確的分類器。(b)在算法內部循環中訓練 D 以從數據中判別出真實樣本,該循環最終會收斂到 D(x)=P_data(x)/(P_data(x)+P_g(x))。(c)隨后固定判別器并訓練生成器,在更新 G 之后,D 的梯度會引導 G(z)流向更可能被 D 分類為真實數據的方向。(d)經過若干次訓練后,如果 G 和 D 有足夠的復雜度,那么它們就會到達一個均衡點。這個時候 P_g=P_data,即生成器的概率密度函數等于真實數據的概率密度函數,也即生成的數據和真實數據是一樣的。在均衡點上 D 和 G 都不能得到進一步提升,并且判別器無法判斷數據到底是來自真實樣本還是偽造的數據,即 D(x)= 1/2。


    具體算法實現

    參考資料:
    機器之心GitHub項目:GAN完整理論推導與實現
    KL散度、JS散度以及交叉熵對比
    Generative Adversarial Nets(譯)

    DCGAN

    將GAN與CNN相結合,將原論文中的MLP網絡更換為CNN網絡,改善了對圖片的生成與判別效果。
    主要貢獻是:
    為GAN的訓練提供了一個很好的網絡拓撲結構。
    表明生成的特征具有向量的計算特性。
    使用的CNN結構如下

    判別器幾乎是和生成器對稱的。整個網絡沒有pooling層和上采樣層,實際上是使用了帶步長(fractional-strided)的卷積代替了上采樣,以增加訓練的穩定性。
    DCGAN能改進GAN訓練穩定的原因主要有:

    • 使用步長卷積代替上采樣層,卷積在提取圖像特征上具有很好的作用,并且使用卷積代替全連接層。
    • 生成器G和判別器D中幾乎每一層都使用batchnorm層,將特征層的輸出歸一化到一起,加速了訓練,提升了訓練的穩定性。(生成器的最后一層和判別器的第一層不加batchnorm)
    • 在判別器中使用leaky-ReLU激活函數,而不是ReLU,防止梯度稀疏,生成器中仍然采用ReLU,但是輸出層采用tanh
    • 使用adam優化器訓練,學習率推薦為0.0002

    參考資料:
    DCGAN、WGAN、WGAN-GP、LSGAN、BEGAN原理總結及對比
    DCGAN在TF上實現

    WGAN和WGAN-gp

    Wasserstein距離

    WGAN
    GAN定義的損失函數具有一定的缺陷,具體表現為:訓練不穩定,存在collapse mode情況,并且在訓練目標不明確的問題。針對這些缺陷,WGAN提出了用Wasserstein距離替代JS散度,用于計算真實樣本與生成樣本之間的差異。將判別器的作用從判斷樣本是否為真轉化為計算真實樣本與生成樣本之間Wasserstein距離,通過不斷減少這個距離可以優化生成器。Wasserstein距離也是一個明確的指示標志,表面了當前模型訓練情況,Wasserstein距離越小說明生成樣本與真實樣本越接近。此外,由于Wasserstein距離具有對稱性,還(基本上)解決了collapse mode情況。
    具體算法如下

    WGAN-gp
    WGAN的梯度裁剪的方法具有一定的弊端,會產生下圖左側情況

    容易引起梯度消失或者梯度爆炸情況,因此使用懲罰系數代替梯度裁剪。具體方法是對損失函數加入梯度懲罰項,當梯度大于1時進行懲罰,保證Lipschitz連續性限制。該懲罰項的梯度位置在真實樣本與生成樣本中的連線中隨機采樣某一點,然后計算D(x)并求梯度,最后計算與1的距離。具體形式為:

    令人拍案叫絕的Wasserstein GAN
    W-GAN系 (Wasserstein GAN、 Improved WGAN)
    WGAN在TF上實現

    LSGAN

    將GAN的損失函數更換為最小二乘損失函數,其目的與WGAN類似,即JS散度具有不對稱性和范圍(0-1),因此不能拉近真實分布和生成分布之間的距離,使用最小二乘可以將圖像的分布盡可能的接近決策邊界。LSGAN損失函數定義如下:
    minDJ(D)=minD12Ex~Pr[D(x)?a]2+12Ez~Pz[D(G(x))?b]2minGJ(G)=minG12Ez~Pz[D(G(x))?c]2\underset{D}{min}J(D)=\underset{D}{min}\frac{1}{2}E_{x\sim P_{r}}[D(x)-a]^{2}+\frac{1}{2}E_{z\sim P_{z}}[D(G(x))-b]^{2}\\ \underset{G}{min}J(G)=\underset{G}{min}\frac{1}{2}E_{z\sim P_{z}}[D(G(x))-c]^{2}Dmin?J(D)=Dmin?21?ExPr??[D(x)?a]2+21?EzPz??[D(G(x))?b]2Gmin?J(G)=Gmin?21?EzPz??[D(G(x))?c]2作者設置a=c=1,b=0。
    參考資料:GAN——LSGANs(最小二乘GAN)

    cGAN

    GAN的訓練為無監督訓練,生成的圖片具有隨機性。為了得到可控的結果,在生成器G與判別器D中均加入給定條件y。這里標簽與生成圖片進行堆疊送入判別器。

    目標函數如下:

    參考資料:CGAN論文筆記
    詳解GAN代碼之搭建并詳解CGAN代碼

    pix2pix

    在CGAN基礎上的改進。為了使生成的圖片更接近訓練圖片,加入和L1損失,其損失函數定義如下:



    網絡結構使用了U-Net結構,能夠減少Encoder-Decoder過程中對于原始信息的丟失,其原理如下:
    將判別器改變為局部判別器(Patch-D),即將圖像分為固定大小的部分送入判別器。
    優點:

  • 輸入變小,計算量小,訓練速度快。
  • 生成器G是全卷積結構,對圖像尺度沒有限制;Patch-D對圖像大小也沒有限制,這樣整個網絡對圖像大小沒有限制,增加了框架的擴展性。
  • 參考資料:Pix2Pix-基于GAN的圖像翻譯
    Image-to-Image Translation in Tensorflow

    CycleGAN

    總結

    以上是生活随笔為你收集整理的GAN学习的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。