提高GAN訓練穩定性的9大tricks

2021-03-02 我愛計算機視覺

點擊我愛計算機視覺標星,更快獲取CVML新技術

作者 | Bharath Raj

譯者 | ang010ela

編輯 | 一一

出品 | AI科技大本營

CV君註:

還有什麼是比訓練一個神經網絡更玄學的事情?那就是訓練兩個神經網絡!比如GAN。

本文來自Medium,由AI科技大本營整理翻譯,探討了訓練GAN模型的實用技巧,歡迎收藏。

儘管 GAN 領域的進步令人印象深刻,但其在應用過程中仍然存在一些困難。本文梳理了 GAN 在應用過程中存在的一些難題,並提出了最新的解決方法。

使用 GAN 的缺陷

眾所周知,GAN 是由 Generator 生成網絡和 Discriminator 判別網絡組成的。


1. Mode collapse(模型崩潰)


註:Mode collapse 是指 GAN 生成的樣本單一,其認為滿足某一分布的結果為 true,其他為 False,導致以上結果。


自然數據分布是非常複雜,且是多峰值的(multimodal)。也就是說數據分布有很多的峰值(peak)或眾數(mode)。每個 mode 都表示相似數據樣本的聚集,但與其他 mode 是不同的。


在 mode collapse 過程中,生成網絡 G 會生成屬於有限集 mode 的樣本。當 G 認為可以在單個 mode 上欺騙判別網絡 D 時,G 就會生成該 mode 外的樣本。     


上圖表示 GAN 的輸出沒有 mode collapse. 下圖則出現了 mode collapse。


判別網絡最後會判別來自該 mode 的樣本是假的。最後,生成網絡 G 會簡單地鎖定到另一個 mode。該循環會無限進行,就會限制生成樣本的多樣性。


2. Convergence(收斂)


GAN 訓練過程中遇到的一個問題是什麼時候停止訓練?因為判別網絡 D 損失降級會改善生成網絡 G 的損失(反之亦然),因此無法根據損失函數的值來判斷收斂,如下圖所示:


典型的GAN損失函數圖。注意該如何從這個圖中解釋收斂性。


3. Quality(質量)


與前面提到的收斂問題一樣,很難量化地判斷生成網絡 G 什麼時候會生成高質量的樣本。另外,在損失函數中加入感知正則化則在一定程度上可緩解該問題。


4. Metrics(度量)


GAN 的目標函數解釋了生成網絡 G 或 判別網絡 D 如何根據組件來執行,但它卻不表示輸出的質量和多樣性。因此,需要許多不同的度量指標來進行衡量。

改善性能的技術

下面總結了一些可以使 GAN 更加穩定使用的技術。


1. Alternative Loss Functions (替代損失函數)


修復 GAN 缺陷的最流行的補丁是  Wasserstein GAN (https://arxiv.org/pdf/1701.07875.pdf)。該 GAN 用 Earth Mover distance ( Wasserstein-1 distance 或 EM distance) 來替換傳統 GAN 的 Jensen Shannon divergence ( J-S 散度) 。EM 距離的原始形式很難理解,因此使用了雙重形式。這需要判別網絡是 1-Lipschitz,通過修改判別網絡的權重來維護。


使用 Earth Mover distance 的優勢在於即使真實的生成數據分布是不相交的,它也是連續的。同時,在生成的圖像質量和損失值之間存在一定關係。使用 Earth Mover distance 的劣勢在於對於每個生成模型 G  都要執行許多判別網絡 D 的更新。而且,研究人員認為權重修改是確保 1-Lipschitz 限制的極端方式。


左圖中 earth mover distance 是連續的, 即便其分布並不連續, 這不同於優圖中的 the Jensen Shannon divergence。


另一個解決方案是使用均方損失( mean squared loss )替代對數損失( log loss )。LSGAN (https://arxiv.org/abs/1611.04076)的作者認為傳統 GAN 損失函數並不會使收集的數據分布接近於真實數據分布。


原來 GAN  損失函數中的對數損失並不影響生成數據與決策邊界(decision boundary)的距離。另一方面,LSGAN 也會對距離決策邊界較遠的樣本進行懲罰,使生成的數據分布與真實數據分布更加靠近,這是通過將均方損失替換為對數損失來完成的。


2. Two Timescale Update Rule (TTUR)


在 TTUR 方法中,研究人員對判別網絡 D 和生成網絡 G 使用不同的學習速度。低速更新規則用於生成網絡 G ,判別網絡 D使用 高速更新規則。使用 TTUR 方法,研究人員可以讓生成網絡 G 和判別網絡 D 以 1:1 的速度更新。 SAGAN (https://arxiv.org/abs/1805.08318) 就使用了 TTUR 方法。


3. Gradient Penalty (梯度懲罰)


論文Improved Training of WGANs(https://arxiv.org/abs/1704.00028)中,作者稱權重修改會導致優化問題。權重修改會迫使神經網絡學習學習更簡單的相似(simpler approximations)達到最優數據分布,導致結果質量不高。同時如果 WGAN 超參數設置不合理,權重修改可能會出現梯度消失或梯度爆炸的問題,論文作者在損失函數中加入了一個簡單的梯度懲罰機制以緩解該問題。


加入 Gradient Penalty 作為正則化器


DRAGAN (https://arxiv.org/abs/1705.07215)的作者稱,當 GAN 的博弈達到一個局部平衡態(local equilibrium state),就會出現 mode collapse 的問題。而且判別網絡 D 在這種狀態下產生的梯度是非常陡(sharp)的。一般來說,使用梯度懲罰機制可以幫助避免這種狀態的產生,極大增強 GAN 的穩定性,儘可能減少 mode collapse 問題的產生。


4. Spectral Normalization(譜歸一化)


Spectral normalization 是用在判別網絡 D 來增強訓練過程的權重正態化技術 (weight normalization technique),可以確保判別網絡 D 是 K-Lipschitz 連續的。 SAGAN (https://arxiv.org/abs/1805.08318)這樣的實現也在判別網絡 D 上使用了譜正則化。而且該方法在計算上要比梯度懲罰方法更加高效。


5. Unrolling and Packing (展開和打包)


文章 Mode collapse in GANs(http://aiden.nibali.org/blog/2017-01-18-mode-collapse-gans/)中提到一種預防 mode hopping 的方法就是在更新參數時進行預期對抗(anticipate counterplay)。展開的 GAN ( Unrolled GANs )可以使用生成網絡 G 欺騙判別網絡 D,然後判別網絡 D 就有機會進行響應。


另一種預防 mode collapse 的方式就是把多個屬於同一類的樣本進行打包,然後傳遞給判別網絡 D 。PacGAN (https://arxiv.org/abs/1712.04086)就融入了該方法,並證明可以減少 mode collapse 的發生。


6. 多個 GAN


一個 GAN 可能不足以有效地處理任務,因此研究人員提出使用多個連續的 GAN ,每個 GAN 解決任務中的一些簡單問題。比如,FashionGAN(https://www.cs.toronto.edu/~urtasun/publications/zhu_etal_iccv17.pdf)就使用 2 個 GAN 來執行圖像定位翻譯。

FashionGAN 使用兩個 GANs 進行圖像定位翻譯。


因此,可以讓 GAN 慢慢地解決更難的問題。比如 Progressive GANs (ProGANs,https://arxiv.org/abs/1710.10196) 就可以生成解析度極高的高質量圖像。


7. Relativistic GANs(相對生成對抗網絡)


傳統的 GAN 會測量生成數據為真的可能性。Relativistic GANs 則會測量生成數據「逼真」的可能性。研究人員可以使用相對距離測量方法(appropriate distance measure)來測量相對真實性(relative realism),相關論文連結:https://arxiv.org/abs/1807.00734。

圖 A 表示 JS 散度的最優解,圖 B 表示使用標準 GAN 損失時判別網絡 D 的輸出,圖 C 表示輸出曲線的實際圖。


在論文中,作者提到判別網絡 D 達到最優狀態時,D 的輸出應該聚集到 0.5。但傳統的 GAN 訓練算法會讓判別網絡 D 對圖像輸出「真實」(real,1)的可能性,這會限制判別網絡 D 達到最優性能。不過這種方法可以很好地解決這個問題,並得到不錯的結果。

經過 5000 次迭代後,標準 GAN (左)和相對 GAN (右)的輸出。


8. Self Attention Mechanism(自注意力機制)


Self Attention GANs(https://arxiv.org/abs/1805.08318)作者稱用於生成圖像的卷積會關注本地傳播的信息。也就是說,由於限制性接收域這會錯過廣泛傳播關係。

將 attention map (在黃色框中計算)添加到標準卷積操作中。


Self-Attention Generative Adversarial Network 允許圖像生成任務中使用注意力驅動的、長距依賴的模型。自注意力機制是對正常卷積操作的補充,全局信息(長距依賴)會用於生成更高質量的圖像,而用來忽略注意力機制的神經網絡會考慮注意力機制和正常的卷積。(相關論文連結:https://arxiv.org/pdf/1805.08318.pdf)。

使用紅點標記的可視化 attention map。


9. 其他技術


其他可以用來改善 GAN 訓練過程的技術包括:

更多GAN技術


https://github.com/soumith/ganhacks。


原文連結:

https://medium.com/beyondminds/advances-in-generative-adversarial-networks-7bad57028032

加群交流

關注生成對抗網絡技術,歡迎加入52CV-GAN專業交流群,掃碼添加CV君拉你入群,

(請務必註明:GAN)

喜歡在QQ交流的童鞋,可以加52CV官方QQ群:702781905。

(不會時時在線,如果沒能及時通過驗證還請見諒)

更多CV技術乾貨請瀏覽:

"我愛計算機視覺"乾貨集錦分類匯總(2019年1月20日)

長按關注我愛計算機視覺

相關焦點

  • 訓練GAN,你應該知道的二三事
    眾所周知,GANs 的訓練尤其困難,筆者自從跳入了 GANs 這個領域(坑),就一直在跟如何訓練 GANs 做「對抗訓練」,受啟發於 ganhacks,並結合自己的經驗記錄總結了一些常用的訓練 GANs 的方法,以備後用。(本篇不是 GANs 的入門掃盲篇,初學者慎入。)
  • 穩定性訓練VS靈活性訓練:6個方法提高
    顯然穩定性是硬傷提高身體穩定性對於提升你個人的能力來說有著非常大的幫助,所以,如果你之前也和多數人一樣忽略了身體穩定性方面的鍛鍊的話,這裡我們也是給大家關於健身提高靈活性穩定性的6個忠告,希望各位能夠牢記。
  • NVIDIA新作解讀:用GAN生成前所未有的高清圖像(附PyTorch復現) | PaperDaily #15
    從行文可以看出文章是臨時趕出來的,畢竟這麼大的實驗,用 P100 都要跑 20 天,更不用說調參時間了,不過人家在 NVIDIA,不缺卡。作者放出了基於 Lasagna 的代碼,今天我也會簡單解讀一下代碼。另外,我也在用 PyTorch 做復現。 在 PG-GAN 出來以前,訓練高解析度圖像生成的 GAN 方法主要就是 LAPGAN[2] 和 BEGAN[6]。
  • 【龍江體育】《體育鍛鍊國家標準》功能訓練提高身體穩定性
    人民網哈爾濱5月14日電(焦洋)為了公眾更標準、更專業地進行健身鍛鍊,黑龍江省體育局推出《龍江體育》系列視頻,邀請了黑龍江冰雪體育職業學院健身指導、運動康復專業骨幹教師張森,按照國家標準,結合日常專業功能性訓練,針對每項運動怎麼做、注意什麼等大家關注的問題,進行詳細講解。
  • 一周論文 GAN(Generative Adversarial Nets)研究進展
    現在我們有深度網絡結構可以表達這樣一個複雜的函數(deep generative model),但是訓練過程成為了關鍵。基於sampling的訓練過程顯然不是很高效的。因此,如何設計模型以便利用backpropagation來訓練網絡成為了一個重要的目標。
  • 別人家的高中生:入大學前,Ta詳細梳理了GAN的發展脈絡
    論文地址:https://arxiv.org/abs/1511.06434代碼實現地址:https://github.com/floydhub/dcgan其他資源:https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0CGAN: 條件生成對抗網絡原始的
  • 跑步腳踝力量訓練6個動作提高下肢穩定性和靈活性降低受傷機率
    隨著全民健身的開啟,越來越多人開始加入健身跑步運動中,跑步不但可以增強全身的運動能力,同時也是減脂最好的訓練項目,如果你想減脂,可以先從跑步開始。當然任何事都有兩面,跑步雖然對身體有很大的好處,但是對身體同樣有副作用,比如跑步對膝蓋,腳踝和腿部關節,滑膜的損傷也是不容忽視的,所以跑步一定要科學,絕對不可盲目,跑步前一定要做好一且準備,比如跑鞋,護膝,緊身褲都要提前準備妥當,最重要的就是跑到的選著一定要選著露面比較平整的跑步路線,還有腿部關節穩定性和靈活性的鍛鍊,這是一個跑者必要放在第一位重視的,如果下半身力量不夠穩定
  • GAN快速入門資料推薦:17種變體的Keras開原始碼,附相關論文
    在論文中,研究人員給出了用MNIST和多倫多人臉數據集 (TFD)訓練的模型所生成的樣本。原版GAN不適用於離散數據,而BGAN用來自鑑別器的估計差異度量來計算生成樣本的重要性權重,為訓練生成器來提供策略梯度,因此可以用離散數據進行訓練。BGAN裡生成樣本的重要性權重和鑑別器的判定邊界緊密相關,因此叫做「尋找邊界的GAN」。
  • TF - GAN入門:TensorFlow 2.0 的輕量級 GAN 庫
    2017 年,谷歌推出了用於訓練和評估 生成對抗網絡 (Generative Adversarial Networks, GAN) 的輕量級庫 TF-GAN。自那時起,TF-GAN 便在大量極具影響力的論文和項目中被廣泛應用。
  • 輕鬆構建 PyTorch 生成對抗網絡(GAN)
    在訓練迭代的過程中,兩個網絡持續地進化和對抗,直到達到平衡狀態(參考:納什均衡),判別網絡無法再識別『假』數據,訓練結束。2016年,Alec Radford 等發表的論文 《深度卷積生成對抗網絡》(DCGAN)中,開創性地將卷積神經網絡應用到生成對抗網絡的模型算法設計當中,替代了全連結層,提高了圖片場景裡訓練的穩定性。
  • 暴力解剖GAN!MIT、港中文團隊GANpaint,一筆成畫不是夢
    先奉上傳送門:http://gandissect.res.ibm.com/ganpaint.html?生成對抗網絡(GANs)最近在許多實際應用中取得了令人印象深刻的結果,並且隨著樣本質量和訓練穩定性的提高,出現了許多GAN的變體。然而,對GAN的可視化和理解在很大程度上是缺失的。
  • 跑步訓練:下肢力量與穩定性,缺一不可
    其中非常重要的就是下肢的穩定性。膝關節是人體非常重要的一個關節,無論是走跑跳都離不開膝關節,膝關節也是一個承重的關節,因此長時間高強度的運動可能會對我們的膝關節造成損傷,導致膝關節周圍的軟組織韌帶失去其原有的穩固的作用,那麼我們就需要通過加強膝關節周圍的肌肉來重新穩固我們的膝關節了,接下來讓我們來看看有哪些動作訓練我們的穩定性吧。
  • 資源 | NIPS 2017 Spotlight論文Bayesian GAN的TensorFlow實現
    bayesian_gan_hmc.py 具備以下訓練選項。MNIST、CIFAR10、CELEBA、SVHNbayesian_gan_hmc 腳本允許在標準和自定義數據集上訓練模型。下面,我們將介紹如何使用該腳本。
  • Platypus plays tricks
    Platypus plays tricks       Platypus plays tricks       Before the dawn of time, all the animals looked the same.
  • 能生成Deepfake也能診斷癌症,GAN與惡的距離
    所有的這四個神經網絡都是以通常的GAN方式進行訓練,直到我們留下了強大的生成器GG和FF,它們可以很好地執行圖像到圖像的轉換任務,乃至愚弄了DYDY 和DXDX。這種類型的對抗性損失聽起來是個好主意,但這還不夠。為了進一步提高性能,CycleGAN使用另一個度量標準,循環一致性損失。
  • 5種最佳的下背部訓練,提高穩定性和力量!解決腰疼打造鋼鐵背部
    ,做好訓練的準備,然後再進行更劇烈的正式訓練。鳥狗式是出色的腰背耐力運動,可改善脊柱穩定性。核心和背部肌肉缺乏耐力有時可能是腰背痛的原因。它還可以幫助人們區分髖關節伸展和下背部過度伸展。如何做鳥狗 :(1)用六點姿勢跪在地板上(手,膝蓋和腳趾在地面上),膝蓋在臀部下方,手直接在肩膀下方。
  • 韓松、朱俊彥等人提出GAN壓縮法:算力消耗不到1/9,現已開源
    項目連結:https://github.com/mit-han-lab/gan-compression GAN 壓縮後的具體性能如何? 然而,近來推出的一些 cGAN 在計算強度上比當前識別卷積神經網絡(CNN)大 1 至 2 個量級。舉例而言,GanGAN 每張圖像消耗 281G Macs,而 MobileNet-v3 僅需 0.44G Macs,這就導致前者很難用於交互式部署。
  • 從39個kaggle競賽中總結出來的圖像分割的Tips和Tricks
    想像一下,如果你能得到所有的tips和tricks,你需要去參加一個Kaggle比賽。使用loss-less增強來進行泛化,防止有用的圖像信息出現大的loss。應用channel shuffling。基於類別的頻率進行數據增強。使用高斯噪聲。對3D圖像使用lossless重排來進行數據增強。0到45度隨機旋轉。從0.8到1.2隨機縮放。亮度變換。
  • 【GAN大盤點】十款神奇的GAN,總有一個適合你!
    具體案例:因此relativism不僅能夠提高GAN的穩定性,還能輸出更高質量的數據樣本。為了解決訓練不穩定的問題和不良競爭問題,提出兩個trick:判別器加入一個minibatch stddev層、對生成器和判別器進行歸一化。具體案例:該方法加速了訓練速度,並且提高了穩定性。
  • You can't teach an old dog new tricks這句俗語怎麼翻譯合適?
    You can't teach an old dog new tricks的意思是老狗變不出新把戲。例如:My father will never change:you can't teach an old dog new tricks.