[譯] 2018 年最佳 GAN 論文
今年,我很高興參與一個研究專案,這項研究專案要求我熟悉大量計算機視覺深度學習領域的出版物。這讓我深入瞭解了這個領域,我對過去2 - 3年所取得的進展感到驚訝。令人興奮和鼓舞的是,像影象修復,對抗性示例,超解析度或3D重建這些子領域從最近的進展中受益匪淺。
然而,有一種神經網路,它受到了大量的宣傳和炒作 — 生成性對抗網路(Generative Adversarial Networks,GANs)。我也認為這種模型是非常吸引人的,並且我也一直在尋找一些GAN的新思路。
受Reddit網站上討論區的啟發,我決定快速地瀏覽一下2018年關於GAN最有趣的文章。這份名單非常的主觀 — 我選擇的研究論文不僅是最高水平的,而且也都非常的有趣。在第一章中,我將討論其中的三篇。順便說一下,如果你對以前的GAN論文感興趣,這一篇文章可能會有所幫助,作者在文中提到的一篇論文排在了我的名單上的第一位。
1.GAN 解析:視覺化和理解生成性對抗網路 — 考慮到 GAN 的大肆宣傳,很明顯這項技術遲早會被商業化應用。然而,因為我們對其內部機制瞭解的不多,所以我認為要生產一個可靠的產品仍然很困難。不過這項工作仍然向未來邁出了巨大的一步,在未來我們能夠真正控制 GAN 。因此,一定要看看他們偉大的互動演示,結果是令人震驚的;
2. 一種用於生成性對抗網路的基於生成器體系結構 – NVIDIA (英偉達)的研究團隊會定期地提出一些具有開創性的概念( 2018 年的 關於影象修復的論文 ,近期的用 神經網路進行圖形繪製 的演示)。這篇論文也不例外,加上顯示結果的視訊就更有吸引力了;
3. 進化生成性對抗網路 — 這是一個真正簡單易懂的文章。進化演算法和 GAN 一起 — 這肯定很有趣
1.GAN 解析 : 視覺化和理解生成性對抗網路 ( GAN Dissection: Visualizing and Understanding Generative Adversarial Networks )
詳解
該論文已於 2018 年 11 月 26 日提交。作者以互動式演示的方式建立了一個非常不錯的 專案網站 。
主要思想:
GAN 無疑證明了深度神經網路的強大。機器學習生成令人震驚的、高解析度影象的方式是非常美妙的,就彷彿它像我們一樣瞭解這個世界。但是,和其它的那些出色的統計模型一樣, GAN 最大的缺陷是缺乏可解釋性。這項研究為理解 GAN 邁出了非常重要的一步。它允許我們在生成器中找到 “ 負責 ” 生成某些屬於 class c 的物件單元。作者們聲稱,我們可以檢查生成器的一個層,並找到導致在生成影象中形成 c 物件的單元子集。作者們通過兩個步驟:解剖和干預,為每個類尋找一組 “ 因果 ” 單元。另外,這可能是第一項工作,為了解 GAN 的內部機制提供了系統的分析。
方法:
生成器 G 可以被看作是從潛在的向量 z 到一個生成的影象 x=G(z) 的對映。我們的目標是理解引數 r ,一種內部的表示,它是生成器 G 的特定層的輸出。
關於 c 類的物件,我們想仔細看下引數 r 。我們知道引數 r 包含關於一個這些特定物件生成的編碼資訊。我們的目標是瞭解這個資訊是如何在內部編碼的。作者們聲稱有一種方法可以從引數 r 中提取這些單元,而 r 負責生成類 c 的物件。
這裡, 是特定層中所有單元的集合,引數 U 是目標單元,引數 P 是畫素位置。問題來了,如何進行這種分離?作者們提出了兩個步驟,這兩個步驟是理解 GAN 黑盒子的工具。就是解析和干預。
一個單元 u 和一個類 c 之間的解析測量一致性
解析 — 我們要識別那些有趣的類,它們在 r 中有一個明確的表示方法。這基本上是通過比較兩個影象來完成的。首先通過計算 x 獲得第一個影象,然後通過語義分割網路來執行。這將返回與目標類別(例如:樹木)相對應的畫素位置。第二個影象是通過用 r u ,p 進行上取樣,因此它與 s c (x) 的維度相匹配,然後再對其進行閾值處理,以便對被這個特定單元所 “ 發亮 ” 的畫素做出艱難的決定。最後,我們計算了兩個輸出之間的空間一致性。值越高,單元 u 對類 c 的因果效應就越大。通過對每個單元執行這個操作,我們最終應該找出哪些類在 r 的結構中有一個明確的表示方法。
干預測量一組單元 U 對類 c 的因果效應
干預 — 在這一點上,我們已經確定了相關的類。現在,我們試圖為每個類找到最好的分離方式。這意味著,一方面我們抑制非受迫單元,希望目標類將從生成的影象上消失。另一方面,我們擴大了因果單元對生成影象的影響。這樣我們就可以瞭解到他們對目標類 c 的存在有多大的貢獻。最後,我們從兩個影象中分割出類 c 並進行對比。語義圖之間的一致性越小越好。這意味著在一個影象上,我們完全 “ 排除 ” 了樹木的影響,而第二個影象只包含一片樹林。
結果:
a ) Progressive GAN 生成的教堂影象 b )根據所給的預訓練的 Progressive GAN ,我們確定了負責生成 “ 樹 ” 類的單元 c )我們可以阻止那些單元 “ 刪除 ” 影象中的樹 d )擴大影象中樹的密度。
上述結果表明,我們對網路內部的機制有了很好的理解。這些見解可以幫助我們改善網路行為。瞭解影象的哪些特徵來自於神經網路的哪個部分,對於理解說明、商業應用和進一步的研究都是非常有價值的。
a )出於除錯的目的,我們可以確定那些有偽影的單元 …… , b )和 c )把它們去掉了,以 “ 修復 ”GAN 。
一個可以解決的問題是在生成的影象中有看得見的偽影。即使是一個訓練很好的 GAN 有時也能產生一個極其不現實的影象,而這些錯誤的原因以前是未知的。現在我們可以將這些錯誤與導致視覺偽影的神經元聯絡起來。通過識別和阻止這些單元,可以提高生成的影象質量。
通過將某些單元設定為固定的平均值(例如,門),我們可以確保門將出現在影象中的某個位置。當然,這不會違反學過的分佈統計(我們不能強迫門出現在空中)。另一個限制來自於這樣一個事實,即一些物件與某些位置之間的聯絡是非常的緊密,以至於無法將它們從影象中消除。舉個例子:不能簡單地把椅子從會議室裡刪除掉,那樣只會降低它們畫素的密度或尺寸。
2.一種用於生成性對抗網路的基於生成器體系結構 ( A Style-Based Generator Architecture for Generative Adversarial Networks )
詳述
該論文已於 2018 年 12 月 12 日提交,程式碼很快就將會發布。另外,對於那些想更多瞭解這種方法但並不想閱讀論文的人來說,部落格上發表了一篇很好的 總結文章 。
主要思想:
這項工作提出了關於 GAN 框架的另一個觀點。更具體地說,它從樣式轉換設計中吸取靈感,建立了一個生成器架構,在生成的影象中可以學習高階屬性(如年齡、在人臉或背景上訓練時的身份、相機視角)和隨機變化(雀斑、頭髮細節)。它不僅學習自動分離這些屬性,而且還允許我們以非常直觀的方式控制合成。
補充的結果回顧視訊
傳統的 GAN 架構(左)與基於樣式的生成器(右)。在新的框架中,我們有兩個網路元件:對映網路 f 與綜合網路 g 。前者將一個潛在的程式碼對映到一箇中間的潛在空間 W , W 對樣式的資訊進行編碼。後者利用生成的樣式和高斯噪聲來建立新的影象。塊 “A” 是一個訓練過的仿射轉換,而塊 “B” 將訓練過的每個通道的比例因子應用於噪聲的輸入。
在經典的 GAN 方法中,生成器以一些潛在的程式碼作為輸入,並輸出一個影象,這屬於它在訓練階段所學習到的分佈。作者們通過建立一個基於樣式的、由兩個元素組成的生成器來背離這種設計:
1. 一個全連線的網路,代表著非線性對映 f:Z→W ;
2. 一個綜合網路 g ;
全連線的網路 — 通過變換一個標準化的潛在向量 z ∈ Z ,我們得到了一箇中間的潛在向量 w=f(z) 。中間的潛在空間 W 有效地控制了生成器的樣式。作為旁註,作者確保避免從 W 的低密度區域取樣。雖然這可能造成 w 的變化損失,但據說最終會導致更好的平均的影象質量。現在,一個從中間的潛在空間取樣的潛在向量 w 被輸入到塊 “A” (訓練的仿射變換)中,並轉換成樣式 y=(y s ,y b ) 。最後通過每個卷積層的 自適應例項標準化 ( adaptive instance normalization , AdaIN )將該風格新增到合成網路中。 AdaIN 操作是這樣定義的:
合成網路 — AdaIN 的操作通過對其進行標準化來改變每個特徵圖 x i ,然後使用來自樣式 y 的分量進行比例縮放和移位。最後,生成器的特徵對映也被提供了一個直接的方式來生成隨機細節 — 顯式的噪聲輸入 — 以包含不相關高斯噪聲的單通道影象的形式。
綜上所述,雖然顯式的噪聲輸入可以被視為在合成網路中生成過程的 “ 種子 ” ,但從 W 抽取的潛在程式碼試圖向影象新增某種樣式。
結果:
作者們從 2017 年的 Progressive GAN 開始重新審視 NVIDIA 的架構。雖然他們掌握了大部分的架構和超引數,但是生成器正在根據新的設計進行 “ 升級 ” 。論文內容最令人印象深刻的特點是樣式的混合。
上圖是視覺化樣式混合的效果。通過讓一個潛在的程式碼(來源)生成一個影象,我們可以覆蓋另一個影象(目標)的特徵子集。這裡,我們覆蓋對應於粗糙空間解析度(低解析度特徵圖)的層。這樣我們就可以影響目標影象的高階特徵了。
這種新奇的生成器結構使其有能力在合成網路的不同層向同一影象新增不同的樣式。在訓練過程中,我們通過對映網路執行兩個潛在程式碼 z1 和 z2 ,並接收相應的 w1 和 w2 兩個向量。完全由 z1 生成的影象被稱為目標。這是一個生成的高解析度影象,幾乎與實際的分佈區區分不出來。僅通過新增 z2 而生成的影象被稱為來源。現在,在使用 z1 生成目標影象的過程中,在某些層,我們可以新增 z2 的程式碼了。此操作將用那些來源來覆蓋目標中存在的樣式子集。來源對目標的影響是由層的位置來控制的,這些層正被來源的潛在程式碼進行 “ 培育 ” 。與特定層對應的解析度越低,來源對目標的影響越大。這樣,我們就可以決定要在多大程度上影響目標影象:
粗糙空間解析度(解析度 4*4 − 8*8 ) — 高階方面,如:髮型、眼鏡或年齡;
·中間樣式解析度(解析度 16*16 − 32*32 ) — 較小比例的面部特徵,如:髮型樣式的細節、眼睛;
·精細解析度(解析度 64*64 − 1024*1024 ) — 只需修改一些小細節,如:頭髮顏色、膚色色調或面板結構;
作者們將他們的方法進一步應用到汽車、臥室甚至是貓的影象中,得到了令人震驚的結果。我仍然困惑為什麼網路的決定會影響到貓的影象中爪子的位置,而不會關心汽車影象中車輪的轉動
我發現真正令人驚奇的是,這個框架可以進一步應用於不同的資料集,比如汽車和臥室的影象。
3.進化生成性對抗網路 ( Evolutionary Generative Adversarial Networks )
細節
該論文已於 2018 年 3 月 1 日提交。
主要思想:
在傳統設定中, GAN 通過交替更新生成器和使用反向傳播的識別器進行訓練。利用在目標函式中的交叉熵機制,實現了雙人 minmax 遊戲。 E-GAN 的作者們提出了一種基於進化演算法的可替代 GAN 框架。他們以進化問題的形式重新聲明瞭損失函式。生成器的任務是在識別器的影響下承受不斷地突變。根據 “ 適者生存 ” 的原則,我們希望最新一代生成器以這樣的方式 “ 進化 ” ,從而學會正確的訓練樣本分佈。
方法:
原始的 GAN 框架(左)與 E-GAN 框架(右)。在 E-GAN 框架中,全部的 Gθ 生成器在一個動態環境中進化 — 即識別器 D 。該演算法涉及三個階段:變化、評估和篩選。最好的子版本被保留下來以供下一次迭代的時候使用。
進化演算法試圖在一個給定的環境(這裡是指識別器)中進化全部的生成器。生成器中的每個個體都代表了生成網路引數空間中的一個可能的解決方案。進化過程歸結為三個步驟:
1. 變化:通過根據一些突變屬性而自我修改,生成器的單個 G θ 生成其子集 G θ 0 , G θ 1 , G θ 2 , . . . … ;
2. 評估:每個子級都將使用一個適應函式進行評估,該函式取決於識別器的當前狀態;
3. 篩選:我們對每個子級進行評估,並決定它在適應函式的方面是否足夠好,如果是,它將被保留,否則就會被丟棄;
上述這些步驟涉及到兩個應該被詳細討論的概念:突變和適應函式:
突變 — 這些是在 “ 變化 ” 步驟中給子級引入的改變。最初的 GAN 訓練目標激發了他們的靈感。作者們區分了三種最有效的突變型別。它們是 minmax 突變(鼓勵將 Jensen-Shannon 分歧最小化)、啟發式突變(添加了反向 Kullback-Leibler 分歧項)和最小二乘突變(受 LSGAN的 啟發);
適應函式 — 在進化演算法中,一個適應函式告訴我們一個給定的子級離達到設定的目標有多接近。這裡,適應函式包括兩個要素:質量適應得分和多樣性適應得分。前者確保了生成器能夠提供欺騙識別器的輸出,而後者則關注生成樣本的多樣性。因此,一方面,培育子版本不僅要很好地接近原始分佈,而且還要保持多樣性,並且避免模式崩潰的陷阱。
作者們聲稱他們的方法解決了多個眾所周知的問題。 E-GAN 不僅在穩定性和抑制模式崩潰方面做得更好,還減輕了選擇超引數和架構(對收斂至關重要)的壓力。最後,作者們聲稱 E-GAN 比傳統的 GAN 框架收斂得更快。
結果:
該演算法不僅對合成資料進行了測試,而且還對 CIFAR-10 的資料集和 Inception 進行了測試。作者們修改了流行的 GAN 方法,如 DCGAN ,並在實際的資料集上對其進行了測試。結果表明,通過訓練 E-GAN ,可以從目標資料分佈中生成各種高質量的影象。根據作者們的想法,在每一個篩選步驟中只保留一個子級就足以成功地將引數空間遍歷到最優的解決方案。我發現 E-GAN 的這個屬性非常有趣。另外,通過對空間連續性的仔細檢查,我們可以發現, E-GAN 的確從潛在的噪聲空間到影象空間學習了一種有意義的預測。通過在潛在向量之間進行插值,我們可以獲得平穩地改變有語義意義的人臉屬性的生成影象。
在潛在空 中線性地插值。生成器已經從 CelebA 資料集中學習了影象的分佈。 α=0.0 對應著從向量 z 1 生成一個影象,而 α=1.0 則意味著影象來自向量 z 2 。通過改變 alpha 的取值,我們可以在潛在的空間內進行插值,效果非常好。
瞭解更多掃描二維碼關注: