从动力学角度看优化算法:GAN的第三个阶段
作者丨蘇劍林
單位丨追一科技
研究方向丨NLP,神經網絡
個人主頁丨kexue.fm
在對 GAN 的學習和思考過程中,我發現我不僅學習到了一種有效的生成模型,而且它全面地促進了我對各種模型各方面的理解,比如模型的優化和理解視角、正則項的意義、損失函數與概率分布的聯系、概率推斷等等。GAN不單單是一個“造假的玩具”,而是具有深刻意義的概率模型和推斷方法。?
作為事后的總結,我覺得對 GAN 的理解可以粗糙地分為三個階段:?
1. 樣本階段:在這個階段中,我們了解了 GAN 的“鑒別者-造假者”詮釋,懂得從這個原理出發來寫出基本的 GAN 公式(如原始 GAN、LSGAN),比如判別器和生成器的 loss,并且完成簡單 GAN 的訓練;同時,我們知道 GAN 有能力讓圖片更“真”,利用這個特性可以把 GAN 嵌入到一些綜合模型中。?
2. 分布階段:在這個階段中,我們會從概率分布及其散度的視角來分析 GAN,典型的例子是 WGAN 和 f-GAN,同時能基本理解 GAN 的訓練困難問題,比如梯度消失和 mode collapse 等,甚至能基本地了解變分推斷,懂得自己寫出一些概率散度,繼而構造一些新的 GAN 形式。?
3. 動力學階段:在這個階段中,我們開始結合優化器來分析 GAN 的收斂過程,試圖了解 GAN 是否能真的達到理論的均衡點,進而理解 GAN 的 loss 和正則項等因素如何影響的收斂過程,由此可以針對性地提出一些訓練策略,引導 GAN 模型到達理論均衡點,從而提高 GAN 的效果。?
事實上,不僅僅是 GAN,對于一般的模型理解,也可以大致上分為這三個階段。當然也許有熱衷于幾何解釋或其他詮釋的讀者會不同意第二點,覺得沒必要非得概率分布的角度來理解。但事實上幾何視角和概率視角都有一定的相通之處,而本文所寫的三個階段只是一個粗糙的總結,簡單來說就是從局部到整體,然后再到優化器。?
而本文主要聚焦于 GAN 的第三個階段:GAN 的動力學。
基本原理
一般情況下,GAN 可以表示為一個 min-max 過程,記作:
其中 maxDL(G,D) 這一步定義了一個概率散度而 maxG 這一步則在最小化散度,相關的討論也可以參考文章《f-GAN簡介:GAN模型的生產車間》[1] 和不用L約束又不會梯度消失的GAN,了解一下?。?
注意,從理論上講,這個 min-max 過程是有序的,即需要徹底地、精確地完成 maxD 這一步,然后才去 minG。但是很顯然,實際訓練 GAN 時我們做不到這一點,我們都是 D,G 交替訓練的,理想情況下我們還希望 D,G 每次只各自訓練一次,這樣訓練效率最高,而這樣的訓練方法對應于一個動力系統。?
動力系統
在我們的“從動力學角度看優化算法”系列中,我們將梯度下降看成是在數學求解動力系統(也就是一個常微分方程組,簡稱 ODEs)。
其中 L(θ) 是模型的 loss,而 θ 是模型的參數。如果考慮隨機性,那么則需要加上一個噪聲項,變成一個隨機微分方程,但本文我們不考慮隨機性,這不影響我們對局部收斂性的分析。假定讀者已經熟悉了這種轉換,下面就來討論 GAN 對應的過程。
GAN 是一個 min-max 的過程,換句話說,一邊是梯度下降,另一邊是梯度上升,假設 φ 是判別器的參數,θ 是判別器的參數,那么 GAN 對應的動力系統是:
當然,對于更一般的 GAN,有時候兩個 L 會稍微不一樣:
不管是哪一種,右端兩項都是一正一負,而就是因為這一正一負的差異,導致了 GAN 訓練上的困難。我們下面就逐步認識到這一點。?
相關工作
將 GAN 的優化過程視為一個(隨機)動力系統,基于這個觀點進行研究分析的文獻已有不少,我讀到的包括 The Numerics of GANs [2]、GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium [3]、Gradient descent GAN optimization is locally stable [4]、Which Training Methods for GANs do actually Converge? [5],而本文只不過是前輩大牛們的工作的一個學習總結。?
在這幾篇文獻中,大家可能比較熟悉的是第二篇,因為就是第二篇提出了 TTUR 的 GAN 訓練策略以及提出了 FID 作為 GAN 的性能指標,而這篇論文的理論基礎也是將 GAN 的優化看成前述的隨機動力系統,然后引用了隨機優化中的一個定理,得出可以給生成器和判別器分別使用不同的學習率(TTUR)。
而其余幾篇,都是直接將 GAN 的優化看成確定性的動力系統(ODEs),然后用分析 ODEs 的方法來分析 GAN。由于 ODEs 的理論分析/數值求解都說得上相當成熟,因此可以直接將很多 ODEs 的結論用到 GAN 中。
Dirac GAN
本文的思路和結果主要參考 Which Training Methods for GANs do actually Converge? [5],這篇論文的主要貢獻如下:?
1. 提出了 Dirac GAN 的概念,借助它可以快速地對 GAN 的性態有個基本的認識;?
2. 完整地分析了帶零中心梯度懲罰的 WGAN(也是 WGAN-div)的局部收斂性;?
3. 利用零中心梯度懲罰的 WGAN 訓練了 1024 的人臉、256 的 LSUN 生成,并且不需要像 PGGAN 那樣漸進式訓練。?
由于實驗設備限制,第三點我們難以復現,而第二點涉及到比較復雜的理論分析,我們也不作過多討論,有興趣攻克的讀者直接讀原論文即可。本文主要關心第一點:Dirac GAN。?
所謂 Dirac GAN,就是考慮真樣本分布只有一個樣本點的情況下,待研究的 GAN 模型的表現。假設真實樣本點是零向量 0,而假樣本為 θ,其實它也代表著生成器的參數;而判別器采用最簡單的線性模型,即(加激活函數之前)為 D(x)=x?φ,其中 φ 代表著判別器的參數。Dirac GAN 就是考慮這樣的一個極簡模型下,假樣本最終能否收斂到真樣本,也就是說 θ 最終能否收斂到 0。?
然而,原論文只考慮了樣本點的維度是一維的情形,即 0,θ,φ 都是標量,但本文后面的案例表明,對于某些例子,一維 Dirac GAN 不足以揭示它的收斂性態,一般情況下至少需要 2 維 Dirac GAN 才能較好地分析一個 GAN 的漸近收斂性。
常見GAN分析
上一節我們給出了 Dirac GAN 的基本概念,指出它可以幫助我們對 GAN 的收斂性態有個快速的認識。在這部分內容中,我們通過分析若干常見 GAN,來更詳細地表明 Dirac GAN 怎么做到這一點。?
Vanilla GAN
Vanilla GAN,或者叫做原始 GAN、標準 GAN,它就是指 Goodfellow 最早提出來的 GAN,它有 saturating 和 non-saturating 兩種形式。作為例子,我們來分析比較常用的 non-saturating 形式:
這里的 p(x),q(x) 分別是真假樣本分布,而 q(z) 是噪聲分布,D(x) 用 sigmoid 激活。對應到 Dirac GAN 下,那就簡單得多,因為真樣本只有一個點而且為 0,所以判別器的 loss 只有一項,而判別器可以完全寫出為 θ?φ,其中 θ 也就是假樣本,或者說生成器,最終結果是:
對應的動力系統是:
這個動力系統的均衡點(讓右端直接等于 0)是 φ=θ=0,也就是假樣本變成了真樣本。但問題是從一個初始點出發,該初始點最終能否收斂到均衡點卻是個未知數。
▲?數值求解的non-saturating的Dirac GAN的優化軌跡(二維情形),可以發現它確實只是在均衡點(紅色點)周圍振蕩,不收斂
為了做出判斷,我們假設系統已經跑到了均衡點附近,即 φ≈0,θ≈0,那么可以近似地線性展開:
最終近似地有:
學過常微分方程的同學都知道,這是最簡單的線性常微分方程之一,只要初始值不是 0,那么它的解是一個周期解,也就是說并不會出現 θ→0 的特性。換句話說,對于 non-saturating 的 Vanilla GAN,哪怕模型的初始化已經相當接近均衡點了,但是它始終不會收斂到均衡點,而是在均衡點附近振蕩。數值模擬的結果則進一步證明了這一點。?
事實上,類似的結果出現在任何形式的 f-GAN 中,即以 f 散度為基礎的所有 GAN 都存在同樣的問題(不計正則項),即它們會慢慢收斂到均衡點附近,最終都只是在均衡點附近振蕩,無法完全收斂到均衡點。?
這里再重復一下邏輯:我們知道系統的理論均衡點確實是我們想要的,但是從任意一個初值(相當于模型的初始化)出發,經過迭代后最終是否能跑到理論均衡點(相當于理想地完成 GAN 的訓練),這無法很顯然地得到結果,至少需要在均衡點附近做線性展開,分析它的收斂性,這就是說所謂的局部漸近收斂性態。
WGAN
f-GAN 敗下陣來了,那 WGAN 又如何呢?它又能否收斂到理想的均衡點呢??
WGAN 的一般形式是:
對應到 Dirac GAN,D(x)=x?φ,而 ‖D‖L≤1 可以由 ‖φ‖=1 來保證(‖?‖ 是 l2 模長),換言之,D(x) 加上 L 約束后為 D(x)=x?φ/‖φ‖,那么 WGAN 對應的 Dirac GAN 為:
對應的動力系統是:
我們主要關心 θ 是否會趨于 0,可以引入類似前一節的線性展開,但是由于 ‖φ‖ 在分母,所以討論起來會比較困難。最干脆的方法是直接數值求解這個方程組,結果如下圖:
▲?數值求解的WGAN對應的Dirac GAN的優化軌跡(二維情形),可以發現它確實只是在均衡點(紅色點)周圍振蕩,不收斂
可以看到,結果依然是在均衡點附近振蕩,并沒能夠達到均衡點。這個結果表明了,WGAN(同時自然也包括了譜歸一化)都沒有局部收斂性,哪怕已經跑到了均衡點附近,依然無法準確地落在均衡點上。?
注:稍加分析就能得出,如果只考慮一維的 Dirac GAN,那么將無法分析本節的 WGAN 和后面的 GAN-QP,這就是只考慮一維情形的局限性。
WGAN-GP
大家可能會疑惑,前面不是討論了WGAN了嗎,怎么還要討論WGAN-GP??
事實上,從優化角度看,前面所說的 WGAN 和 WGAN-GP 是兩類不一樣的模型。前面的 WGAN 是指事先在判別器上加上 L 約束(比如譜歸一化),然后進行對抗學習;這里的 WGAN-GP 指的是判別器不加 L 約束,而是通過梯度懲罰項(Gradient Penalty)來迫使判別器具有 L 約束。
這里討論的梯度懲罰有兩種,第一種是?Improved Training of Wasserstein GANs [6] 提出來的“以1為中心的梯度懲罰”,第二種是 Wasserstein Divergence for GANs [7]、Which Training Methods for GANs do actually Converge? [5] 等文章提倡的“以 0 為中心的梯度懲罰”。下面我們會對比這兩種梯度懲罰的不同表現。?
梯度懲罰的一般形式是:
其中 c=0 或 c=1,而 r(x) 是 p(x) 和 q(x) 的某個衍生分布,一般直接取真樣本分布、假樣本分布或者真假樣本插值。?
對于 Dirac GAN 來說:
也就是說它跟 x 沒關系,所以 r(x) 怎么取都不影響結果了。因此,WGAN-GP 版本的 Dirac GAN 形式為:
對應的動力系統是:
下面我們分別觀察 c=0,c=1 時 θ 是否會趨于 0,當 c=0 時其實只是一個線性常微分方程組,可以解析求解,但 c=1 時比較復雜,因此簡單起見,我們還是直接用數值求解的方式:
▲?數值求解的WGAN-GP(c=0)對應的Dirac GAN的優化軌跡(二維情形),可以發現它能夠漸近收斂到均衡點(紅色點)
▲?數值求解的WGAN-GP(c=1)對應的Dirac GAN的優化軌跡(二維情形),可以發現它確實只是在均衡點(紅色點)周圍振蕩,不收斂
上圖是在同樣的初始條件(初始化)下,c=0,c=1 的梯度懲罰的不同表現,兩圖的其他參數都一樣。可以看到,加入“以1為中心的梯度懲罰”后,Dirac GAN 并沒有漸近收斂到原點,反而只是收斂到一個圓上;而加入“以 0 為中心的梯度懲罰”則可以達到這個目的。這說明早期提出的梯度懲罰項確實是存在一些缺陷的,而“以 0 為中心的梯度懲罰”在收斂性態上更好。
盡管上述僅僅對Dirac GAN做了分析,但結論具有代表性,因為關于0中心的梯度懲罰的優越性的一般證明在 Which Training Methods for GANs do actually Converge? [5] 中已經給出,并得到實驗驗證。
GAN-QP
最后來分析一下自己提出的 GAN-QP 表現如何。相比 WGAN-GP,GAN-QP 用二次型的差分懲罰項替換了梯度懲罰,并補充了一些證明。相比梯度懲罰,差分懲罰的最主要優勢是計算速度更快。?
GAN-QP 可以有多種形式,一種基本形式是:
對應的 Dirac GAN 為:
對應的動力系統是:
數值結果如下圖(第一個圖像):
▲?數值求解的GAN-QP對應的Dirac GAN的優化軌跡(二維情形),可以發現它確實只是在均衡點(紅色點)周圍振蕩,不收斂
▲?數值求解的帶有L2正則項的GAN-QP版本的Dirac GAN,其他條件一樣,僅加入了L2正則,這表明適當的L2正則項有可能誘導收斂
很遺憾,同大多數 GAN 一樣,GAN-QP 也是振蕩的。
緩解策略
通過上面的分析,我們得到的結論是:目前零中心的 WGAN-GP(或者稱為 WGAN-div)的理論性質最好,只有它是局部收斂的,其余的 GAN 變體都一定的振蕩性,無法真正做到漸近收斂。當然,實際情況可能復雜得多,Dirac GAN 的結論只能一定程度上說明問題,帶來一個直觀感知。?
那么,如果 Dirac GAN 的結論具有代表性的話(即多數 GAN 實際情況下都難以真正收斂,而是在均衡點附近振蕩),我們應該如何緩解這個問題呢??
L2正則項
第一個方案是考慮往(任意 GAN 的)判別器的權重加入 L2 正則項。綜上所述,零中心的梯度懲罰確實很好,但無奈梯度懲罰太慢,如果不愿意加梯度懲罰,那么可以考慮加入 L2 正則項。?
直觀上看,GAN 在均衡點附近陷入振蕩,達到一種動態平衡(周期解,而不是靜態解),而 L2 正則項會迫使判別器的權重向零移動,從而有可能打破這種平衡,如上圖中的第二個圖像。在我自己的 GAN 實驗中,往判別器加入一個輕微的 L2 正則項,能使得模型收斂更穩定,效果也有輕微提升。(當然,正則項的權重需要根據模型來調整好。)
權重滑動平均
事實上,緩解這個問題最有力的技巧,當屬權重滑動平均(EMA)。
權重滑動平均的基本概念,我們在“讓Keras更酷一些!”:中間變量、權重滑動和安全生成器已經介紹過。對于 GAN 上的應用,其實不難理解,因為可以觀察到,盡管多數 GAN 最終都是在振蕩,但它們振蕩中心就是均衡點!所以解決方法很簡單,直接將振蕩的軌跡上的點平均一下,得到近似的振蕩中心,然后就得到了一個更接近均衡點(也就是更高質量)的解!?
權重滑動平均帶來的提升是非常可觀的,如下圖比較了有無權重滑動平均時,O-GAN 的生成效果圖:
▲?沒有權重滑動平均時的隨機生成效果
▲?權重滑動平均的衰減率為0.999時的隨機生成效果
▲?權重滑動平均的衰減率為0.9999時的隨機生成效果
可以看到,權重滑動平均幾乎給生成效果帶來了質的提升。衰減率越大,所得到的生成結果越平滑,但同時會喪失一些細節;衰減率越小,保留的細節越多,但自然也可能保留了額外的噪聲。現在主流的 GAN 都使用了權重滑動平均,衰減率一般為 0.999。
順便說一下,在普通的監督訓練模型中,權重滑動平均一般也能帶來收斂速度的提升,比如下圖是有/無權重滑動平均時,ResNet20 模型在 cifar10 上的訓練曲線,全程采用 Adam 優化器訓練,學習率恒為 0.001,權重滑動平均的衰減率為 0.9999:
▲?有無EMA時Adam默認學習率訓練ResNet20的表現
可以看到,加上權重滑動平均之后,模型以一種非常平穩、快速的姿態收斂到 90%+ 的準確率,而不加的話模型準確率一直在 86% 左右振蕩。這說明類似 GAN 的振蕩現象在深度學習訓練時是普遍存在的,通過權重平均可以得到質量更好的模型。
文章小結
本文主要從動力學角度探討了 GAN 的優化問題。跟本系列的其他文章一樣,將優化過程視為常微分方程組的求解,對于 GAN 的優化,這個常微分方程組稍微復雜一些。?
分析的過程采用了 Dirac GAN 的思路,利用單點分布的極簡情形對 GAN 的收斂過程形成快速認識,得到的結論是大多數 GAN 都無法真正收斂到均衡點,而只是在均衡點附近振蕩。而為了緩解這個問題,最有力的方法是權重滑動平均,它對 GAN 和普通模型訓練都有一定幫助。
本文作圖代碼參考:
https://github.com/bojone/gan/blob/master/gan_numeric.py
參考文獻
[1]?https://kexue.fm/archives/6016
[2] Lars Mescheder and Sebastian Nowozin and Andreas Geiger. "The Numerics of GANs". Advances in Neural Information Processing Systems. 2017.?
[3] Martin Heusel, Hubert Ramsauer, Thomas Unterthiner, Bernhard Nessler and Sepp Hochreiter. "GANs Trained by a Two Time-Scale Update Rule Converge to a Local Nash Equilibrium". Advances in Neural Information Processing Systems. 2017.?
[4] Vaishnavh Nagarajan, J. Zico Kolter. "Gradient descent GAN optimization is locally stable". Advances in Neural Information Processing Systems. 2017.?
[5] Lars Mescheder, Andreas Geiger and Sebastian Nowozin. "Which Training Methods for GANs do actually Converge?". International Conference on Machine Learning 2018.?
[6] Ishaan Gulrajani, Faruk Ahmed, Martin Arjovsky, Vincent Dumoulin and Aaron Courville. "Improved Training of Wasserstein GANs". Advances in Neural Information Processing Systems. 2017.?
[7] Jiqing Wu, Zhiwu Huang, Janine Thoma, Dinesh Acharya and Luc Van Gool. "Wasserstein Divergence for GANs". The European Conference on Computer Vision (ECCV). 2018.
點擊以下標題查看作者其他文章:?
變分自編碼器VAE:原來是這么一回事 | 附源碼
再談變分自編碼器VAE:從貝葉斯觀點出發
變分自編碼器VAE:這樣做為什么能成?
簡單修改,讓GAN的判別器秒變編碼器
深度學習中的互信息:無監督提取特征
全新視角:用變分推斷統一理解生成模型
細水長flow之NICE:流模型的基本概念與實現
細水長flow之f-VAEs:Glow與VAEs的聯姻
深度學習中的Lipschitz約束:泛化與生成模型
#投 稿 通 道#
?讓你的論文被更多人看到?
如何才能讓更多的優質內容以更短路徑到達讀者群體,縮短讀者尋找優質內容的成本呢?答案就是:你不認識的人。
總有一些你不認識的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學者和學術靈感相互碰撞,迸發出更多的可能性。
PaperWeekly 鼓勵高校實驗室或個人,在我們的平臺上分享各類優質內容,可以是最新論文解讀,也可以是學習心得或技術干貨。我們的目的只有一個,讓知識真正流動起來。
??來稿標準:
? 稿件確系個人原創作品,來稿需注明作者個人信息(姓名+學校/工作單位+學歷/職位+研究方向)?
? 如果文章并非首發,請在投稿時提醒并附上所有已發布鏈接?
? PaperWeekly 默認每篇文章都是首發,均會添加“原創”標志
? 投稿郵箱:
? 投稿郵箱:hr@paperweekly.site?
? 所有文章配圖,請單獨在附件中發送?
? 請留下即時聯系方式(微信或手機),以便我們在編輯發布時和作者溝通
?
現在,在「知乎」也能找到我們了
進入知乎首頁搜索「PaperWeekly」
點擊「關注」訂閱我們的專欄吧
關于PaperWeekly
PaperWeekly 是一個推薦、解讀、討論、報道人工智能前沿論文成果的學術平臺。如果你研究或從事 AI 領域,歡迎在公眾號后臺點擊「交流群」,小助手將把你帶入 PaperWeekly 的交流群里。
▽ 點擊 |?閱讀原文?| 查看作者博客
總結
以上是生活随笔為你收集整理的从动力学角度看优化算法:GAN的第三个阶段的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实录 | 平安人寿资深算法工程师张智:人
- 下一篇: 微软论文解读:用于视觉对话的多步双重注意