GANs和低效映射

GANs和低效映射

生成對抗網絡(GANs)被譽為生成藝術領域的下一紀元,這是有充分理由的。新技術一直是藝術的驅動因素,從顏料的發明到照相機再到Photoshop-GAN是自然而然的。例如,考慮下面的圖片,由埃爾加馬勒發表在2017年的論文。

GANs和低效映射

如果你不熟悉GAN,那麼本文將簡要介紹訓練過程。簡而言之,GAN將隨機噪聲作為輸入,並且產生的輸出與真實數據是無法區分的(如果訓練順利的話),其中真實數據幾乎可以是任何東西(一組抽象繪畫,名人頭像照片,手寫數字等) )。

在GAN文獻中,與之前的變分自編碼器一樣,輸入值常常與輸出沒有明確的關係,這是一個得到充分證明的問題。正如我前面提到的,GANs接受隨機噪聲(通常是100個隨機的、正態分佈的值)作為輸入,每個隨機數都可以看作是輸出的控制槓桿。理想情況下,每個槓桿都對應一個特徵,例如在生成人臉的情況下,將有一個槓桿用於微笑和皺眉,一個用於膚色,一個用於頭髮長度,等等;在藝術創作時這種情況很少發生,因此使用GANs進行藝術創作就成了一種挑戰。作為這個問題的可視化,考慮以下動畫:

GANs和低效映射

在這裡,我使用16維的空間在MNIST手寫數字數據集上訓練了一個GAN。我使用這個GAN生成了一個隨機樣本,然後說明當一個輸入值被調整而其他值被固定在適當的位置時,輸出是如何變化的。正如你所看到的,這兩種槓桿都不會以人類可能覺得直觀或有用的方式改變輸出;第一個槓桿控制數字是7還是9以及筆畫角度,而第二個槓桿控制數字是7還是9以及筆畫厚度。可以想象生成“手寫”數字的理想工具是什麼樣子的:第一個控制桿控制要生成的數字,從0到9;第二槓桿控制衝程的厚度;第三個控制筆畫角度;第四,循環,你懂的。相反,我們看到這些特徵中的一些是由一個槓桿控制的,而這些特徵中的一個是由多個槓桿控制的。想象一下,如果Photoshop的旋轉工具也通過色輪旋轉圖像的色調,那該有多令人沮喪!

這裡的一個明顯的問題是,這使得生成圖像的接口效率很低,而且非常混亂。然而,還有另一個不太明顯的問題:輸入和輸出之間扭曲而複雜的關係也妨礙了訓練並限制了輸出的整體質量。

問題一:螺旋

正如我在本文中所解釋的,GAN本質上是用於對某些數據分佈建模的工具,無論是正態分佈還是人臉分佈。因此,GAN是從某些潛在空間到某些樣本空間的轉換或映射。當GAN作為學生全神貫注於諸如圖像生成之類的高維問題時,這一點常常被忽視。在這裡,我打算使用簡單的二維問題來演示低效的映射問題,其中第一個問題在此處進行了說明:

GANs和低效映射

這是一個相當簡單的函數,它將輸入空間中的x軸映射到樣本空間中沿著螺旋的位置(角度和半徑),並將y軸映射到螺旋內的橫向位置。出於可視化的目的,x軸也映射到色相,y軸也映射到值(彩色與黑色)。為了進一步闡明此功能,請考慮以下動畫:

GANs和低效映射

因此,問題是要訓練一個能夠從這種螺旋分佈中採樣點的GAN,這樣就很難分辨出GAN的批次和真實函數的批次。注意,GAN不必學習原始映射。只要輸出分佈相同,任何映射都可以。

結果:

GANs和低效映射

使用典型的GAN訓練技術對GAN進行了60000次步驟的訓練(代碼在本文結尾)。如你所見,GAN成功學習了螺旋分佈。但是,它有幾個問題:

  1. 它比目標函數要瘦很多。儘管螺旋的某些部分具有一定的寬度,但GAN實質上已將這種分佈減小為二維空間中的一維流形。
  2. 輸出混亂。注意分散在螺旋形負空間中的點。這些永遠不會在目標函數中發生,那麼它們在做什麼?
  3. 注意點(0.60,-0.63)和(0.45,0.17)上的奇怪偽像; 這些不連續性會在分佈中造成漏洞。
  4. 將GAN產生的螺旋中的色相和值的分佈與原始函數中的相比較(圖3);它們的順序性不明顯,並且在潛在空間(控制桿)和輸出之間沒有明確的關係。

在此動畫中說明了所有這四個問題:

GANs和低效映射

正如你所看到的,這四個問題實際上是同一個問題。對比圖6和圖4,我們可以看到GAN學會了一個低效的映射。首先,考慮潛空間右上角的撕裂;撕裂上方的潛在空間區域被映射到螺旋的最外層,而緊挨著撕裂下方的區域被映射到螺旋的中心。這種撕裂行為解釋了混亂(問題2);位於裂縫上的任何一點都映射到這兩個極端之間的某個地方,通常落在螺旋的負空間中。它也解釋了(0.60,-0.63)處的偽影(問題3),因為在這個區域生成的點是從潛在空間的遠處點映射而來的,這也是為什麼顏色的色調和值也沒有對齊(第4期)。最後,學習分佈(問題1)的瘦性是由映射的複雜性來解釋的;分佈的大部分方差來自於沿螺旋的位置,在螺旋寬度內的位置不那麼顯著。因此,Gan首先學會了如何創造螺旋。每當它試圖擴展時,映射的複雜性就會導致其他一些區域中斷。Gan基本上把自己困在了一個無法逃脫的局部極小值中。如果你很好奇,以下是GAN在訓練時的樣子:

GANs和低效映射

圖顯示GAN迅速瞭解了最外層和最內層區域的不兼容映射,並且分佈的剩餘 部分不得不在它們之間進行協調。

問題二:八個高斯

GANs和低效映射

這個函數將2.5維空間映射到2維空間。潛在空間的前兩個維度是獨立的、標準的正態分佈的值。剩下的“0.5”是一個包含8個可能值的離散維度,編碼為長度為8的向量,其中一個值被設置為1,而其他值為0。在圖8中,通過在x軸和y軸上繪製兩個連續維度來表示潛在空間中的隨機樣本,而用顏色表示離散維度。目標函數將這個潛在空間映射到樣本空間,方法是將正態分佈重新縮小0.2倍,並根據潛在維度的值將其移動到8個點之一。過程如下:

GANs和低效映射

因此,問題是要訓練一個能夠從這八個高斯分佈中採樣點的GAN,使得GAN的批處理和真實函數的批處理是無法區分的。請注意,就像上述螺旋問題一樣,GAN不必學習原始映射,如果有一個簡單的映射當然更好。

結果:

GANs和低效映射

結果不好。GAN完全無法在兩種模式下生成樣本(模式崩潰),它在模式之間產生了大量的點,無法生成正態分佈的模式,並且潛空間和樣本空間之間顯然沒有合理的關係。在以下動畫中,這一點更加明顯:

GANs和低效映射

很明顯,兩個連續潛值內的不同區域被切割並映射到六個樣本空間模式。這和螺旋問題中的撕裂問題是一樣的;落在裂縫上的點被映射到模式之間的負空間。儘管有簡單的解決方案(即按比例縮小連續維度並將離散維度中的每個值映射到不同的模式),GAN還是陷入了局部最小值,無法再將自己挖出來。

問題三:一個高斯

GANs和低效映射

八高斯問題顯然太難了,所以這裡有一個更簡單的問題:把二維均勻噪聲轉換成二維標準正態噪聲。就像在螺旋問題中一樣,點是通過沿著x軸旋轉色相和沿著潛在空間的y軸變化值來著色的。最簡單的映射很簡單:獨立地展開每個維度。如下圖所示:

GANs和低效映射

結果:

GANs和低效映射

如你所見,即使涉及從二維正態分佈之類的簡單樣本中進行採樣,GAN仍然將自身束縛在一起。最值得注意的是,GAN似乎將潛在空間摺疊了起來,從而在樣品空間的右下角產生了扭結,縫隙和突起。這是插值的動畫:

GANs和低效映射

總結

我希望上面的可視化說明已經清楚地表明,輸入和輸出特徵之間的模糊關係不僅僅是一個難點,而是一個基本問題。如果你對用於訓練上述GANs或可視化代碼的代碼感興趣,可以通過以下github倉庫獲得:

https://github.com/ConorLazarou/medium/tree/master/12020/visualizingganmapping


分享到:


相關文章: