理解生成對抗網路的關鍵在於理解GAN的損失函數

JS散度

GAN實際是通過對先驗分佈施加一個運算G, 來擬合一個新的分佈

如果從傳統的判別式網路的思路出發,只要選定合適的loss,就可以使生成分佈和真實分佈之間的距離儘可能逼近

KL散度經常用來衡量分佈之間距離

D_{KL}(P||Q)=sum_{xin X}P(x)logfrac{P(x)}{Q(x)}

但KL散度是不對稱的。不對稱意味著,對於同一個距離,觀察方式不同,獲取的loss也不同,那麼整體loss下降的方向就會趨向於某個特定方向。這在GAN中非常容易造成模式崩塌,即生成數據的多樣性不足

JS散度在KL散度的基礎上進行了修正,保證了距離的對稱性:

JS(P||Q) = frac{1}{2}KL(P||frac{P+Q}{2})+frac{1}{2}KL(Q||frac{P+Q}{2})

實際上,無論KL散度還是JS散度,在直接用作loss時,都是難以訓練的:由於分佈只能通過取樣計算,這個loss在每次迭代時都幾乎為零

GAN loss的推導

GAN的訓練方法,能夠巧妙的解決這個問題:

先訓練D,再訓練G,二者相互對抗,直到收斂

在原始的GAN中,提出的loss是:

min_{G}max_{D}V(D,G)=E_{x 	hicksim p_{data}(x)}[log{D(x)}]+E_{z	hicksim p_{z}(z)}[log{(1-D(G(z)))}]

當G固定且運算可逆時(實際上這一點一般不成立,但不影響瞭解GAN的思想):

E_{z	hicksim p_{z}(z)}[log{(1-D(G(z)))}] = E_{x	hicksim p_{G}(x)}[log{(1-D(x))}]

代入loss公式,進而有:

egin{split}  &max_{D}V(D,G)\ &=max_{D}E_{x 	hicksim p_{data}(x)}[log{D(x)}]+E_{x	hicksim p_{G}(x)}[log{(1-D(x)}]\ & =max_{D} int_{x} p_{data}(x)log{D(x)}+p_g(x)log{(1-D(x))}dx   end{split}

對於積分區間內的每一個x,設被積函數為f 為:

 f(D) = {p_{data}(D)log{y}+p_g(x)log{(1-D)}}

注意這裡x是固定的,變數是D。對f求導,得到當  f(D) = {p_{data}(D)log{y}+p_g(x)log{(1-D)}} 時,f存在最大值。

由於被積函數的最大值對於任意x都成立,所以當 D = frac{p_{data}}{p_{data}+p_{G}} 時, V(D, G)有最大值

代入loss公式,有:

egin{align} &min_{G}max_{D}V(D,G)\ & =min_{G}int_{x} p_{data}(x)log{frac{p_{data}}{p_{data}+p_{G}}}+p_g(x)log{(frac{p_{G}}{p_{data}+p_{G}})}dx  \ & = -2log2 + min_{G}int_x p_{data}(x)log{frac{p_{data}}{(p_{data}+p_{G})/2}}+p_g(x)log{(frac{p_{G}}{(p_{data}+p_{G})/2})}dx\ & = -2log2 + min_{G} [2JSD(P_{data}||P_G)] end{align}

所以原始GAN的loss實際等價於JS散度

Wasserstein Loss

JS散度存在一個嚴重的問題:兩個分佈沒有重疊時,JS散度為零,而在訓練初期,JS散度是有非常大的可能為零的。所以如果D被訓練的過於強,loss會經常收斂到-2log2而沒有梯度

對於這個問題,WGAN提出了一個新的loss,Wasserstein loss, 也稱作地球移動距離:

 W(P_r,P_g) = inf_{r 	hicksim prod{(P_r,P_g)}}{E_{(x,y) 	hicksim r}||x-y||}

這個距離的直觀含義是,將分佈r移動到分佈g所需要的距離,所以即使是兩個分佈沒有重疊,這個loss也是有值的

可以證明,該距離可以轉化為如下形式:

W(P_r,P_g) = sup_{||f||_{Lleq1}}{E_{x 	hicksim P_r}[f(x)]-E_{y 	hicksim P_g}[f(y)]}

其中f必須滿足1-Lipschitz連續,即: ||f(x)-f(y)|| leq  ||x - y|| 可以看到,符合1-Lipschitz連續的函數的梯度是受限的,可以有效的防止梯度的爆炸,使訓練更加穩定

Spectral Normalization

對於GAN來說,f其實就是指的D或G,也就是神經網路。對於神經網路來說,一般是由一系列矩陣乘法複合而成的。可以證明,如果矩陣乘法這個運算滿足1-Lipschitz連續,那麼其複合運算也會滿足1-Lipschitz連續,神經網路也就滿足1-Lipschitz連續

對於矩陣變換A來說,它滿足K-Lipschitz連續的充要條件是: $$ ||Ax|| leq K||x|| $$ 對其等價變換有:

egin{split}  & ||Ax|| leq K||x||\ & langle Ax,Ax 
angle leq K^2 langle x, x 
angle \ & (Ax)^TAx leq K^2 x^Tx \ & x^TA^TAx - K^2 x^Tx leq 0 \ & x^T(A^TA - K^2I)x leq 0\ end{split}

假設 A^TA 的特徵向量構成的基底為 v1,v2,... 對應的特徵值為 lambda1,lambda2,... ,則x可由特徵向量表示: lambda1,lambda2,...

那麼有:

egin{split}  & x^T(A^TA - K^2I)x leq 0 \  & [sum_{i} {a_iv_i^T}][sum_j {(lambda_j-K^2)a_jv_j}]leq 0  end{split}

只有當i 不等於j時,式子不為零, 且 v_i^Tv_i = 1

所以有: sum_{i}(lambda_j-K^2)a_j^2 leq 0

矩陣 A^TA 是半正定矩陣,所有特徵值都為非負,所以只要矩陣除以它最大的奇異值的開方,就可以滿足1-Lipschitz連續。power iteration 是求奇異值的一種簡便演算法,

稱這種除以最大奇異值的操作為spectral norm

Hinge loss

Hinge loss 是對地球移動距離的一種拓展

Hinge loss 最初是SVM中的概念,其基本思想是讓正例和負例之間的距離盡量大,後來在Geometric GAN中,被遷移到GAN:

egin{split} L_D &= E(max(0,1-D(x)))+E(max(0,1+D(G(z)))) \ L_G &= -E(D(G(z)))  end{split}

對於D來說,只有當D(x) < 1 的正向樣本,以及D(G(z)) > -1的負樣本才會對結果產生影響

也就是說,只有一些沒有被合理區分的樣本,才會對梯度產生影響

這種方法可以使訓練更加穩定


推薦閱讀:
相關文章