完整筆記: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節)
一個前饋神經網絡可以表示為級聯計算:
。其中
代表層數,
;
是第
層的輸入,
是第
層的輸出,
是一個(非線性的)激活函數,
和
分别代表
層的權重矩陣和偏置向量。現在我們把全體參數的集合記作Θ,Θ=
;全體網絡層所形成的函數記作
,即有:
。給定K組訓練資料,
,損失函數定義為:
,通常L被選擇為交叉熵或是
距離,分别用于分類和回歸任務。要學習的模型參數是Θ。
現在我們開始考慮如何獲得對輸入的擾動不敏感的模型。 我們的目标是獲得一個模型Θ,使得f(x +ξ)-f(x)的模(指的是2-範數,即各個元素的平方和)很小,其中ξ是具有小的模的擾動向量。假設我們選用的激活函數是ReLU或maxout等分段線性函數,在這種情況下,
也是分段線性函數。 是以,如果我們考慮x的小鄰域,我們可以将
視為線性函數。 換句話說,我們可以用仿射映射表示它,
,其中
是矩陣,
是向量,它們都取決于Θ和x的值。 然後,對于小擾動ξ,我們有:
其中σ
就是
的譜範數的計算式,數學上它等價于計算矩陣
的最大奇異值(奇異值的介紹見7.2節)。矩陣最大奇異值的表達式參見下式:
上述論證表明我們應當訓練模型參數Θ,使得對于任何x,
的譜範數都很小。 為了進一步研究
的性質,讓我們假設每個激活函數
都是ReLU(該參數可以很容易地推廣到其他分段線性函數)。注意,對于給定的向量x,
充當對角矩陣
,其中如果
中的對應元素為正,則對角線中的元素等于1; 否則,它等于零(這是ReLU的定義)。于是,我們可以重寫
為下式:
又注意到對于每個
,有σ
≤1,是以我們有:
至此我們得出了一個非常重要的結論,為了限制
的譜範數,隻需要每個
限制
的譜範數就足夠了。這促使我們考慮譜範數正則化,這将在7.3節中描述。
7.3* 奇異值與奇異值分解
在介紹頻譜範數正則化之前,先簡要介紹一下後面會用到的技巧:奇異值分解。奇異值是線性代數中的概念,奇異值分解是矩陣論中一種重要的矩陣分解法,奇異值一般通過奇異值分解定理求得。如果讀者了解奇異值的話這一節可以跳過。
奇異值的定義設A為m*n矩陣,q=min(m,n),A*A的q個非負特征值的算術平方根叫作A的奇異值。
奇異值分解定理設給定
,令
,并假設
:
(a) 存在酉矩陣
與
,以及一個對角方陣
使得
以及
,
其中
(b) 參數
是
的按照遞減次序排列的非零特征值的正的平方根,它們與
的按照遞減次序排列的非零特征值的正的平方根是相同的。
在奇異值分解定理中,矩陣
的對角元素(即純量
,它們是方陣
的對角元素)稱為矩陣A的奇異值。
* 奇異值分解定理的證明證明比較複雜,在此不贅述了,推薦一篇博文,感興趣的讀者可以去了解一下:
https://blog.csdn.net/zhongkejingwang/article/details/43053513。
但是要注意的是,7.3節當中提到了一些概念,其中左奇異向量指的是
的特征向量,右奇異向量指的是
的特征向量。
7.4 頻譜範數正則化
頻譜範數正則化方法是17年5月提出來的,雖然最終的SNGAN沒有完全采用這一方法,但是它借鑒了這個方法非常重要的思想。
為了限制每個權重矩陣的頻譜範數
,我們考慮以下經驗風險最小化問題:
其中λ∈
是正則化因子,第二項被稱為譜範數正則項,它降低了權重矩陣的譜準則。
在執行标準梯度下降時,我們需要計算譜範數正則項的梯度。為此,讓我們考慮對于一個特定
的梯度σ(
/2,其中
。 設
=σ(
和
分别是第一和第二奇異值。 如果
>
,則σ(
/2的梯度為
,其中,
和
分别是第一個左奇異向量和第一個右奇異向量。 如果
=
,則σ(
/2是不可微的。 然而,出于實際目的,我們可以假設這種情況從未發生,因為實際訓練中的數值誤差會讓
和
不可能完全相等。
由于計算
,
和
在計算上是昂貴的,我們使用功率疊代方法來近似它們。從随機初始化的v開始(開始于
層),我們疊代地執行以下過程足夠次數:
最終我們得到了使用頻譜範數正則項的SGD算法如下:
值得注意的是,為了最大化
,
和
,在SGD的下一次疊代開始時,我們可以用
代替第2步中的初始向量v。然後在第7步中右方的标注是,paper作者在實驗中發現,隻進行一次疊代就能夠獲得足夠好的近似值。文章中還提到對于含有卷積的神經網絡架構,我們需要将參數對齊為b×a
的矩陣,再去計算該矩陣的譜範數并添加到正則項中。
綜上,頻譜範數正則化看起來非常複雜,但是它的實際做法,可以簡單地了解為,把傳統GANs中的loss函數:
其中的正則項替換成了譜範數:
并且譜範數的計算利用了功率疊代的方法去近似。
7.5 SNGAN的實作
之前我們說到,對于GANs最重要的目的是實作D的1-lipschitz限制,頻譜範數正則化固然有效,但是它不能保證把
的梯度限制在一個确定的範圍内,真正解決了這一問題的,是直到18年2月才被提出的SNGAN。SNGAN基于spectral normalization的思想,通過對W矩陣歸一化的方式,真正将
的梯度控制在了小于或等于1的範圍内。
我們先來證明,隻要将每一層
的譜範數都限制為1,最終得到的
函數就會滿足1-lipschitz限制。
對于一個線性層函數g(h)=Wh,我們可以計算出它的lipschitz範式:
如果激活層函數的lipschitz範式
=1(比如ReLU),我們就有如下不等式:
其中○表示複合函數。我們利用上面的不等式,就能夠得到
的lipschitz範式的限制式:
于是現在,我們隻需要保證
恒等于1,就能夠讓
函數滿足1-lipschitz限制。做法非常簡單,隻需要将W矩陣歸一化即可:
至此,SNGAN通過将W矩陣歸一為譜範數恒等于1的式子,進而控制
的梯度恒小于等于1,最終實作了對D的1-lipschitz限制,最後我們給出SNGAN中的梯度下降算法:
可以看出,與傳統的SGD相比,帶有譜歸一化的SGD做的額外處理就是對W矩陣做的歸一化處理: