這篇文章的靈感來源是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必須同步得很好才行。atom
(2)原始GAN提出了優化方案:經過最小化來訓練G。但會出現梯度不穩定、模型崩潰的問題spa
在原始GAN的距離度量 方式下,G的loss能夠被化簡成一下形式:翻譯
從上面這個式子,咱們能夠看到在最優D時,咱們想要最小化生成器loss就既要減少KL散度又要同時增大JS散度,這就產生了矛盾致使梯度不穩定。blog
第二,即使是前面那個正常的KL散度項也有毛病。由於KL散度不是一個對稱的衡量,與
是有差異的。同步
換言之,對於上面兩種錯誤的懲罰是不同的,第一種錯誤對應的是「生成器沒能生成真實的樣本」,懲罰微小;第二種錯誤對應的是「生成器生成了不真實的樣本」 ,懲罰巨大。第一種錯誤對應的是缺少多樣性,第二種錯誤對應的是缺少準確性。這一放一打之下,生成器寧肯多生成一些重複可是很「安全」的樣本,也不肯意去生成多樣性的樣本,由於那樣一不當心就會產生第二種錯誤,得不償失。這種現象就是你們常說的collapse mode。class
WGAN進行優化後G和D的損失函數:
DualGAN的思想
判別器損失:
Z,Z'爲噪聲。形式與WGAN一致。
生成器損失:
網絡結構
生成器使用U-Net。
判別器使用patchGAN
拓展:防止判別器過於自信
(1)單邊標籤平滑
D的優化目標從1變成0.9
(2)樣本噪聲
對輸入D的樣本添加噪聲來挑戰D。使真假樣本的流形更加接近,同時防止D輕易找到徹底分離真假樣本的判別器邊界。