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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

训练GAN的技巧

發(fā)布時(shí)間:2025/3/17 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 训练GAN的技巧 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GAN, 作為一種非常厲害的生成模型, 在近年來(lái)得到了廣泛的應(yīng)用. Soumith, PyTorch之父, 畢業(yè)于紐約大學(xué)的Facebook的VP, 在2015年發(fā)明了DCGAN: Deep Convolutional GAN. 它顯式的使用卷積和轉(zhuǎn)置卷積在判別器和生成器中使用. 他對(duì)GAN的理解相對(duì)深入, 特地總結(jié)了關(guān)于訓(xùn)練GAN的一些技巧和方式, 因?yàn)椴煌谝话闳蝿?wù), 像設(shè)置優(yōu)化器, 計(jì)算loss以及初始化模型權(quán)重等tips, 這些對(duì)于GAN網(wǎng)絡(luò)能否收斂可以說(shuō)至關(guān)重要. 現(xiàn)在特此翻譯這篇文章, 以饗讀者.

How to Train a GAN? Tips and tricks to make GANs work

隨著人們對(duì)生成對(duì)抗網(wǎng)絡(luò)(GANs)的研究進(jìn)一步深入, 繼續(xù)提高GAN的基本穩(wěn)定性是非常重要的一環(huán)。我們使用了一系列技巧來(lái)訓(xùn)練它們,使它們保持穩(wěn)定。

作者:
Soumith Chintala, Emily Denton, Martin Arjovsky, Michael Mathieu.

廢話不多說(shuō), 直接上干貨:

1. Normalize the inputs( 規(guī)則化輸入數(shù)據(jù))

  • 將圖像的數(shù)值范圍限制在 [-1, 1].
  • 將Tanh層作為生成器最后輸出層.

2. A modified loss function(修改Loss函數(shù))

在GAN的論文中, 生成器G的目標(biāo)是使得目標(biāo)函數(shù)log(1?D)log(1?D)log(1?D)log(1?D)log (1-D)log(1?D)log(1?D)log(1?D)log(1?D)最小, 但是實(shí)際寫(xiě)代碼中, 目標(biāo)是讓log(D)log(D)log(D)log(D)log(D)log(D)log(D)log(D)log(D)最大. 這是因?yàn)榍懊娴氖阶佑刑荻认?wèn)題. Goodfellow et. al (2014)

此外, 訓(xùn)練生成器的時(shí)候, 還可以將數(shù)據(jù)對(duì)應(yīng)的**標(biāo)簽(label)**進(jìn)行翻轉(zhuǎn): 即real = fake, fake = real來(lái)進(jìn)行訓(xùn)練. 其目的是增強(qiáng)生成器的泛化能力(通常作為在生成器能力很強(qiáng)的時(shí)候fine-tune的策略.)

3. Use a spherical Z(使用球面分布)

通常的GAN中,包括2019年最新的styleGAN,它們的latent vector z都是通過(guò)正態(tài)分布進(jìn)行采樣得到的(根據(jù)情況,可能是非標(biāo)準(zhǔn)正態(tài)分布)。

本文推薦對(duì)高斯分布(gaussian distribution)進(jìn)行采樣而得到 z。

此外, Soumith還指出需要注意以下2點(diǎn):

  • When doing interpolations, do the interpolation via a great circle, rather than a straight line from point A to point B.
  • Tom White’s Sampling Generative Networks ref code https://github.com/dribnet/plat has more details.

4. Batch Norm(批歸一化)

  • 如果要用BN的話,只能在all-fake或all-real的mini-batch中使用。
  • 現(xiàn)在流行使用PixelNorm和InstanceNorm[3](關(guān)于其PyTorch1.0.1的實(shí)現(xiàn),在我復(fù)現(xiàn)StyleGAN的代碼中有,歡迎參考~)

5. Avoid Sparse Gradients: ReLU, MaxPool(避免稀疏梯度)

如果你使用了ReLU或MaxPooling,那么這樣的GAN通常穩(wěn)定性較差(由于梯度的稀疏性)。

  • LeakyReLU = good (in both G and D) 也是目前幾乎所有GAN的標(biāo)配。
  • 下采樣時(shí),建議使用Average Pooling或者Conv2d + stride的方式。
  • 上采樣通常使用PixelShuffle[4]和ConvTranspose2d + stride。

6. Use Soft and Noisy Labels(使用光滑和帶噪聲的標(biāo)簽)

  • 對(duì)標(biāo)簽進(jìn)行平滑, i.e. if you have two target labels: Real=1 and Fake=0, then for each incoming sample, if it is real, then replace the label with a random number between 0.7 and 1.2, and if it is a fake sample, replace it with 0.0 and 0.3 (for example). Salimans et. al. 2016

  • 在訓(xùn)練鑒別器的時(shí)候,偶爾翻轉(zhuǎn)label,即fake->real, real->fake。

7. DCGAN / Hybrid Models(DCGAN和混合模型)

這里,Soumith開(kāi)始推銷自己的工作了哈哈,他認(rèn)為DCGAN在任何場(chǎng)景都能很好的工作。
當(dāng)然,如果你愿意的話,也可以使用Hybrid的模型,比如 KL + GAN 或 VAE + GAN。

8. Use stability tricks from RL(使用增強(qiáng)學(xué)習(xí)中提升穩(wěn)定性的策略)

  • 經(jīng)驗(yàn)重播(Experience Replay)
Keep a replay buffer of past generations and occassionally show them Keep checkpoints from the past of G and D and occassionaly swap them out for a few iterations
  • 所有穩(wěn)定性技巧都適用于深度確定性策略梯度。
  • 查閱 Pfau & Vinyals (2016)發(fā)表的資料。

9. Use the ADAM Optimizer(使用ADAM優(yōu)化器)

Soumith認(rèn)為Adam很吊,一個(gè)就夠了。大多數(shù)情況,生成器和判別器都用ADAM就可以,或者,你也可以使用SGD來(lái)優(yōu)化判別器。

10. Track failures early(及早發(fā)現(xiàn)失敗)

  • ① 當(dāng)判別器的loss一直接近0或者為0的時(shí)候,那就說(shuō)明這次訓(xùn)練是有問(wèn)題的,應(yīng)該及時(shí)停掉,檢查模型和超參數(shù)的設(shè)置。

  • ② 檢查梯度的范數(shù),如果超過(guò)100,就會(huì)出錯(cuò)。

  • ③ 當(dāng)模型正常訓(xùn)練時(shí),判別器D的loss方差較小,并且隨著時(shí)間的推移而下降,或者方差較大且呈峰值

  • ④ 如果生成器G的loss穩(wěn)步下降,那可能意味著在用垃圾來(lái)迷糊判別器D(馬丁說(shuō))。

11. Dont balance loss via statistics (unless you have a good reason to)(不要通過(guò)統(tǒng)計(jì)數(shù)字來(lái)平衡損失(除非你有充分的理由))

不要通過(guò)設(shè)計(jì)通過(guò)判斷l(xiāng)oss是否達(dá)到我們預(yù)設(shè)的閾值來(lái)進(jìn)行觸發(fā)訓(xùn)練。Soumith他們已經(jīng)試了很多了,不好使。如果,你一定要這么做,那么要有自己的方法論,而不能憑直覺(jué)。

while lossD > A:train D while lossG > B:train G

12. If you have labels, use them (如果有標(biāo)簽,那么使用它)

如果你有標(biāo)簽可用,訓(xùn)練鑒別器D分類樣本: 輔助GANs。

13. Add noise to inputs, decay over time (對(duì)輸入加入噪聲)

這個(gè)策略在18,19年Nvidia的大神kerras的論文中都體現(xiàn)的淋漓盡致:

  • 對(duì)喂入判別器的輸入加入人為噪聲。 (Arjovsky et. al., Huszar, 2016)
    http://www.inference.vc/instance-noise-a-trick-for-stabilising-gan-training/
    https://openreview.net/forum?id=Hk4_qw5xe
  • 對(duì)生成器G的每層都加入高斯噪聲。 (Zhao et. al. EBGAN)
    Improved GANs: OpenAI code also has it (commented out)

14. [notsure] Train discriminator more (sometimes) (使用多個(gè)判別器)

  • 對(duì)數(shù)據(jù)噪聲比較大的情況適用(ECCV2018 MMAN做Human parsing的一篇文章)。
  • 當(dāng)難以確定生成器和判別器迭代策略的時(shí)候。

15. [notsure] Batch Discrimination (批量判別?)

  • 將結(jié)果混合?

16: Discrete variables in Conditional GANs(CGAN中的離散變量)

  • 使用 Embedding 層。
  • 為圖像增加額外通道。
  • 保持較低的嵌入維數(shù),通過(guò)上采樣以匹配圖像通道大小。

17. Use Dropouts in G in both train and test phase (在生成器中使用Dropout)

  • 以Dropout的形式模擬提供噪聲 (50%)。
  • 無(wú)論是訓(xùn)練還是推理階段,都在生成器G中的某幾層加入Dropout機(jī)制[5]。

參考資料

[1] Soumith: How to Train a GAN? Tips and tricks to make GANs work
[2] Tom White: Sampling Generative Networks
[3] 基于PyTorch1.x復(fù)現(xiàn)的styleGAN
[4] PixelShuffle
[5] https://arxiv.org/pdf/1611.07004v1.pdf
[6] https://blog.csdn.net/g11d111/article/details/89100833

總結(jié)

以上是生活随笔為你收集整理的训练GAN的技巧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。