Generative Adversarial Networks(Section 4)

4 建議和技巧

實踐者們會使用一些提升 GANs 性能的技巧。我們很難去判斷這些技巧會發(fā)揮什么樣的作用了;很多技巧會在一些環(huán)境中有幫助但在另外一些環(huán)境中卻又起到反作用。

NIPS 2016 同樣包含一個關(guān)于對抗訓(xùn)練的 workshop,由 Soumith Chintala 給了稱為“How to train a GAN”的邀請報告。這個報告和本文部分內(nèi)容的目標類似,不過兩者內(nèi)容選擇上有一定差異。想要了解本課程中沒有的建議和技巧,請參考 GitHub 相關(guān)項目:https://github.com/soumith/ganhacks

4.1 帶標簽訓(xùn)練

以任意方式使用標簽,形狀或者形式總會給模型生成樣本的主觀判斷的質(zhì)量帶來顯著提升。這個首先由 Denton et al. (2015) 發(fā)現(xiàn),他構(gòu)建了一個 class-conditional GANs 相比自由生成任意類別的 GANs 能夠生成更加好的樣本。后來,Salimans et al. (2016) 發(fā)現(xiàn)即使生成器沒有顯式地利用類別信息也能讓樣本質(zhì)量有所提升;訓(xùn)練這個判別器來識別真實對象的特定類別就足夠了。

當(dāng)然對這個技巧工作原理大家還不是完全清楚??赡苁穷悇e信息的引入給于訓(xùn)練過程有用的線索可以幫助優(yōu)化。同時也可能是該技巧在樣本質(zhì)量上沒有客觀的提升,但是產(chǎn)生了一些樣本在人類視覺系統(tǒng)關(guān)注的性質(zhì)上的偏差。如果是后面這個情況,那么這個技巧并不會帶來更好的數(shù)據(jù)產(chǎn)生分布模型,但是仍然對創(chuàng)造人類觀眾更享受的媒體有幫助,也可能幫助 RL 智能體執(zhí)行依賴對環(huán)境的跟人類更相關(guān)的某些方面的知識的任務(wù)。

我們在比較不同結(jié)果時確保所有的情況都是在用這個技巧下進行的是非常重要的,利用標簽訓(xùn)練的模型必須和同樣使用標簽訓(xùn)練的其他模型一起比較,class-conditional 模型也是要和其他 class-conditional 模型放在一起比較。否則就是不公平和沒意思的 benchmark,因為這就像在圖像任務(wù)上用一個卷積模型通常會超過非卷積模型一樣。

4.2 單邊標簽平滑

GANs 在判別器估計兩個密度的比例時工作,但是深度神經(jīng)網(wǎng)絡(luò)更易會產(chǎn)生高置信度的輸出,輸出的是正確的類別但是太極端的概率。這情況尤其在輸入是對抗構(gòu)造出來的時候格外常見;分類器傾向于線性 推斷 extrapolate 并產(chǎn)生置信度特別高的預(yù)測(Goodfellow et al., 2014a)。

為了鼓勵判別器估計出軟一些的概率,我們可以采取一種稱為單邊標簽平滑(Salimans et al., 2016)。

通常我們使用(8)公式來訓(xùn)練判別器。我們可以將其用 TensorFlow (Abadi et al., 2015)代碼寫出來:

d_on_data = discriminator_logits(data_minibatch)
d_on_samples = discriminator_logits(samples_minibatch)
loss = tf.nn.sigmoid_cross_entropy_with_logits(d_on_data, 1.) + tf.nn.sigmoid_cross_entropy_with_logits(d_on_samples, 0.)

單邊標簽平滑的想法是將真實樣本的目標用一個稍微小于 1 的值代替,比如說 .9:

loss = tf.nn.sigmoid_cross_entropy_with_logits(d_on_data, .9) + \ tf.nn.sigmoid_cross_entropy_with_logits(d_on_samples, 0.)

這樣會防止判別器的極端推斷行為;如果它學(xué)會預(yù)測特別大的 logits 對應(yīng)于一個達到 1 的概率,這樣的方式能進行懲罰并鼓勵將 logits 拉回到稍小的值。

不過對偽造樣本的標簽不需要平滑。假設(shè)我們對真實數(shù)據(jù)用一個 1-α 目標函數(shù)而偽造數(shù)據(jù)是 0+β 。那么最優(yōu)的判別器函數(shù)就是

當(dāng) β 為 0 時,按照 α 去平滑并不會有什么影響,同時還降低了判別器的最優(yōu)值的尺度。當(dāng) β 非 0 時,最優(yōu)判別器函數(shù)的形狀會變化。特別在 pdata(x) 非常小且 pmodel(x) 大一些的時候,D*(x) 會在 pmodel(x) 的偽造眾數(shù)處有一個峰值。判別器將會在生成器中強化不正確的行為;生成器將會被訓(xùn)練成或者產(chǎn)生樣本類似數(shù)據(jù)或者產(chǎn)生和其產(chǎn)生過的樣本類似的樣本。

單邊標簽平滑是一個更早的平滑標簽技術(shù)的簡單變化,可以追溯到 1980 年代。Szegedy et al. 2015 展示了標簽平滑是一個在用于對象識別的卷積網(wǎng)絡(luò)很好的正則化子 regularizer。這樣的原因是它不會鼓勵模型在訓(xùn)練集上選擇不正確的類別,而僅會降低在正確類別的置信度。其他的正則化子如權(quán)重下降如果參數(shù)設(shè)置得過高通常會導(dǎo)致一些誤分類的情況出現(xiàn)。Warde-Farley 和 Goodfellow (2016)揭示了標簽平滑可以幫助降低對抗樣本的影響,這表明標簽平滑應(yīng)該能幫助判別器更加有效地學(xué)會抵擋生成器的“進攻”。

圖 21

4.3 虛擬批規(guī)范化 Virtual batch Normalisation

因為 DCGAN 的引入,大多數(shù) GAN 架構(gòu)包含了某種形式的 BN。BN 的主要作用是提升模型的優(yōu)化,通過重參數(shù)化模型使得每個特征的均值和方差由和那個特征關(guān)聯(lián)的單個均值參數(shù)和單個方差參數(shù)控制,而不是有一個復(fù)雜的由所有抽取特征的層的所有權(quán)重來確定。這個重參數(shù)化通過在一個 minibatch 上減去那個特征的均值并除上其標準差實現(xiàn)。規(guī)范化操作其實是模型的一部分,所有反向傳播計算那些被定義為總是被規(guī)范化的特征的梯度。用這個方法,如果沒有將規(guī)范化作為模型的一部分定義的話,特征頻繁重規(guī)范化會降低效率。

BN 是很有用的,但是對 GANs 其實有一些不好的副作用。使用數(shù)據(jù)的不同的 minibatch 在每個訓(xùn)練步中計算規(guī)范化統(tǒng)計量會產(chǎn)生這些規(guī)范化常量的波動。當(dāng) minibatch 很小時(通常在嘗試用有限的 GPU 內(nèi)存來擬合大生成式模型的時候)這些波動會變得過大使得能夠?qū)ι傻膱D像產(chǎn)生比輸入 z 更大影響。參考圖 21。

Salimans et al., (2016) 引入了技術(shù)來減輕這個問題。引用BN(Reference Batch Normalisation)運行網(wǎng)絡(luò)兩次:第一次在一個在訓(xùn)練開始時采樣且不會被替換的 reference examples 的 minibatch 上,還有一個在當(dāng)前要用來訓(xùn)練的 minibatch 上。每個特征的均值和標準差使用引用batch進行計算。每個 batch 的特征然后使用這些計算得到的統(tǒng)計量進行規(guī)范化。引用 BN 的缺點就是這個模型會對這個引用 batch 過匹配。為了稍微降低這個問題的影響,大家可以使用 virtual batch Normalisation,其中對每個樣本的規(guī)范化統(tǒng)計量使用那個樣本和引用 batch 的并集來計算。引用BN 和虛擬BN 獨立處理,由生成器產(chǎn)生所有樣本都是獨立同分布的(除了那些定義了引用batch)。

4.4 我們能夠保持 G 和 D 的平衡么?

很多人有一種直覺就是很有必要來平衡這兩個參與人使得一方不要過強。如果這樣的平衡是值得的并且易解,那么還沒有一種有說服力的形式出現(xiàn)。

作者本人現(xiàn)在的相信 GANs 通過估計數(shù)據(jù)密度和模型密度的比例工作。這個比例僅會在判別器最優(yōu)的時候被正確估計,所以對判別器來說超過生成器其實是很好的。

有時候生成器的梯度會在判別器太準確的時候消失。解決這個問題的正確方式是不去限制判別器的力量,但是可以使用參數(shù)化博弈使得梯度不會消失(參見 3.2.3 節(jié))

有時候如果判別器置信度太高時生成器的梯度過大。與其讓判別器準確度降低,更好的方式是使用單邊標簽平滑(4.2節(jié))。

判別器應(yīng)該總是最優(yōu)來最好地估計比例意味著生成器訓(xùn)練每步則以 k > 1 步驟來訓(xùn)練判別器。實踐中這種方式不一定有明顯提升。

我們同樣還能夠通過選擇模型大小來平衡生成器和判別器。實踐中,判別器通常會更深,有時候有更多的過濾器。這個可能是因為對判別器來說正確估計兩個密度之間的比值更加重要,但是也可能是眾數(shù)坍縮問題——因為生成器在現(xiàn)在的訓(xùn)練方法下不能使出所有能力,實踐者們也沒看到提升生成器容量得到的好處。如果眾數(shù)坍縮問題可以被解決,生成器的大小會增大。我們也不知道判別器的大小是否會按照比例同樣增長。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容