AutoEncoder (AE) 和 Variational AutoEncoder (VAE) 的詳細介紹和對比

資料壓縮

資料壓縮可以使用更少的維度表示相同數量的資訊。 這助於解決維度詛咒的問題,還可以部分的解決過擬合的現象。 所以在一般情況下我們都會在資料集用於訓練之前,對其使用降維方法進行處理。

這就是自動編碼器 (AE) 和變分自動編碼器 (VAE) 發揮作用的地方。 它們是用於壓縮輸入資料的端到端網路。 Autoencoder 和 Variational Autoencoder 都用於將資料從高維空間轉換到低維空間,從本質上實現壓縮。

Autoencoder - AE

自編碼器(AE)用於學習對給定網路配置的無標記資料的有效嵌入。自編碼器由兩部分組成,編碼器和解碼器。 編碼器將資料從高維空間壓縮到低維空間(也稱為潛在空間),而解碼器則相反,即將潛在空間轉換回高維空間。 解碼器用於確保潛在空間可以從資料集空間中捕獲大部分資訊,解碼器則以潛在空間輸出作為輸入判斷能否完整的還原資料。

AutoEncoder (AE) 和 Variational AutoEncoder (VAE) 的詳細介紹和對比

在訓練過程中,輸入資料x被輸入到編碼器函式e_theta(x)。輸入透過一系列層(由變數theta引數化)來減少其維數,從而得到壓縮的潛在向量z。層的數量、層的型別和大小,以及潛在空間維數都是可設定的超引數。如果潛在空間的維數小於輸入空間的維數,則實現壓縮(從根本上消除了冗餘屬性)。

解碼器d_phi(z)通常(但不是必須)由編碼器中使用的層的近似互補層組成,但順序相反。一層中的近補層可以用來撤銷(在某種程度上)原始層的操作,例如轉置conv層到conv層、池化到反池化,全連線到全連線等。

損失函式

整個編碼器-解碼器架構在同一損失函式上共同訓練,損失函式鼓勵在輸出端重建輸入。 所以一般情況下使用的損失函式是編碼器輸入和解碼器輸出之間的均方誤差。

AutoEncoder (AE) 和 Variational AutoEncoder (VAE) 的詳細介紹和對比

這個想法理論支援是有一個低維的潛在空間,能夠達到最大壓縮,但同時使復原後的資料誤差足夠小。 將潛在空間的維數降至這一數值下則會導致大量的資訊丟失。

AE對潛在空間的值/分佈沒有限制,只要它可以在解碼器透過它時重建輸入保證足夠小的誤差即可。

潛在的空間視覺化

下面是在MNIST資料集上訓練網路生成的潛在空間的示例。

AutoEncoder (AE) 和 Variational AutoEncoder (VAE) 的詳細介紹和對比

可以看出,相同的數字傾向於將自己聚集在相近的潛在空間中。 另一個需要注意的是,潛在空間的某些部分與任何資料點都不對應。 使用這些作為編碼器的輸入將導致輸出看起來不像 MNIST 資料中的任何數字。 這就是我們所說的潛在空間沒有正則化的意思。 這樣的潛在空間只有少數具有生成能力的區域/簇,這意味著對潛在空間中簇內的任何點進行取樣都會生成與該簇相關的變數, 但是整個潛在空間並不都具備生成能力。 不屬於任何簇的區域將產生垃圾輸出。 一旦網路被訓練,並且訓練資料被移除,我們就無法知道解碼器從一個隨機取樣的潛在向量產生的輸出是否有效。因此AE主要用於壓縮。

對於有效輸入,AE 能夠將它們壓縮到更少的維度,基本上消除了冗餘,但由於潛空間AE是非正則化的,解碼器不能用於從潛空間取樣的向量生成有效的輸入資料。

為什麼使用AE壓縮?

線性自編碼器的潛在空間與資料主成分分析(PCA)的特徵空間非常相似。如果AE與PCA相似,為什麼要使用AE?AE 的強大之處在於它的非線性。 新增非線性(例如非線性啟用函式和更多隱藏層)使 AE 能夠在較低維度上學習相當強大的輸入資料表示,而資訊丟失要少得多。

Variational AutoEncoders - VAE

變分自編碼器(VAE)解決了自編碼器中非正則化潛在空間的問題,併為整個空間提供了生成能力。 AE 中的編碼器輸出潛在向量。VAE的編碼器不輸出潛空間中的向量,而是輸出每個輸入的潛空間中預定義分佈的引數。然後VAE對這個潛在分佈施加約束,迫使它成為一個正態分佈。這個約束確保了潛在空間是正則化的。

VAE的架構圖如下所示。在訓練過程中,輸入資料x被輸入到編碼器函式e_theta(x)。就像AE一樣,輸入透過一系列層(由超引數控制)來減少其維度,以獲得壓縮的潛在向量z。但是潛在向量不是編碼器的輸出。編碼器輸出每個潛在變數的平均值和標準差。然後從這個平均值和標準偏差中取樣潛在向量,然後將其輸入到解碼器中重建輸入。VAE中解碼器的工作原理與AE中解碼器相似。

AutoEncoder (AE) 和 Variational AutoEncoder (VAE) 的詳細介紹和對比

損失函式

損失函式由VAE目標定義。VAE有兩個目標

重建的輸入

潛空間應為正態分佈

因此,將VAE的訓練損失定義為重構損失和相似損失之和。重構誤差,就像AE中一樣,是輸入輸出和重構輸出的均方損失。相似性損失是潛空間分佈與標準高斯(零均值和單位方差)之間的KL散度。因為此損失函式是這兩個損失的總和。

AutoEncoder (AE) 和 Variational AutoEncoder (VAE) 的詳細介紹和對比

如前所述,在將潛在向量傳送到解碼器之前需要從編碼器生成的分佈中取樣。 這種隨機取樣使得編碼器很難進行反向傳播,因為我們無法追溯由於這種隨機取樣而導致的錯誤。因此,我們使用重引數的方法(reparameterization trick)來模擬取樣過程,這使得錯誤可以透過網路傳播。 潛在向量 z 表示為編碼器輸出的函式。

AutoEncoder (AE) 和 Variational AutoEncoder (VAE) 的詳細介紹和對比

潛在空間視覺化

模型的訓練過程試圖在兩個損失之間找到平衡,最終得到一個潛在空間分佈,看起來像單位範數,叢集對相似的輸入資料點進行分組。 單位範數條件確保潛在空間均勻分佈並且簇之間沒有顯著間隙。 事實上,相似資料輸入的集簇通常在某些區域重疊。 下面是透過在相同的 MNIST 資料集上訓練網路生成的潛在空間的示例,用於視覺化 VAE 的潛在空間。 請注意簇之間沒有間隙,空間類似於單位範數的分佈。

AutoEncoder (AE) 和 Variational AutoEncoder (VAE) 的詳細介紹和對比

需要注意的重要一點是,當從具有重疊簇的區域中取樣潛在向量時,我們會得到變形資料。 當我們對從一個簇移動到另一個簇的潛在空間進行取樣時,我們得到的是解碼器輸出之間的平滑過渡。

AutoEncoder (AE) 和 Variational AutoEncoder (VAE) 的詳細介紹和對比

我們可以看到不過不使用KL散度,則跟AE模型差不多。

總結

本文對 Autoencoder (AE) 和variational Autoencoder (VAE) 進行了詳細的介紹,它們分別是主要用於資料壓縮和資料生成。 VAE 解決了 AE 的非正則化潛在空間的問題,這使其能夠從潛在空間中隨機取樣的向量生成資料。以下是 AE和VAE的關鍵點總結

自編碼器 (AE)

用於在潛在空間中生成輸入的壓縮變換

潛變數沒有被正則化

選擇一個隨機的潛在變數可能會產生垃圾輸出

潛變數具有不連續性

潛在變數是確定性值

潛在空間缺乏生成能力

變分自編碼器 (VAE)

將潛在變數的條件強制為單位範數

壓縮形式的潛在變數是均值和方差

潛在變數是平滑連續的

潛在變數的隨機值在解碼器產生有意義的輸出

解碼器的輸入是從具有編碼器輸出均值和方差的高斯中取樣的隨機值。

正則化的潛在空間

潛在空間具有生成能力

作者:Aqeel Anwar