從GAN 到 ALICE 的簡單介紹

2021-08-21 00:22:21 字數 2582 閱讀 1498

gan

gan由乙個判別器和乙個生成器組成,gan的目標是訓練乙個生成器來獲取資料的分布。判別器的訓練目標是在真實樣本和生成器生成的假樣本裡識別出真實樣本,生成器的訓練目標是盡可能地讓判別器識別錯誤,所以gan的整體目標函式是對交叉熵損失函式進行minmax優化。

gan的具體實現是在每次迭代裡同時對生成器和判別器的引數進行梯度優化,而且**證明了通過這個演算法可以讓生成器的資料分布收斂於真實樣本的分布。但gan的訓練需要生成器和判別器的良好協調,如果生成器訓練過多,則容易導致太多的隨機變數對映到同乙個生成樣本上。**裡還**了獲取條件分布以及從真實樣本對映到雜訊變數的可能性。

pix2pix通過conditionalgenerative adversarial nets (cgan) 來實現影象到影象的轉換。

cgan將gan拓展為獲取資料的條件分布,通過在生成器和判別器的輸入裡加上額外的資訊來實現,額外的資訊可以是任意種類的資料,比如資料標籤、影象等等。因此cgan與gan的區別在於和都需要合併上額外資訊,然後作為新的和分別輸入到判別器和生成器。

pix2pix需要用到成對的訓練資料(x,y)。其中x作為cgan裡的額外資訊同時輸入到生成器和判別器中,y作為真實的輸出樣本。pix2pix的損失函式是在cgan的損失函式基礎上加上真樣本與假樣本之差的範數。另外,pix2pix用dropout來代替cgan的雜訊輸入z,用u-net來作為生成器的結構。pix2pix的優點在於只用同樣方法就能解決各種影象轉換問題,但pix2pix的缺點是不適用於一些沒有成對的訓練樣本的場景。

pix2pix不適用於沒有成對樣本的訓練集,為了解決這個問題,cyclegan應運而生。假設有兩個資料域x和y,我們需要學習乙個對映g: x→y。上文提到,gan容易導致多個輸入對映到同乙個輸出,為了解決這個問題,cyclegan引入了乙個對映f: y→x,並且要使得f(g(x))≈x。對映g與對映f是兩個方向相反的gan,因此cyclegan由兩個gan組成,每個gan裡都有乙個生成器和判別器。

cyclegan的損失函式由兩大部分組成:

第一部分是adversarial loss,adversarial loss是為了讓生成器g和生成器f分別得到條件分布 p(y|x) 和 p(x|y)。

第二部分是cycle consistency loss:

cycle consistency loss 是為了保證 f(g(x))≈x 和 g(f(y))≈y,這樣可以防止多個輸入對映到同乙個輸出上。

上文的gan和pix2pix都只是學習了乙個將潛在變數對映到訓練樣本域的生成器,但無法將訓練樣本對映為潛在變數。而ali能夠同時學習生成器和推斷器( inference network )。

如上圖所示,ali由乙個編碼器,乙個解碼器和乙個判別器組成,判別器的輸入為潛在變數和訓練樣本的聯合樣本,判別器需要判斷乙個聯合樣本是來自於編碼器還是解碼器。而編碼器和解碼器的訓練目標則是盡可能的讓判別器判斷錯誤。所以ali的目標是讓編碼器的聯合分布接近解碼器的聯合分布。ali的目標函式為

跟gan訓練過程類似,ali也是在每次迭代中同時更新生成器和判別器的引數。

ali的目標只是讓編碼器和解碼器的聯合分布盡可能地接近,但是沒有考慮潛在變數和真實訓練樣本之間的約束,因此仍然有可能出現多個輸入對映到同乙個輸出的問題。而上文提到的cyclegan也是同時訓練乙個generation network 和inference network,並且cyclegan引入了cycleconsistency loss來防止多個輸入對映到同乙個輸出。

因此是否可以結合cyclegan和ali來得到乙個更好的inference network?alice就是做了這樣乙個工作。

理論上來說,z已知時,x的不確定性由x關於z的條件熵確定,條件熵越小,的不確定性越小。當條件熵為0時,x則有唯一的值。因此alice在ali的損失函式上加入了條件熵:

但是條件熵難以直接求解,因此**裡證明了條件熵的上界為cyclegan裡的cycle consistency loss,所以損失函式轉化為

除此之外,alice還嘗試用對抗學習的方法來替代cycle consistency loss,具體來說,是增加乙個判別器來區別重建的樣本和真實樣本:

GAN的簡單入門

最近在準備畢業設計的開題,基本確定了gan這個大方向,接下來一年計劃用部落格記錄一下gan的學習歷程吧。今天先記錄一下對於gan的一些個人理解。gan的全稱叫生成對抗網路,主要用於生成與真實樣本相似的樣本。gan包含了兩個模組,乙個是用於生成樣本的生成網路generative,另乙個是用來判別樣本是...

從 RGB 到 HSV 的轉換詳細介紹

從rgb 到 hsv 的轉換詳細介紹 1.rgb rgb是從顏色發光的原理來設計定的,通俗點說它的顏色混合方式就好像有紅 綠 藍三盞燈,當它們的光相互疊合的時候,色彩相混,而亮度卻等於兩者亮度之總和,越混合亮度越高,即加法混合。紅 綠 藍三個顏色通道每種色各分為256階亮度,在0時 燈 最弱 是關掉...

從整體到細節,簡單的Bootstrapt的使用

什麼是bootstrapt?就是乙個前端的框架,它提供了一些很方便的css樣式給我們,讓我們可以直接將這些css樣式用在dom塊中,實現乙個漂亮的介面。同時,這個功能也簡單的封裝了很多的jquery語法之類的,可以為我們使用。我們通常來說,用的最多的會是 響應式圖形 響應式,就是隨著介面擴大而擴大那...