0
雷鋒網(wǎng) AI 研習社按:本文為雷鋒網(wǎng)字幕組編譯的技術(shù)博客,原標題 GAN?—?Ways to improve GAN performance,作者為 Jonathan Hui 。
翻譯 | 姚秀清 郭蘊哲 校對 | 吳桐 整理 | 孔令雙
與其他深度網(wǎng)絡相比,GAN 模型在以下方面可能會受到嚴重影響。
不收斂:模型永遠不會收斂,更糟糕的是它們變得不穩(wěn)定。
模式崩潰:生成器生成單個或有限模式。
慢速訓練:訓練生成器的梯度會消失。
作為 GAN 系列的一部分,本文探討了如何改進 GAN 的方法。 尤其在如下方面,
更改成本函數(shù)以獲得更好的優(yōu)化目標。
在成本函數(shù)中添加額外的懲罰以強制執(zhí)行約束。
避免過度自信和過度擬合。
更好的優(yōu)化模型的方法。
添加標簽。
生成器試圖找到最好的圖像來欺騙鑒別器。當兩個網(wǎng)絡相互抵抗時,“最佳“圖像會不斷變化。 然而,優(yōu)化可能變得過于貪婪,并使其成為永無止境的貓捉老鼠游戲。這是模型不收斂且模式崩潰的場景之一。
特征匹配改變了生成器的成本函數(shù),用來最小化真實圖像的特征與生成圖像之間的統(tǒng)計差異,即,它將目標從擊敗對手擴展到真實圖像中的特征匹配。 我們使用圖像特征函數(shù) f(x) 對真實圖像和生成圖像的均值間的L2范數(shù)距離來懲罰生成器。
其中 f(x) 是鑒別器立即層的輸出,用于提取圖像特征。
每個批次計算的實際圖像特征的平均值,都會波動。這對于減輕模式崩潰來說可能是個好消息。它引入了隨機性,使得鑒別器更難以過擬合。
當 GAN 模型在訓練期間不穩(wěn)定時,特征匹配是有效的。
當模式坍塌時,創(chuàng)建的所有圖像看起來都相似。為了緩解這個問題,我們將不同批次的實際圖像和生成的圖像分別送給鑒別器,并計算圖像 x 與同一批次中其余圖像的相似度。 我們在鑒別器的一個密集層中附加相似度 o(x) ,來確定該圖像是真實的還是生成的。
如果模式開始崩潰,則生成的圖像的相似性增加。鑒別器可以使用該分數(shù)來檢測生成的圖像。這促使生成器生成具有更接近真實圖像的多樣性的圖像。
圖像 xi 與同一批次中的其他圖像之間的相似度 o(xi) 是通過一個變換矩陣 T 計算得到的。如下所示,xi 是輸入圖像,xj 是同一批次中的其余圖像。
方程式有點難以追蹤,但概念非常簡單。(讀者可以選擇直接跳到下一部分。)我們使用變換矩陣 T 將特征 xi 轉(zhuǎn)換為 Mi , 一個 B×C 的矩陣。
我們使用 L1 范數(shù)和下面的等式導出圖像 i 和 j 之間的相似度 c(xi, xj) 。
圖像 xi 與批次中其余圖像之間的相似度 o(xi) 為
這里是回顧:
引用自論文“ Improved Techniques for Training GANs ”
微批次鑒別使我們能夠非??焖俚厣梢曈X上吸引人的樣本,在這方面它優(yōu)于特征匹配。
深度網(wǎng)絡可能會過自信。 例如,它使用很少的特征來對對象進行分類。 深度學習使用正則化和 Dropout 來緩解問題。
在 GAN 中,我們不希望模型過擬合,尤其是在數(shù)據(jù)噪聲大時。如果鑒別器過分依賴于某一小組特征來檢測真實圖像,則生成器可能迅速模仿這些特征以擊敗鑒別器。在 GAN 中,過度自信的負面作用嚴重,因為鑒別器很容易成為生成器利用的目標。為了避免這個問題,當任何真實圖像的預測超過 0.9(D(實際圖像)> 0.9)時,我們會對鑒別器進行懲罰。 這是通過將目標標簽值設置為 0.9 而不是 1.0 來完成的。 這里是偽代碼:
p = tf.placeholder(tf.float32, shape=[None, 10])
# Use 0.9 instead of 1.0.
feed_dict = {
p: [[0, 0, 0, 0.9, 0, 0, 0, 0, 0, 0]] # Image with label "3"
}
# logits_real_image is the logits calculated by
# the discriminator for real images.
d_real_loss = tf.nn.sigmoid_cross_entropy_with_logits(
labels=p, logits=logits_real_image)
在歷史平均中,我們跟蹤最后 t 個模型的模型參數(shù)。 或者,如果我們需要保留一長串模型,我們會更新模型參數(shù)的運行平均值。
我們?yōu)槌杀竞瘮?shù)添加了如下的一個 L2 成本,來懲罰不同于歷史平均值的模型。
對于具有非凸對象函數(shù)的 GAN,歷史平均可以迫使模型參數(shù)停止圍繞平衡點兜圈子,從而令其收斂。
為了擊敗生成器當前產(chǎn)生的內(nèi)容,模型優(yōu)化可能變得過于貪婪。為了解決這個問題,經(jīng)驗回放維護了過去優(yōu)化迭代中最新生成的圖像。我們不僅僅使用當前生成的圖像去擬合模型,而且還為鑒別器提供了所有最近生成的圖像。因此,鑒別器不會針對生成器某一特定時間段生成的實例進行過度擬合。
許多數(shù)據(jù)集都帶有樣本對象類型的標簽。訓練 GAN 已經(jīng)很難了。因此,對于引導 GAN 的訓練來說,任何額外的幫助都可以大大提高其性能。添加標簽作為潛在空間 z 的一部分, 有助于 GAN 的訓練。如下所示 , CGAN 中采用的數(shù)據(jù)流就充分利用了樣本的標簽。
成本函數(shù)重要嗎? 它當然重要,否則那么多研究工作的心血都將是一種浪費。但是如果你聽說過 2017 年 Google Brain 的一篇論文,你肯定會有疑慮。 但努力提升圖像質(zhì)量仍然是首要任務。因此在我們對成本函數(shù)的作用有一個明確的認識之前,我們很有可能會看到研究人員仍在努力嘗試著不同的成本函數(shù)。
下圖列出了一些常見 GAN 模型的成本函數(shù)。
表格改動自這里:https://github.com/hwalsuklee/tensorflow-generative-model-collections
我們決定不在本文中詳細介紹這些成本函數(shù)。實際上,如果您想了解更多信息,我們強烈建議您細致地閱讀這些文章中的至少一篇:WGAN/WGAN-GP,EBGAN / BEGAN,LSGAN,RGAN 和 RaGAN 。 在本文的最后,我們還列出了一篇更詳細地研究成本函數(shù)的文章。 成本函數(shù)是 GAN 的一個主要研究領(lǐng)域,我們鼓勵您稍后閱讀該文章。
以下是某些數(shù)據(jù)集中的一些 FID 分數(shù)(越低越好)。這是一個參考點,但需要注意的是,現(xiàn)在對于究竟哪些成本函數(shù)表現(xiàn)最佳下結(jié)論還為時尚早。 實際上,目前還沒有哪一個成本函數(shù)在所有不同數(shù)據(jù)集中都具有最佳表現(xiàn)。
但缺乏好的超參數(shù)的模型不可能表現(xiàn)良好,而調(diào)參需要大量時間。所以在隨機測試不同的成本函數(shù)之前,請耐心地優(yōu)化超參數(shù)。
將圖像的像素值轉(zhuǎn)換到 -1 到 1 之間。在生成模型的最后一層使用 tanh 作為激活函數(shù)。
在實驗中使用高斯分布對 z 取樣。
Batch normalization 可以讓訓練結(jié)果更穩(wěn)定。
上采樣時使用 PixelShuffle 和反卷積。
下采樣時不要使用最大池化而使用卷積步長。
Adam 優(yōu)化通常比別的優(yōu)化方法表現(xiàn)的更好。
圖像交給判別模型之前添加一些噪聲,不管是真實的圖片還是生成的。
GAN 模型的動態(tài)特性尚未得到很好的解釋。所以這些技巧只是建議,其優(yōu)化結(jié)果如何可能存在差異。例如,提出 LSGAN 的文章指出 RMSProp 在他們的實驗中表現(xiàn)更加穩(wěn)定。這種情況非常稀少,但是也表明了提出普遍性的建議是非常困難的。
Batch normalization 已經(jīng)成為很多深度神經(jīng)網(wǎng)絡設計中的事實標準。Batch normalization 的均值和方差來自當前的 minibatch 。然而,它會在樣本之間創(chuàng)建依賴關(guān)系,導致生成的圖像不是彼此獨立的。
下圖顯示了在使用同一個 batch 的數(shù)據(jù)訓練時,生成的圖像有著相同的色調(diào)。
上排圖像是橙色色調(diào),第二排圖像是綠色色調(diào)。 原文鏈接:https://arxiv.org/pdf/1701.00160v3.pdf
本來, 我們對噪聲 z 是從隨機分布中采樣,為我們提供獨立樣本。然而,這種 batch normalization 造成的偏見卻抵消了 z 的隨機性。
Virtual batch normalization (VBN) 是在訓練前從一個 reference batch 中采樣。在前向傳播中,我們提前選擇一個 reference batch 為 batch normalization 去計算 normalization 的參數(shù)( μ 和 σ )。 然而,我們在整個訓練過程中使用同一個 batch,會讓模型過擬合。為了解決這個問題,我們將 reference batch 與當前 batch 相結(jié)合起來計算參數(shù)。
用于初始化模型參數(shù)的隨機種子會影響 GAN 的性能。 如下表所示,測量GAN性能的FID分數(shù)在50次獨立運行(訓練)中有所不同。但是波動的范圍不大,并且可以在后續(xù)的微調(diào)中完成。
原文
一篇來自 Google Brain 的論文指出 LSGAN 偶爾會在某些數(shù)據(jù)集中失敗或崩潰,并且需要使用另一個隨機種子重新啟動訓練。
DGCAN 強力建議在網(wǎng)絡設計中加入 batch normalization 。 Batch normalization 的使用也成為許多深度網(wǎng)絡模型的一般做法。 但是,也會有例外。 下圖演示了 batch normalization 對不同數(shù)據(jù)集的影響。 y 軸是 FID 得分,越低越好。 正如 WGAN-GP 論文所建議的那樣,當使用成本函數(shù) WGAN-GP 時,不應該使用 batch normalization 。 我們建議讀者檢查 batch normalization 上使用的成本函數(shù)和相應的FID性能,并通過實驗驗證來設置。
對原文有所修改
模式崩潰可能并不全是壞事。 實際上,當模式崩潰時,圖像質(zhì)量通常會提高。 實際上,我們可以會為每種模式收集最佳模型,并使用它們來重建不同的圖像模式。
原文
判別模型和生成模型總是處于拉鋸戰(zhàn)中以相互削弱。生成模型積極創(chuàng)造最好的圖像來擊敗判別模型。 但如果判別模型響應緩慢,生成的圖像將收斂,模式開始崩潰。 相反,當判別模型表現(xiàn)良好時,原始生成模型的成本函數(shù)的梯度消失,學習速度慢。 我們可以將注意力轉(zhuǎn)向平衡生成模型和判別模型之間的損失,以便在訓練 GAN 中找到最佳位置。 不幸的是,解決方案似乎難以捉摸。 在判別模型和生成模型之間的交替梯度下降中,定義它們之間的靜態(tài)比率似乎是有效的,但也有很多人懷疑它的效果。 如果說已經(jīng)有人做過這件事的話,那就是研究人員每訓練生成模型5次再更新判別模型的嘗試了。 其他動態(tài)平衡兩個網(wǎng)絡的建議僅在最近才引起關(guān)注。
另一方面,一些研究人員認為平衡這些網(wǎng)絡的可行性和愿景是很困難的。 訓練有素的判別模型無論如何都能為生成模型提供高質(zhì)量的反饋。 然而訓練生成模型使之能與判斷模型抗衡也并不容易。 相反,當生成模型表現(xiàn)不佳時,我們可能會將注意力轉(zhuǎn)向?qū)ふ也痪哂薪咏闾荻鹊某杀竞瘮?shù)。
然而問題仍然是存在的。 人們提出了許多建議,研究者們對什么是最好的損失函數(shù)的爭論仍在繼續(xù)。
判別模型通常比生成模型更復雜(有更多濾波器和更多層),而良好的判別模型可以提供高質(zhì)量的信息。 在許多 GAN 應用中,當增加生成模型容量并沒有帶來質(zhì)量上的改進時,我們便遇到了瓶頸。 在我們確定遭遇了瓶頸并解決這個問題之前,增加生成模型容量不會成為優(yōu)先考慮的選項。
在本文中,我們沒有對損失函數(shù)的改進做進一步的說明。 這是一個重要的研究內(nèi)容,我們建議讀者點擊下面的鏈接,對其有進一步的了解。
GAN?—?A comprehensive review into the gangsters of GANs (Part 2)
這篇文章介紹了改進 GAN 的動機和方向。在 medium.com 了解更多
一些 GAN 的酷酷的應用:
GAN?—?Some cool applications of GANs.
我們在 GAN 開發(fā)的最初幾年取得了不錯的進展。 不會再有只有郵票這么小分辨率的面部圖像……在 medium.com 了解更多
本系列所有文章:
GAN?—?GAN Series (from the beginning to the end)
一個涵蓋了 GAN 的應用、問題和解決方案的文章列表。
參考文獻:
Improved Techniques for Training GANs
原文鏈接:
https://towardsdatascience.com/gan-ways-to-improve-gan-performance-acf37f9f59b
雷鋒網(wǎng) AI 研習社編譯。
號外號外~
一個專注于
AI技術(shù)發(fā)展和AI工程師成長的求知求職社區(qū)
誕生啦!
歡迎大家訪問以下鏈接或者掃碼體驗
https://club.leiphone.com/page/home
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。