1. 程式人生 > 其它 >GAN 並不是你所需要的全部:從AE到VAE的自編碼器全面總結

GAN 並不是你所需要的全部:從AE到VAE的自編碼器全面總結

 

說到計算機生成的影象肯定就會想到deep fake:將馬變成的斑馬或者生成一個不存在的貓。在影象生成方面GAN似乎成為了主流,但是儘管這些模型在生成逼真的影象方面取得了巨大成功,但他們的缺陷也是十分明顯的,而且並不是生成影象的全部。自編碼器(autoencoder)作為生成的影象的傳統模型還沒有過時並且還在發展,所以不要忘掉自編碼器!

GAN 並不是您所需要的全部

當談到計算機視覺中的生成建模時,幾乎都會提到GAN 。使用GAN的開發了很多許多驚人的應用程式,並且可以在這些應用程式中生成高保真影象。但是GAN的缺點也十分明顯:

1、訓練不穩定,經常會出現梯度消失、模式崩潰問題(會生成相同的影象),這使得我們需要做大量的額外工作來為資料找到合適的架構。

2、GAN 很難反轉(不可逆),這意味著沒有簡單的方法可以從生成的影象反推到產生這個影象的噪聲輸入。例如:如果使用可逆生成模型進行生成的影象的增強,可以直接獲得生成影象的特定輸入,然後在正確的方向上稍微擾動它這樣就可以獲得非常相似的影象,但是GAN做到這一點很麻煩。

3、GAN 不提供密度估計。也就是說可以生成影象但無法知道特定特徵出現在其中的可能性有多大。例如:如果對於異常檢測來說密度估計是至關重要的,如果有生成模型可以告訴我們一隻可能的貓與一隻不太可能的貓的樣子,我們就可以將這些密度估計傳遞給下游的異常檢測任務,但是GAN是無法提供這樣的估計的。

自編碼器 (AE) 是一種替代方案。它們相對快速且易於訓練、可逆且具有概率性。AE 生成的影象的保真度可能還沒有 GAN 的那麼好,但這不是不使用他們的理由!

自編碼器還沒有過時

有人說:一旦 GAN 出現,自編碼器就已經過時了。這在某種程度上是正確的, 但時代在進步GAN的出現讓自編碼器的發展有了更多的動力。在仔細地研究後人們已經意識到 GAN 的缺點並接受它們並不總是最適合的模型。,所以目前對自編碼器繼續進行更加深入的研究。

例如,一種被稱為向量量化變分自編碼器 (Vector Quantized Variational AutoEncoder / VQ-VAE ) 的自迴歸 AE 聲稱可以生成與 GAN 的質量相匹配的影象,同時不會有 GAN 的已知缺點,例如模式崩潰和缺乏多樣性等問題。

使用 VQ-VAE-2 生成多樣化的高保真影象”(連結:arXiv:1906.00446)

在論文中,作者通過生成漁民影象將他們的 AE 模型與 DeepMind 的 BigGAN 進行了比較。可以看到 AE 生成的影象之間還是有多少變化的。

另外,在自編碼器領域另一個令人興奮的研究的例子是 VAE / GAN。這種混合模型使用 GAN 的鑑別器在典型的對抗訓練中學到的知識來提高 AE 的生成能力。

“Autoencoding beyond pixels using a learned similarity metric”(arXiv:1512.09300)

在上圖中作者使用他們的模型從學習的表示中重建一組影象,這是 GAN 無法做到的,因為GAN缺乏上面說過的的可逆性。從圖上看重建看起來很不錯。

雖然GAN很重要,但是自編碼器還在以某種方式在影象生成中發揮作用( 自編碼器可能還沒被完全的開發),熟悉它們肯定是件好事。

在本文的下面部分,將介紹自編碼器的工作原理、有哪些不同型別的自編碼器以及如何使用它們。最後還將提供一些 TensorFlow 的程式碼。

使用自編碼器進行表示學習

自編碼器都是關於如何有效地表示資料的。他們的工作是找到一個高維輸入的低維表示,在不損失內容的情況下重建原始輸入。

從下圖所示的quickdraw 資料集中獲取“斧頭”。影象為 28x28 灰度,這意味著它由 784 個畫素組成。自編碼器會找到從這個 784 維空間到 2D 空間的對映,這樣壓縮後的 ax 影象將僅由兩個數字描述:地圖上的 X 和 Y 座標。接下來,僅知道 X-Y 座標,自編碼器將嘗試僅從這兩個值重建原始的 784 個畫素。

自編碼器學習其輸入的低維度表示。

重建肯定不會是完美的,因為在壓縮過程中不可避免地會丟失一些資訊,但是我們的目標是希望它足以識別原始影象。在我們示例中的”地圖“是有效表示資料的潛在空間。雖然我們使用 2D 進行說明,但實際上潛在空間通常會更大,但仍比輸入影象小得多。

自編碼器的工作是建立一個低維表示讓它重建原始輸入。這確保了這個潛在空間壓縮了最相關的輸入特徵,並且沒有噪聲和對重建輸入不重要的特徵。

要點:自編碼器的潛在空間壓縮了現在相關的輸入特徵,並且沒有噪聲和冗餘特徵。

這個特點使得它在許多方面都具有吸引力。可以使用自編碼器進行降維或特徵提取(可以構建一個在數學上等同於主成分分析或 PCA 的自編碼器,我們以前有個相應的文章,有興趣的可以搜尋參考)。所以可以在任何資料管道中用自編碼器學習的低維度表示替換高維度資料。

自編碼器還有許多其他應用。它們可用於對影象進行去噪:只需輸入一張有噪聲的影象,自編碼器會重建原始的無噪聲影象。它們還可用於自監督預訓練,其中模型從大量未標記資料中學習影象特徵,然後針對一小部分標記資料上的某些監督任務進行微調。最後自編碼器可以用作生成模型,這將是本文的重點。

完整文章:

https://www.overfit.cn/post/bc1df57b1f1a499c996e92875ec48923