0 背景
在這之前大家在訓練GAN的時候,使用的loss函數都是sigmoid_cross_entropy_loss函數,然而xudon mao等人發現當使用偽造樣本去更新生成器(且此時偽造樣本也被判別器判為對的時候)會導致梯度消失的問題。雖然此時偽造樣本仍然離真實樣本分布距離還挺遠。也就是之前的損失函數雖然可以判別是真假,可是對於人肉眼來說,還是違和感太強了,也就是生成的圖像質量騙得過機器,卻騙不過人。
圖0.1 兩種損失函數的不同行為
上圖中加號表示假樣本,圈表示真樣本,五角星表示用於更新生成器的偽造樣本,紅線表示LSGAN的決策面,藍線表示sigmoid交叉熵的決策面。可以從圖0.1.1中看出,sigmoid函數能分真假,可是對距離卻並不敏感。
所以,由此,他們提出了更好的損失函數用於將偽造樣本的分布推向於決策面(雖然無法直接推向真實樣本的分布)。並且從中還發現,用此損失函數,可以增加訓練GAN的穩定性。並且之前也有一些論文論述到GAN的不穩定訓練一部分歸咎於目標函數。特別是最小化之前GAN的目標函數時候的梯度消失問題,會導致更新生成器變得困難,而LSGAN是通過基於距離懲罰那些離決策面遠的那些假樣本,所以具有更多的梯度用於訓練迭代。
圖0.2 兩個損失函數的函數圖
如圖0.2所示,最小二乘損失函數只有一個點是平的,而sigmoid交叉熵函數會當x變得足夠大時就飽和了。
1. LSGAN
1.1 目標函數
如上面所述,之前的目標函數為:
xudon mao等人提出的目標函數為:
其中a,b,c滿足條件:\(b-c=1\) 並且 \(b-a=2\)。
所以他們推薦了兩種參數的選擇:
1.2 網絡結構
xudon mao等人參考了vgg的網絡結構,將LSGAN的生成器和判別器的網絡結構設置成:
上述網絡結構的生成器靈感來自VGG結構,其中激活函數沿用了DCGAN的ReLU用於生成器,LeakyReLU用於判別器。
而且,他們在如何將GAN用於多類圖片生成上也做了一些工作,如生成3740類的中文文字圖片,這時候,自然靈感來自於條件GAN。所以,此時的網絡結構不同於上面:
在進行多類別生成的時候,如果直接將one-hot的很長向量作為條件gan的輸入,那么會導致內存損耗和時間損耗,所以在輸入到網絡之前,先通過一個線性映射層將one-hot映射成一個較小維度的向量,比如上面的256。此時對應的目標函數自然為:
其中\(y\)為one-hot向量
2. 實驗結果
xudon mao等人還做了一些實驗用於驗證LSGAN的訓練穩定性,如圖
圖2.1 關於BN和迭代器的穩定性驗證
圖2.2 基於高斯混合分布數據集的對比,此時生成器和判別器都有三層fc層
圖2.3 生成中文字符圖片