1. 程式人生 > >譜歸一化(Spectral Normalization)的理解

譜歸一化(Spectral Normalization)的理解

《Spectral Normalization for Generative Adversarial Networks》【1】是Takeru Miyato在2018年2月發表的一篇將譜理論應用於Gan上的文章,在2017年,本文的第3作者Yuichi Yoshida就發表了一篇著名的譜範數正則(Spectral Norm Regularization)的文章【2】,如有興趣也可參看我的上一篇Blog:https://blog.csdn.net/StreamRock/article/details/83539937 【1】、【2】兩篇文章從不同的角度討論了:引數矩陣的譜範數對多層神經網路的泛化的影響,並分別給出了兩個不同的應對方法:前者對Discriminator矩陣引數進行歸一化處理,後者可以加入任意多層網路(在更新梯度時加入了譜範數正則項)。本文將在【1】的閱讀理解基礎上,探討其實現時的方法。

一、Gan的Lipschitz穩定性約束

Gan好是好,但訓練難,主要體現在:1)模式坍塌,即最後生成的物件就只有少數幾個模式;2)不收斂,在訓練過程中,Discriminator很早就進入了理想狀態,總能perfectly分辨出真假,因此無法給Generator提供梯度資訊,而導致訓練無法進行下去。Martin Arjovsky在《Towards principled methods for training generative adversarial networks》【4】、《Wasserstein GAN》【5】文章中,對Gan難訓練的原因做了詳細的討論,並給出一種新的Loss定義,即Wasserstein Distance: W

(Pr,Pg)=infγ(Pr,Pg)E(x,y)γ[xy](1) W(P_r,P_g)=\inf_{\gamma\in\prod(P_r,P_g)}E_{(x,y)\sim \gamma}[\Vert x-y\Vert]\qquad(1) 實際Wasserstein Distance的計算是通過它的變形來完成的: W(Pr,Pg)=supfLipExPr[f(x)]ExPg[f(x)](2) W(P_r,P_g)=\sup_{\Vert f \Vert_{Lip}}E_{x∼P_r}[f(x)]−E_{x∼P_g}[f(x)]\qquad(2)
(2)式只要求f()f(\cdot) 滿足Lipschitz約束即可,在Gan中,判別器的對映函式可充當(2)式中的f()f(\cdot) ,於是加入此一約束的Gan網路有了一個新的名稱:WGan。 引入Wasserstein Distance,將傳統Gan轉變為WGan是有許多好處的,因為Wasserstein Distance具有如下優點: 1、W(Pr,Pg)0W(P_r,P_g)\ge0, 等號在Pr,PgP_r,P_g分佈完全重合時成立; 2、W(Pr,Pg)W(P_r,P_g)是對稱的,較常用的 KL Divergence 的不對稱,有優勢; 3、即使兩個分佈 Pr,PgP_r,P_g 的支撐不相交,亦可以作為衡量差異的距離,並在滿足一定條件下可微,具備了後向傳輸的能力。 當 WGan 的 Discriminator 採用了這種距離來訓練後,可以消除傳統Gan訓練時出現的收斂問題,使訓練過程變得穩定。另外,要實施此策略也很簡單,只需在傳統Gan的Discriminator的引數矩陣上加上Lipschitz約束即可,其它的幾乎不用改。

Lipschitz約束簡單而言就是:要求在整個f()f(\cdot) 的定義域內有 f(x)f(x)2xx2M(3) \frac{\Vert f(x)-f(x') \Vert_2}{\Vert x-x' \Vert_2} \le M \qquad(3) 其中,M是一個常數。滿足公式(3)的函式f()f(\cdot),具體表現為:函式變化不會太快,其梯度總是有限的,即使最劇烈時,也被限制在小於等於M的範圍。

WGan首先提出Discriminator的引數矩陣需要滿足Lipschitz約束,但其方法比較簡單粗暴:直接對引數矩陣中元素進行限制,不讓其大於某個值。這種方法,是可以保證Lipschitz約束的,但在削頂的同時,也破壞了整個引數矩陣的結構——各引數之間的比例關係。針對這個問題,【1】提出了一個既滿足Lipschitz條件,又不用破壞矩陣結構的方法——Spectral Normalization。

二、多層神經網路的分析

為簡便分析,可將Discriminator看作是多層網路,因為CNNs可看作是特殊的多層網路。對於多層網路的第n層,其輸入與輸出關係可以表示為: xn=an(Wnxn1+bn)(4) \mathbf x_n = a_n(W_n\mathbf x_{n-1}+\mathbf b_n)\qquad(4) 其中,an()a_n(\cdot) 是該層網路的非線性啟用函式,可採用ReLU;WlW_l 是網路引數矩陣,bl\mathbf b_l 是網路的偏置,為推導方便,對 bl\mathbf b_l 進行省略處理,則(4)式可寫為: xn=DnWnxn1(5) \mathbf x_n = D_n W_n\mathbf x_{n-1} \qquad(5) 其中 DnD_n 是對角矩陣,表示ReLU的作用,當其對應輸入為負數時,對角元素為0;當其對應輸入為正數時,對角元素為1。於是,多層神經網路(假設是N層)輸入輸出關係可以寫成: f(x)=DNWND1W1x(6) f(\mathbf x)=D_NW_N\cdots D_1W_1 \mathbf x \qquad(6) Lipschitz約束是對 f(x)f(\mathbf x) 的梯度提出的要求: x(f(x))2=DNWND1W12DN2WN2D12W12(7) \Vert \nabla_x(f(\mathbf x)) \Vert_2 = \Vert D_NW_N\cdots D_1W_1 \Vert_2\le \Vert D_N \Vert_2 \Vert W_N\Vert_2\cdots \Vert D_1\Vert_2 \Vert W_1 \Vert_2 \qquad(7) 此處 W\Vert W \Vert 表示矩陣W的譜範數,它的定義如下: σ(A):=maxh0Ah2h2=maxh=1A2(8) \sigma(A) :=\max_{\Vert h \Vert\neq0} \frac{\Vert Ah \Vert_2}{\Vert h \Vert_2}=\max_{\Vert h \Vert = 1} \Vert A \Vert_2 \qquad(8) 是矩陣W的最大奇異值,表示為σ(W)\sigma(W),對於對角矩陣D,有 D=1\Vert D \Vert =1,由此,(7)可表示為: x(f(x))2i=1Nσ(Wi)(9) \Vert \nabla_x(f(\mathbf x)) \Vert_2 \le \prod_{i=1}^N \sigma(W_i) \qquad(9) 為使 f(x)f(\mathbf x) 滿足Lipschitz約束,可對(7)進行歸一化: x(f(x))2=DNWNσ(WN)D1W1σ(W1)2i=1Nσ(Wi)σ(Wi)=1(10) \Vert \nabla_x(f(\mathbf x)) \Vert_2 = \Vert D_N \frac {W_N}{\sigma(W_N)}\cdots D_1\frac {W_1}{\sigma(W_1)} \Vert_2 \le \prod_{i=1}^N \frac {\sigma(W_i)}{\sigma(W_i)} =1\qquad(10)