0.背景
Tim Salimans等人認為之前的GANs雖然可以生成很好的樣本,然而訓練GAN本質是找到一個基於連續的,高維參數空間上的非凸游戲上的納什平衡。然而不幸的是,尋找納什平衡是一個十分困難的問題。在現有的針對特定場景算法中,GAN的實現通常是使用梯度下降的方法去訓練GAN網絡的目標函數,意在找到lost函數最低值而已,而不是真的找零和游戲中的納什平衡。且目標函數本身是非凸函數,其中是連續參數且參數空間維度很高,所以如果真的去搜尋納什平衡,那么這些算法都是無法收斂的。
當游戲中每個人都認為自己當前是最小損失的時候,那么就是達到了納什平衡。這直觀的讓我們認為,可以使用傳統的基於梯度最小化的方法去同時最小化每個人的損失函數。即,假設判別器和生成器的損失函數為:\(J^{(D)}(\theta^{(D)},\theta^{(G)})\);\(J^{(G)}(\theta^{(D)},\theta^{(G)})\)。納什平衡的點\((\theta^{(D)},\theta^{(G)})\)上,\(J^{(D)}\)關於\(\theta^{(D)}\)最小且\(J^{(G)}\)關於\(\theta^{(G)}\)最小。不過這基本很難實現,因為當修改\(\theta^{(D)}\)且降低\(J^{(D)}\)時,會增加\(J^{(G)}\),而修改\(\theta^{(G)}\)且降低\(J^{(G)}\)時,會增加\(J^{(D)}\),因此梯度下降就無法收斂了。舉個例子:
- 一個游戲者的目標函數是xy,其參數為x;
- 另一個游戲者的目標函數是-xy,其參數是y
梯度下降會遇到一個穩定的點,而不是收斂到x=y=0(理想的平衡點)。
總結來說,就是之前基於梯度下降訓練GAN的方法同時最小化每個游戲者的損失函數,是缺乏他們都收斂的保證的。所以Tim Salimans等人提出了三個有利於模型訓練的方法,意在能夠較好的收斂:
- feature matching:類似於最大均值差異
- minibatch features:借鑒於部分bn的想法
- virtual batch normalization:bn的一個擴展
1. 三個提出的建議
1.1 特征匹配
特征匹配是通過在生成器上指定一個新目標,從而防止在當前判別器基礎上過度訓練的問題。不是簡單的最大化判別器的輸出,而是讓生成器生成的數據能夠匹配真實數據的統計特征。這其中,判別器只需要指定哪些統計特征需要匹配。具體來說,Salimans等人通過讓生成器去匹配判別器中間層上的特征值。即:
讓\(f(x)\)表示判別器中間層的激活值,生成器新的目標就是\(||E_{x\sim p_{data}}f(x)-E_{z\sim p_{z(z)}}f(G(z))||^2_2\)。其中判別器的\(f(x)\)還是按照以往方法訓練。新的目標函數可以讓生成器有個固定點,該點可以准確的匹配訓練數據的分布,雖然理論上無法保證達到這個固定點,不過實驗中顯示這的確有助於傳統的GAN訓練變得穩定高效。
1.2 minibatch discrimination
在GAN的訓練中,一個主要的失敗狀況就是生成器會陷入一個parameter setting,且該位置總是輸出相同的點。當生成器陷入這種情況時,判別器的梯度總是會指向相似的方向,從而沒有判別性,生成器也就只生成同一類同一個結果了。因為判別器是單獨處理每個樣本的,所以梯度之間就沒有方向等坐標信息,所以沒法說當前生成器的輸出和另一個輸出之間有多不同。即此時判別器只能識別真假,卻不能識別是不是來自生成器的同一個輸出。
Salimans等人認為通過讓判別器同時判別多個樣本,從而能夠避免掉這類問題,即“minibatch discrimination”。
- 假設第i個輸入為\(x_i\);
- \(f(x_i)\in R^A\)表示判別器中間層輸出的特征向量;
- 將其乘以一個張量\(T\in R^{A\times B\times C}\),從而生成矩陣\(M_i\in R^{B\times C}\);
- 基於不同的樣本生成的矩陣\(M_i\),\(i\in \{1,2,...,n\}\)的行之間計算\(L_1\)距離:
\(c_b(x_i,x_j)=exp\left(-||M_{i,b}-M_{j,b}||_{L_1}\right)\in R\)
其中b表示矩陣的第b行;- 這minibatch layer中關於樣本\(x_i\)的輸出\(o(x_i)\)定義為,樣本\(x_i\)與其他樣本之間的\(c_b(x_i,x_j)\)的和:
\(o(x_i)_b=\sum_{j=1}^nc_b(x_i,x_j)\in R\)
\(o(x_i)=\left[o(x_i)_1,o(x_i)_2,...,o(x_i)_B\right]\in R^B\)
\(o({\bf X}\in R^{n\times B})\)
圖1.2.1 minibatch discrimination結構圖
如上述步驟所述,最后是將每個樣本得到的\(o(x_i)\)按照行進行堆疊得到\(o({\bf X})\),然后將其輸入到下一層判別器的網絡層。在進行minibatch discrimination是分別計算偽造數據和真實數據的(即在一個minibatch中不存在同時具有偽造數據和真實數據)。同樣的,判別器需要對每個樣本輸出其為真的概率,不過現在借助於minibatch中其他樣本的信息,即side information。從而讓生成器更快的生成視覺可接受的偽造數據,在這方面,它優於特征匹配。不過有趣的是,當在半監督學習中,你所需要的目標是為了獲得一個強分類器,那么特征匹配的方法更好。
1.3 歷史平均(Historical averaging)
當使用歷史平均的方法時,每個游戲者的損失函數會包含一項\(||\theta-\frac{1}{t}\sum_{i=1}^t\theta[i]||^2\),這里\(\theta[i]\)表示在時間為\(i\)時候的參數值。參數的歷史平均可以采用在線更新的方式,所以學習規則可以適用於很長的時間序列。該方法是受到《Iterative solution of games by fictitious play》中fictitious play算法的啟發。Salimans等人等人發現該方法可以在低維,連續的非凸游戲中找到平衡,如一個最小最大游戲,其中一個游戲者控制x,另一個游戲者控制y,值函數為:
而在此類toy類的游戲中,梯度下降方法因為找不到平衡點,從而失效。
1.4 One-sided label smoothing
標簽平滑方法最初來自1980s,近年來重新被使用。主要就是將分類器的0和1替換成更平滑的值,如0.1和0.9。此方法也可以增加神經網絡對 對抗樣本的魯棒性。
即將正類結果乘以\(\alpha\),負類結果乘以\(\beta\),從而最優分類器變成:
不過分子中的\(p_{model}\)是有問題的,因為當\(p_{data}\)接近於0,而\(p_{model}\)又很大的時候,來自\(p_{model}\)的錯誤樣本沒法讓模型參數更靠近數據(即讓網絡學到真實數據的分布)。因而只平滑正樣本到\(\alpha\),讓負樣本到0(即不平滑負類)
1.5 虛擬bn(virtual batch normalization)
BN極大的提升了神經網絡的優化過程,不過它會導致一個輸入樣本在神經網絡輸出的時候極大的依賴minibatch中其他的輸入。為了避免這個問題,從而引入了VBN,在這其中每個樣本都是基於一批引用樣本(reference batch)的統計信息基礎上進行歸一化的,這批引用樣本一旦在訓練開始選中,在整個過程都會引用。這批引用樣本自己的歸一化當然也是基於自己這批引用樣本。VBN計算代價比較大,因為他需要在前向傳播中讀取兩個minibatch數據,所以這個方法只用在生成網絡中。
2.圖像質量評估
GAN因為缺少一個目標函數,從而無法將其與其他模型進行性能上的比較。一個直觀的性能度量就是讓人來評價樣本的視覺質量。不過當樣本量太大的時候,該方法不可行;一個替代的方法就是期望用其他模型來評估偽造數據的質量:用inception模型去計算每一張生成樣本的條件標簽分布\(p(y|x)\)。期望
- 包含有意義對象的圖像其條件標簽分布的熵會比較低;
- 模型生成的不同圖片的邊緣分布\(\int p(y|x=G(z))dz\)會有高熵。
將這兩個要求組合起來,度量方法就是:\(exp(E_xKL(p(y|x)||P(y)))\),從而值就能夠較容易的比較了。該方法無法成功的作為一個對象去訓練,不過卻是一個很好的用來代替人工評估的度量方法。
3.半監督學習
對於通常的多分類,就是\(p_{model}(y=j|x)=\frac{exp(l_j)}{\sum_{k=1}^K\, \, exp(l_k)}\)。對於有監督學習,這樣一個模型就通過最大化真實標簽和模型給的標簽\(p_{model}(y|x)\)之間的交叉熵。
而對於標准分類器的半監督學習,就是將GAN生成器生成的樣本增加到數據集中,也就是將生成的數據標記為一個新的"生成"類,\(y=K+1\),對應的讓分類器的輸出維度從K到K+1。然后使用\(p_{model}(y=K+1|x)\)來提供當前輸入樣本是偽造的概率(對應GAN結構中\(1-D(x)\))。現在我們也可以從無標簽數據中學習了,且是通過最大化\(logp_{model}(y \in\{1,...K\}|x)\)得到的。假設數據集中一半是真實數據,一半是生成數據,那么訓練分類器的損失函數為:
將其分成2個部分即:
\(L=L_{supervised}+L_{unsupervised}\)
其中:
\(L_{supervised}=-E_{x,y\sim p_{data}\;(x,y)}\log p_{model}(y|x,y<K+1)\)
\(L_{unsupervised}=-\{E_{x \sim p_{data}\; (x)}\log\left[ 1-p_{model}(y=K+1|x) \right]+E_{x\sim G}\log \left[ p_{model}(y=K+1|x) \right]\}\)
將總的交叉熵損失函數分成標准的有監督損失函數和無監督損失函數,其中無監督損失函數就是標准的GAN網絡\(D(x)=1-p_{model}(y=K+1|x)\)代入:
\(L_{unsupervised}=-\{E_{x\sim p_{data}\;(x)\log D(x)}+E_{z\sim noise}\log(1-D(G(z)))\}\)
同時最小化有監督損失和無監督損失的最優解的方法是:基於某個縮放函數\(c(x),有\)\(exp[l_j(x)]=c(x)p(y=j,x)\forall j<K+1\)和\(exp[l_{K+1}(x)]=c(x)P_G(x)\),從而讓無監督損失和有監督損失保持一致,通過同時最小化這兩個損失函數從而達到最優解。在實際操作中,\(L_{unsupervised}\)只有在最小化分類器不麻煩的情況下才有幫助,所以需要訓練G來逼近真實數據分布。一種方法是使用分類器作為判別器D,訓練G從而最小化GAN網絡的值。Salimans等人雖然還未明白G與分類器之間的關系,不過實驗顯示在無監督學習中,使用特征匹配的方式優化G效果很好,而使用minibatch discriminiation就一點效果都沒。
這里的K+1的分類器有點過參數化了。如果對每個輸出logit都減去一個函數\(f(x)\),即\(l_j(x)\leftarrow l_j(x)-f(x)\forall j\)。也不會改變softmax的輸出。這也就是說等效的\(l_{K+1}(x)=0\forall x\),從而\(L_{supervised}\)變成K個類別的有監督損失函數,從而判別器為\(D(x)=\frac{Z(x)}{Z(x)+1}\),其中\(Z(x)=\sum_{k=1}^Kexp[l_k(x)]\).