天天看點

【GANs學習筆記】(十)SNGAN

完整筆記:http://www.gwylab.com/note-gans.html

———————————————————————

本章借鑒内容:

https://baike.baidu.com/item/%E5%A5%87%E5%BC%82%E5%80%BC/9975162

https://blog.csdn.net/zhongkejingwang/article/details/43053513

7. SNGAN

7.1 SNGAN設計思路

       現在我們的目的,是要保證對于每一個位置的x,梯度的模都小于等于1。在神經網絡中,将梯度的模限制在一個範圍内,抽象地來說就是讓産生的函數更平滑一些,最常見的做法便是正則化。SNGAN(頻譜歸一化GAN)為了讓正則化産生更明确地限制,提出了用譜範數标準化神經網絡的參數矩陣W,進而讓神經網絡的梯度被限制在一個範圍内。

7.2 頻譜範數

       我們先以前饋神經網絡為一個簡單的例子來解釋頻譜範數(下稱譜範數)的作用。(7.2-7.4節是一些相關的理論基礎,如果不感興趣可以直接跳到7.5節)

一個前饋神經網絡可以表示為級聯計算:

【GANs學習筆記】(十)SNGAN

。其中

【GANs學習筆記】(十)SNGAN

代表層數,

【GANs學習筆記】(十)SNGAN

【GANs學習筆記】(十)SNGAN

是第

【GANs學習筆記】(十)SNGAN

層的輸入,

【GANs學習筆記】(十)SNGAN

是第

【GANs學習筆記】(十)SNGAN

層的輸出,

【GANs學習筆記】(十)SNGAN

是一個(非線性的)激活函數,

【GANs學習筆記】(十)SNGAN

【GANs學習筆記】(十)SNGAN

分别代表

【GANs學習筆記】(十)SNGAN

層的權重矩陣和偏置向量。現在我們把全體參數的集合記作Θ,Θ=

【GANs學習筆記】(十)SNGAN

;全體網絡層所形成的函數記作

【GANs學習筆記】(十)SNGAN

,即有:

【GANs學習筆記】(十)SNGAN

。給定K組訓練資料,

【GANs學習筆記】(十)SNGAN

,損失函數定義為:

【GANs學習筆記】(十)SNGAN

,通常L被選擇為交叉熵或是

【GANs學習筆記】(十)SNGAN

距離,分别用于分類和回歸任務。要學習的模型參數是Θ。

       現在我們開始考慮如何獲得對輸入的擾動不敏感的模型。 我們的目标是獲得一個模型Θ,使得f(x +ξ)-f(x)的模(指的是2-範數,即各個元素的平方和)很小,其中ξ是具有小的模的擾動向量。假設我們選用的激活函數是ReLU或maxout等分段線性函數,在這種情況下,

【GANs學習筆記】(十)SNGAN

也是分段線性函數。 是以,如果我們考慮x的小鄰域,我們可以将

【GANs學習筆記】(十)SNGAN

視為線性函數。 換句話說,我們可以用仿射映射表示它,

【GANs學習筆記】(十)SNGAN

,其中

【GANs學習筆記】(十)SNGAN

是矩陣,

【GANs學習筆記】(十)SNGAN

是向量,它們都取決于Θ和x的值。 然後,對于小擾動ξ,我們有:

【GANs學習筆記】(十)SNGAN

       其中σ

【GANs學習筆記】(十)SNGAN

就是

【GANs學習筆記】(十)SNGAN

的譜範數的計算式,數學上它等價于計算矩陣

【GANs學習筆記】(十)SNGAN

的最大奇異值(奇異值的介紹見7.2節)。矩陣最大奇異值的表達式參見下式:

【GANs學習筆記】(十)SNGAN

       上述論證表明我們應當訓練模型參數Θ,使得對于任何x,

【GANs學習筆記】(十)SNGAN

的譜範數都很小。 為了進一步研究

【GANs學習筆記】(十)SNGAN

的性質,讓我們假設每個激活函數

【GANs學習筆記】(十)SNGAN

都是ReLU(該參數可以很容易地推廣到其他分段線性函數)。注意,對于給定的向量x,

【GANs學習筆記】(十)SNGAN

充當對角矩陣

【GANs學習筆記】(十)SNGAN

,其中如果

【GANs學習筆記】(十)SNGAN

中的對應元素為正,則對角線中的元素等于1; 否則,它等于零(這是ReLU的定義)。于是,我們可以重寫

【GANs學習筆記】(十)SNGAN

為下式:

【GANs學習筆記】(十)SNGAN

       又注意到對于每個

【GANs學習筆記】(十)SNGAN

,有σ

【GANs學習筆記】(十)SNGAN

≤1,是以我們有:

【GANs學習筆記】(十)SNGAN

       至此我們得出了一個非常重要的結論,為了限制

【GANs學習筆記】(十)SNGAN

的譜範數,隻需要每個

【GANs學習筆記】(十)SNGAN

限制

【GANs學習筆記】(十)SNGAN

的譜範數就足夠了。這促使我們考慮譜範數正則化,這将在7.3節中描述。

7.3* 奇異值與奇異值分解

       在介紹頻譜範數正則化之前,先簡要介紹一下後面會用到的技巧:奇異值分解。奇異值是線性代數中的概念,奇異值分解是矩陣論中一種重要的矩陣分解法,奇異值一般通過奇異值分解定理求得。如果讀者了解奇異值的話這一節可以跳過。

奇異值的定義

       設A為m*n矩陣,q=min(m,n),A*A的q個非負特征值的算術平方根叫作A的奇異值。

奇異值分解定理

設給定 

【GANs學習筆記】(十)SNGAN

 ,令 

【GANs學習筆記】(十)SNGAN

 ,并假設 

【GANs學習筆記】(十)SNGAN

(a) 存在酉矩陣 

【GANs學習筆記】(十)SNGAN

 與 

【GANs學習筆記】(十)SNGAN

 ,以及一個對角方陣

【GANs學習筆記】(十)SNGAN

使得

【GANs學習筆記】(十)SNGAN

 以及 

【GANs學習筆記】(十)SNGAN

其中

【GANs學習筆記】(十)SNGAN

(b) 參數 

【GANs學習筆記】(十)SNGAN

 是 

【GANs學習筆記】(十)SNGAN

 的按照遞減次序排列的非零特征值的正的平方根,它們與

【GANs學習筆記】(十)SNGAN

 的按照遞減次序排列的非零特征值的正的平方根是相同的。

       在奇異值分解定理中,矩陣 

【GANs學習筆記】(十)SNGAN

 的對角元素(即純量

【GANs學習筆記】(十)SNGAN

 ,它們是方陣 

【GANs學習筆記】(十)SNGAN

 的對角元素)稱為矩陣A的奇異值。

       * 奇異值分解定理的證明

證明比較複雜,在此不贅述了,推薦一篇博文,感興趣的讀者可以去了解一下:

https://blog.csdn.net/zhongkejingwang/article/details/43053513。

但是要注意的是,7.3節當中提到了一些概念,其中左奇異向量指的是

【GANs學習筆記】(十)SNGAN

的特征向量,右奇異向量指的是

【GANs學習筆記】(十)SNGAN

的特征向量。

7.4 頻譜範數正則化

       頻譜範數正則化方法是17年5月提出來的,雖然最終的SNGAN沒有完全采用這一方法,但是它借鑒了這個方法非常重要的思想。

為了限制每個權重矩陣的頻譜範數

【GANs學習筆記】(十)SNGAN

,我們考慮以下經驗風險最小化問題:

【GANs學習筆記】(十)SNGAN

       其中λ∈

【GANs學習筆記】(十)SNGAN

是正則化因子,第二項被稱為譜範數正則項,它降低了權重矩陣的譜準則。

       在執行标準梯度下降時,我們需要計算譜範數正則項的梯度。為此,讓我們考慮對于一個特定

【GANs學習筆記】(十)SNGAN

的梯度σ(

【GANs學習筆記】(十)SNGAN

/2,其中

【GANs學習筆記】(十)SNGAN

。 設

【GANs學習筆記】(十)SNGAN

=σ(

【GANs學習筆記】(十)SNGAN

【GANs學習筆記】(十)SNGAN

分别是第一和第二奇異值。 如果

【GANs學習筆記】(十)SNGAN

>

【GANs學習筆記】(十)SNGAN

,則σ(

【GANs學習筆記】(十)SNGAN

/2的梯度為

【GANs學習筆記】(十)SNGAN

,其中,

【GANs學習筆記】(十)SNGAN

【GANs學習筆記】(十)SNGAN

分别是第一個左奇異向量和第一個右奇異向量。 如果

【GANs學習筆記】(十)SNGAN

=

【GANs學習筆記】(十)SNGAN

,則σ(

【GANs學習筆記】(十)SNGAN

/2是不可微的。 然而,出于實際目的,我們可以假設這種情況從未發生,因為實際訓練中的數值誤差會讓

【GANs學習筆記】(十)SNGAN

【GANs學習筆記】(十)SNGAN

不可能完全相等。

       由于計算

【GANs學習筆記】(十)SNGAN

【GANs學習筆記】(十)SNGAN

【GANs學習筆記】(十)SNGAN

在計算上是昂貴的,我們使用功率疊代方法來近似它們。從随機初始化的v開始(開始于

【GANs學習筆記】(十)SNGAN

層),我們疊代地執行以下過程足夠次數:

【GANs學習筆記】(十)SNGAN

       最終我們得到了使用頻譜範數正則項的SGD算法如下:

【GANs學習筆記】(十)SNGAN

       值得注意的是,為了最大化

【GANs學習筆記】(十)SNGAN

【GANs學習筆記】(十)SNGAN

【GANs學習筆記】(十)SNGAN

,在SGD的下一次疊代開始時,我們可以用

【GANs學習筆記】(十)SNGAN

代替第2步中的初始向量v。然後在第7步中右方的标注是,paper作者在實驗中發現,隻進行一次疊代就能夠獲得足夠好的近似值。文章中還提到對于含有卷積的神經網絡架構,我們需要将參數對齊為b×a

【GANs學習筆記】(十)SNGAN

的矩陣,再去計算該矩陣的譜範數并添加到正則項中。

       綜上,頻譜範數正則化看起來非常複雜,但是它的實際做法,可以簡單地了解為,把傳統GANs中的loss函數:

【GANs學習筆記】(十)SNGAN

       其中的正則項替換成了譜範數:

【GANs學習筆記】(十)SNGAN

       并且譜範數的計算利用了功率疊代的方法去近似。

7.5 SNGAN的實作

       之前我們說到,對于GANs最重要的目的是實作D的1-lipschitz限制,頻譜範數正則化固然有效,但是它不能保證把

【GANs學習筆記】(十)SNGAN

的梯度限制在一個确定的範圍内,真正解決了這一問題的,是直到18年2月才被提出的SNGAN。SNGAN基于spectral normalization的思想,通過對W矩陣歸一化的方式,真正将

【GANs學習筆記】(十)SNGAN

的梯度控制在了小于或等于1的範圍内。

       我們先來證明,隻要将每一層

【GANs學習筆記】(十)SNGAN

的譜範數都限制為1,最終得到的

【GANs學習筆記】(十)SNGAN

函數就會滿足1-lipschitz限制。

       對于一個線性層函數g(h)=Wh,我們可以計算出它的lipschitz範式:

【GANs學習筆記】(十)SNGAN

       如果激活層函數的lipschitz範式

【GANs學習筆記】(十)SNGAN

=1(比如ReLU),我們就有如下不等式:

【GANs學習筆記】(十)SNGAN

       其中○表示複合函數。我們利用上面的不等式,就能夠得到

【GANs學習筆記】(十)SNGAN

的lipschitz範式的限制式:

【GANs學習筆記】(十)SNGAN

       于是現在,我們隻需要保證

【GANs學習筆記】(十)SNGAN

恒等于1,就能夠讓

【GANs學習筆記】(十)SNGAN

函數滿足1-lipschitz限制。做法非常簡單,隻需要将W矩陣歸一化即可:

【GANs學習筆記】(十)SNGAN

至此,SNGAN通過将W矩陣歸一為譜範數恒等于1的式子,進而控制

【GANs學習筆記】(十)SNGAN

的梯度恒小于等于1,最終實作了對D的1-lipschitz限制,最後我們給出SNGAN中的梯度下降算法:

【GANs學習筆記】(十)SNGAN

       可以看出,與傳統的SGD相比,帶有譜歸一化的SGD做的額外處理就是對W矩陣做的歸一化處理:

【GANs學習筆記】(十)SNGAN