文章的思想來源
這篇文章的靈感來源是Xia et al 提出的一篇做機器翻譯的文章NIP Dual【2】。這篇文章的一個例子很好的解釋了對偶的思想。首先假設我們有兩個人A和B,A會英文不會法語,B會法語不會英文。A要和B進行交流,A寫了一段話,通過翻譯器GA翻譯成法語,但A看不懂法語,只能將翻譯的結果直接發給B;B收到這段話之后,用自己的理解整理了一下,通過翻譯器GB翻譯成英文直接發給A;A收到之后,要檢查B是否真正理解自己說的話。如此往復幾次,A和B都能確認對方理解了自己。在這個例子中,翻譯器A和B分別是兩個生成器,A和B分別擔任了判別器的角色。
原始GAN存在的問題
在wgan這篇文章中系統的闡述了原始GAN存在的一些問題。
(1)當我們通過最小化 來訓練G時會出現難訓練、無法優化G的問題
由於實際上Pg與Pdata很難有不可忽略的重疊,當D太強時,我們發現JS散度就固定是常數log2,C(G)就為一個固定值,所以導致G梯度消失。當D太弱時,會導致G梯度不准,四處亂跑。所以G和D必須同步得很好才行。
(2)原始GAN提出了優化方案:通過最小化來訓練G。但會出現梯度不穩定、模型崩潰的問題
在原始GAN的距離度量 方式下,G的loss可以被化簡成一下形式:
從上面這個式子,我們可以看到在最優D時,我們想要最小化生成器loss就既要減小KL散度又要同時增大JS散度,這就產生了矛盾導致梯度不穩定。
第二,即便是前面那個正常的KL散度項也有毛病。因為KL散度不是一個對稱的衡量,與
是有差別的。
換言之,對於上面兩種錯誤的懲罰是不一樣的,第一種錯誤對應的是“生成器沒能生成真實的樣本”,懲罰微小;第二種錯誤對應的是“生成器生成了不真實的樣本” ,懲罰巨大。第一種錯誤對應的是缺乏多樣性,第二種錯誤對應的是缺乏准確性。這一放一打之下,生成器寧可多生成一些重復但是很“安全”的樣本,也不願意去生成多樣性的樣本,因為那樣一不小心就會產生第二種錯誤,得不償失。這種現象就是大家常說的collapse mode。
WGAN進行優化后G和D的損失函數:
DualGAN的思想
判別器損失:
Z,Z'為噪聲。形式與WGAN一致。
生成器損失:
網絡結構
生成器使用U-Net。
判別器使用patchGAN
拓展:防止判別器過於自信
(1)單邊標簽平滑
D的優化目標從1變成0.9
(2)樣本噪聲
對輸入D的樣本添加噪聲來挑戰D。使真假樣本的流形更加接近,同時防止D輕易找到完全分離真假樣本的判別器邊界。