摘要:因此,正如我們在這篇文章的簡介中提到的那樣,變分自編碼器可以定義爲一種自編碼器,其訓練經過正規化以避免過度擬合,並確保隱空間具有能夠進行數據生成過程的良好屬性。因此,在訓練VAE時最小化的損失函數由一個“重構項”(在最後一層)組成,“重構項”傾向於使編碼解碼方案儘可能地具有高性能,而一個“正則化項”(在隱層)通過使編碼器返回的分佈接近標準正態分佈,來規範隱空間的組織。

全文共 11450 字,預計閱讀時間 30 分鐘。

原文標題:Understanding Variational Autoencoders (VAEs)

原文鏈接:https://towardsdatascience.com/understanding-variational-autoencoders-vaes-f70510919f73

原文作者:Joseph Rocca & Baptiste Rocca

最近比較關注文本生成任務,除了用到傳統的seq2seq模型,還涉及到一些GAN和VAE的知識。這篇是看的資料裏介紹VAE比較好的一篇文章,就翻譯了一下,推薦給大家。 昨天發送的版本有一些錯漏,今天已經修正。並且加入了一些註釋,方便大家理解。

  • 簡介

    • 本文脈絡

  • 降維,PCA和自編碼器

    • 什麼是降維?

    • 主成分分析(PCA)

    • 自編碼器

  • 變分自編碼器(VAE)

    • 自編碼器用於內容生成的侷限性

    • 變分自編碼器的定義

    • 關於正則化的直觀解釋

  • VAE的數學細節

    • 概率框架和假設

    • 變分推理公式

    • 將神經網絡引入模型

  • 總結

簡介

在過去的幾年中,由於一些驚人的進步,基於深度學習的生成模型越來越受到關注。依靠大量數據,精心設計的網絡結構和訓練技術,深度生成模型已經顯示出了令人難以置信的能力,可以生成高度逼真的各種內容,例如圖像,文本和聲音。在這些深度生成模型中,有兩個類別脫穎而出,值得特別關注:生成對抗網絡(GAN)和變分自編碼器(VAE)。

VAE生成的人臉圖片

在今年1月發佈的文章中,我們深入討論了生成對抗網絡(GANs),並展示了對抗訓練如何對抗兩個網絡(生成器和鑑別器),以推動這兩個網絡同時迭代進步。在這篇文章中,我們將介紹另一種重要的深度生成模型:變分自編碼器(VAE)。簡而言之,VAE是一種自編碼器,在訓練過程中其編碼分佈是規範化的,以確保其在隱空間具有良好的特性,從而允許我們生成一些新數據。術語“變分”源自統計中的正則化和變分推理方法。

雖然最後兩句話很好地概括了VAE的概念,但是它們也會引出很多問題。什麼是自編碼器?什麼是隱空間,爲什麼要對其進行規範化?如何用VAE生成新數據?VAE與變分推理之間有什麼聯繫?爲了儘可能詳細地描述VAE,我們將嘗試回答所有這些問題(以及許多其他問題!),併爲讀者提供儘可能多的知識(從基本直覺到更高級的數學細節)。因此,本文的目的不僅是討論變分自編碼器所依賴的基本概念,而且還要逐步構建出這些概念的推理過程。

事不宜遲,讓我們一起(重新)發現VAE!

本文脈絡

在第一部分中,我們將回顧一些有關降維和自編碼器的重要概念,這些概念將有助於理解VAE。在第二部分中,我們將說明爲什麼不能使用自編碼器來生成新數據,並將介紹變分自編碼器。它們是自編碼器的規範化版本,使數據生成成爲可能。在最後一節中,我們將基於變分推論對VAE進行更數學的描述。

注意:在最後一節中,我們試圖使數學推導儘可能完整和清楚,以彌合直覺和方程之間的差距。但是,不想深入瞭解VAE數學細節的讀者可以跳過本節,而不會影響對主要概念的理解。還要注意,在本文中,我們將大量使用以下符號:對於隨機變量,我們將用表示該隨機變量的分佈(或概率密度,取決於上下文)。

降維,PCA和自編碼器

在這部分中,我們將從討論與降維有關的一些概念開始。特別地,我們將簡要回顧主成分分析(PCA)和自編碼器,以展示這兩種方法之間的相互關係。

什麼是降維?

在機器學習中, 降維是減少描述數據的特徵數量的過程 。可以通過 選擇 (僅保留一些現有特徵)或通過 提取 (基於舊特徵組合來生成數量更少的新特徵)來進行降維。降維在許多需要低維數據(數據可視化,數據存儲,繁重的計算...)的場景中很有用。儘管有許多不同的降維方法,但是我們可以構建一個適用於大多數方法的總體框架。

首先,我們稱編碼器爲從“舊特徵”表示中產生“新特徵”表示(通過選擇或提取)的過程,然後將其逆過程稱爲解碼。降維可以被理解爲數據壓縮,其中編碼器壓縮數據(從初始空間到 編碼空間 ,也稱爲 隱空間 ,latent sapce),而解碼器則用於解壓縮。當然,根據初始數據分佈、隱空間大小和編碼器的選擇,壓縮可能是有損的,即一部分信息會在編碼過程中丟失,並且在解碼時無法恢復。

用編碼器和解碼器構建的降維過程。【藍色的高維原始數據被編碼器壓縮到淺黃色的低維隱空間中,再由解碼器解壓縮。如果解碼後的數據和原始數據相同(右上)則稱爲無損降維,否則爲有損降維。】

降維算法的主要目的是在給定候選中找到最佳的編碼器/解碼器對。換句話說,對於給定一組可選的編碼器和解碼器,我們希望編碼時保持信息量最大,從而在解碼時具有儘可能小的重構誤差。如果我們分別用和表示我們正在考慮的編碼器和解碼器,則降維問題可以表示爲

其中

爲輸入數據和編碼-解碼後數據之間的重構誤差。需要注意,在下面我們將用表示數據數的個數,表示初始(解碼)空間的維數,表示降維(編碼)空間的維數。

主成分分析(PCA)

談到降維,首先想到的方法就是主成分分析(PCA)。爲了展示它如何符合我們剛剛描述的框架並建立與自編碼器的聯繫,我們將對PCA的工作方式進行的簡要的描述(忽略大部分細節)。

PCA的想法是構建個新的 獨立 特徵,這些特徵是個舊特徵的 線性組合 ,並使得這些新特徵所定義的子空間上的數據投影儘可能接近初始數據(就歐幾里得距離而言)。換句話說,PCA尋找初始空間的最佳線性子空間(由新特徵的正交基定義),以使投影到該子空間上的近似數據的誤差儘可能小。

PCA是在尋找最佳子空間。【B爲原始2爲空間中的點,其座標爲(-0.4,-0.1),投影(降維)到黑色實線表示的子空間後爲對應圓點,再解壓縮之後的座標是(-0.34,-0.2),與原始點並不重合。兩點之間的距離便可理解爲誤差】

如果用我們前面定義的框架來描述,我們正在矩陣族中搜尋一個編碼器(線性變換),該變換的各行是正交的(特徵獨立性);並且在的矩陣族中尋找一個的相應解碼器。可以證明,與協方差特徵矩陣的個最大特徵值(在範數上)相對應的單位特徵向量是正交的(可以構造出正交的),並且組成了維度爲的最佳子空間,使得數據投影到該子空間的誤差最小。因此,可以選擇這個特徵向量作爲我們的新特徵,因此,降維問題可以轉化爲特徵值/特徵向量問題。此外,還可以推出,在這種情況下,解碼器矩陣是編碼器矩陣的轉置。

PCA與我們的總體框架是兼容的。【本圖的等式大家可以回顧一下SVD分解相關的知識】

自編碼器

現在我們討論 自編碼器 ,以及如何使用神經網絡進行降維。自編碼器的總體思路非常簡單,主要包括用神經網絡來作爲編碼器和解碼器,並使用迭代優化學習最佳的編碼-解碼方案。因此,在每次迭代中,我們向自編碼器結構(編碼器後跟解碼器)提供一些數據,我們將編碼再解碼後的輸出與初始數據進行比較,並通過反向傳播誤差來更新網絡的權重。

因此,直觀地講,整個自編碼器結構(編碼器+解碼器)會構造出數據瓶頸(bottleneck),從而確保只有信息的主要部分可以通過瓶頸並進行重構。從我們的總體框架來看,考慮的編碼器族由編碼器網絡結構定義,考慮的解碼器族由解碼器網絡結構定義,而重構誤差的減小則通過對編碼器和解碼器參數進行梯度下降來進行。

帶有損失函數的自編碼器。【編碼器和解碼器中間即爲低維隱空間,通過利用圖中的loss函數可以訓練出最優的自編碼器】

讓我們首先假設編碼器和解碼器網絡結構都只有一層且沒有非線性(即考慮的是線性自編碼器)。這樣的編碼器和解碼器是簡單的線性變換,可以用矩陣表示。在這種情況下,某種意義上,我們可以看到與PCA的明顯的關聯,就像PCA中一樣,我們正在尋找最佳的線性子空間來投影數據,並且使信息損失儘可能少。用PCA獲得的編碼和解碼矩陣自然地也是梯度下降所能得到的一種解決方案,但是我們應該指出,這不是唯一的解決方案。實際上, 可以選擇幾組不同的基向量來描述相同的最佳子空間 ,因此,幾個不同的編碼器/解碼器對都可以提供最小的重構誤差。此外,與PCA不同,對於線性自編碼器,我們最終獲得的新特徵不必是獨立的(神經網絡中沒有正交性約束)。

線性自編碼器和PCA的聯繫。【PCA和線性自編碼器的目標是完全一致的,但兩者得到的最佳子空間不必是相同的。圖中藍色爲PCA得到的基,它們必然是正交的,但自編碼器得到的基不一定是正交的。】

現在,讓我們進一步假設編碼器和解碼器都是深度非線性網絡的。在這種情況下,網絡結構越複雜,自編碼器就可以進行更多的降維,同時保持較低的重構損失。直觀地講,如果我們的編碼器和解碼器具有足夠的自由度,則可以將任何初始維度減小爲1。實際上,具有“無限大能力”的編碼器理論上可以將我們的N個初始數據編碼爲1、2、3,…,最多N個(或更一般地說,爲實軸上的N個整數),相關的解碼器再進行逆變換,在這種過程中不會造成任何損失。

但是我們應該牢記兩點。首先,在沒有重建損失的情況下進行重要的降維通常會帶來一個代價:隱空間中缺乏可解釋和可利用的結構( 缺乏規則性,lack of regularity )。其次,大多數時候,降維的最終目的不僅是減少數據的維數,而是要在減少維數的同時將數據主要的結構信息保留在簡化的表示中。出於這兩個原因,必須根據降維的最終目的來仔細控制和調整隱空間的大小和自編碼器的“深度”(深度定義壓縮的程度和質量)。

降維時希望保留主要信息。【圖中對中間的原始9維數據進行了兩種降維,左邊爲降到了1維生物性,這樣丟失了很多信息;右邊降到了生物性和飛行能力2個維度,丟失的信息大大減少】

變分自編碼器(VAE)

到目前爲止,我們已經討論了降維問題,並介紹了自編碼器,它們是可以通過梯度下降訓練的編碼器-解碼器結構。現在,讓我們考慮內容生成問題,看一下自編碼器對此問題的侷限性,並介紹變分自編碼器。

自編碼器用於內容生成的侷限性

此時,自然會想到一個問題:“自編碼器和內容生成之間的聯繫是什麼?”。確實,一旦對自編碼器進行了訓練,我們既有編碼器又有解碼器,但是仍然沒有辦法來產生任何新內容。乍一看,我們可能會認爲,如果隱空間足夠規則(在訓練過程中被編碼器很好地“組織”了),我們可以從該隱空間中隨機取一個點並將其解碼以獲得新的內容,就像生成對抗網絡中的生成器一樣。

我們可以通過解碼從隱空間中隨機採樣的點來生成新數據。生成數據的質量取決於隱空間的規則性。【在生成任務中我們更關注解碼器,生成器其實是訓練過程中的輔助,就像GAN裏的判別器一樣】

但是,正如我們在上一節中討論的那樣,自編碼器的隱空間的規則性是一個難點,它取決於初始空間中數據的分佈、隱空間的大小和編碼器的結構。因此,很難先驗地確保編碼器以與我們剛剛描述的生成過程兼容的方式智能地組織隱空間。

爲了說明這一點,讓我們再看一遍之前給出的示例,在該示例中,我們描述了一種強大的編碼器和解碼器,可以將任何N個初始訓練數據放到實軸上(每個數據點都被編碼爲實值)並可以沒有任何損失地解碼。在這種情況下,自編碼器的高自由度使得可以在沒有信息損失的情況下進行編碼和解碼(儘管隱空間的維數較低)但 會導致嚴重的過擬合 ,這意味着隱空間的某些點將在解碼時給出無意義的內容。儘管這種精挑細選的一維例子太過極端,但可以注意到自編碼器的隱空間規則性問題是普遍的,值得特別注意。

不規則的隱空間妨礙了我們用自編碼器生成新數據。【圖中展示了無限強自編碼器的例子,雖然訓練數據可以被無損失地壓縮、重構,但在隱空間隨機採樣的點可能會解碼出無意義的數據。】

進入隱空間的編碼數據之間缺乏結構是很正常的。的確,在自編碼器的訓練任務中,沒有什麼東西保證能夠得到這種結構: 自編碼器僅以儘可能少的損失爲目標進行訓練,而不管隱空間如何組織 。因此,如果我們對架構的定義不小心,那麼在訓練過程中,網絡很自然地會利用任何過擬合的可能性來儘可能地完成其任務……除非我們明確對其進行規範化!

變分自編碼器的定義

因此,爲了能夠將我們的自編碼器的解碼器用於生成目的,我們必須確保隱空間足夠規則。獲得這種規律性的一種可能方案是在訓練過程中引入顯式的正規化(regularisation)。 因此,正如我們在這篇文章的簡介中提到的那樣,變分自編碼器可以定義爲一種自編碼器,其訓練經過正規化以避免過度擬合,並確保隱空間具有能夠進行數據生成過程的良好屬性。

就像標準自編碼器一樣,變分自編碼器是一種由編碼器和解碼器組成的結構,經過訓練以使編碼解碼後的數據與初始數據之間的重構誤差最小。但是,爲了引入隱空間的某些正則化,我們對編碼-解碼過程進行了一些修改: 我們不是將輸入編碼爲隱空間中的單個點,而是將其編碼爲隱空間中的概率分佈 。然後對模型進行如下訓練:

  • 首先,將輸入編碼爲在隱空間上的分佈;

  • 第二,從該分佈中採樣隱空間中的一個點;

  • 第三,對採樣點進行解碼並計算出重建誤差;

  • 最後,重建誤差通過網絡反向傳播。

自編碼器(確定性)和變分自編碼器(概率性)之間的差異。【變分自編碼器把原始數據編碼爲隱空間中的分佈,在解碼時是從該分佈中採樣一個點來進行解碼】

實踐中,選擇正態分佈作爲編碼的分佈,使得我們可以訓練編碼器來返回描述高斯分佈的均值和協方差矩陣。將輸入編碼爲具有一定方差而不是單個點的分佈的原因是這樣可以非常自然地表達隱空間規則化:編碼器返回的分佈被強制接近標準正態分佈。在下一節中,我們將通過這種方式確保隱空間的局部和全局正則化(局部是由於方差控制,而全局是由於均值控制)。

因此,在訓練VAE時最小化的損失函數由一個“重構項”(在最後一層)組成,“重構項”傾向於使編碼解碼方案儘可能地具有高性能,而一個“正則化項”(在隱層)通過使編碼器返回的分佈接近標準正態分佈,來規範隱空間的組織。該正則化項爲返回的分佈與標準高斯之間的 Kulback-Leibler散度 [1] ,這將在下一節中進一步說明。我們可以注意到,兩個高斯分佈之間的Kullback-Leibler散度具有封閉形式,可以直接用兩個分佈的均值和協方差矩陣表示。

在變分自動編碼器中,損失函數由一個重構項(優化編碼-解碼)和一個正則化項(使隱空間規則化)組成。【小提示,由於正態分佈的概率密度函數是確定的,所以兩個高斯分佈的KL散度有解析形式】

譯者注:KL散度又稱爲相對熵,其定義爲。這個概念很重要,不只是VAE,很多地方都會用到。

關於正則化的直觀解釋

爲了使生成過程成爲可能,我們期望隱空間具有規則性,這可以通過兩個主要屬性表示: 連續性 (continuity,隱空間中的兩個相鄰點解碼後不應呈現兩個完全不同的內容)和 完整性 (completeness,針對給定的分佈,從隱空間採樣的點在解碼後應提供“有意義”的內容)。

不規範的隱空間vs規範的隱空間。不規範隱空間中臨近的點解碼後不相似(正方形和三角形),而且有的點無法解析出有意義的數據(紫色圖形)】

VAE將輸入編碼爲分佈而不是點不足以確保連續性和完整性。如果沒有明確定義的正則化項,則模型可以學習最小化其重構誤差,從而“忽略”要返回一個分佈,最終表現得幾乎像普通自編碼器一樣(導致過度擬合)。具體地說,編碼器可以返回具有微小方差的分佈(往往是點分佈,punctual distributions),或者返回具有巨大均值差異的分佈(數據在隱空間中彼此相距很遠)。在這兩種情況下,返回分佈的限制都沒有取得效果,並且不滿足連續性和/或完整性。

因此,爲了避免這些影響, 我們必須同時對協方差矩陣和編碼器返回的分佈均值進行正則化 。實際上,通過強制分佈接近標準正態分佈(集中和簡化)來完成此正則化。這樣,我們要求協方差矩陣接近於單位陣,防止出現單點分佈,並且均值接近於0,防止編碼分佈彼此相距太遠。

必須對返回的VAE分佈進行正則化,以獲得具有良好屬性的隱空間。

使用此正則化項,我們可以防止模型在隱空間中的編碼相互遠離,並鼓勵儘可能多的返回分佈發生“重疊”,從而滿足預期的連續性和完整性條件。自然地,對於任何正則化項,都會以訓練數據上更高的重建誤差爲代價。然而,可以調整重建誤差和KL散度之間的權重,我們將在下一節中看到如何從形式推導中自然得出平衡的表達。

總結這一小節,我們可以觀察到,通過正則化獲得的連續性和完整性往往會在隱空間中編碼的信息上產生“梯度”。例如,應將隱空間中位於來自不同訓練數據的兩個編碼分佈的均值的中間點應該被解碼爲提供第一個分佈的數據和提供第二個分佈的數據之間的某個數據。因爲它可能在兩種情況下被自編碼器採樣到【這句話有點繞,我理解是解碼之前是從分佈採樣,所以可能會採樣到這種“重疊區域”裏的點,我們希望這種點解碼出來會跟任意一種原始數據比較像】。

正則化傾向於在潛在空間中編碼的信息上創建一個“梯度”。

注意:順帶一提,我們提到的第二個問題(網絡使分佈彼此遠離)當規模變大時幾乎與第一個潛在問題(網絡趨向於返回單點分佈)等效:在兩種情況下,分佈方差的差別都相對小於均值之間的差別。

VAE的數學細節

在上一節中,我們給出了以下直觀的概述:VAE是將輸入編碼爲分佈而不是點的自編碼器,並且其隱空間結構通過將編碼器返回的分佈約束爲接近標準高斯而得以規範化。在本節中,我們將對VAE進行更數學的介紹,從而使我們可以更嚴格地證明正則化項的合理性。爲此,我們將建立一個明確的概率框架,並將使用變分推理技術。

譯者注:本文的前面部分寫的是相當好的,但數學細節這塊寫得並不是特別清楚,我在這部分加了一些註釋,讀者也可以參考一些其他文章,比如 《變分自編碼器VAE:原來是這麼一回事 | 附開源代碼》 [2]《變分自編碼器介紹、推導及實現》 [3]

概率框架和假設

讓我們首先定義一個概率圖形模型來描述我們的數據。我們用表示代表我們的數據變量,並假定是由未直接觀察到的潛在變量(編碼表示,the encoded representation)生成的。因此,對於每個數據點,假定以下兩個步驟生成過程:

  • 首先,從先驗分佈中採樣一個隱空間表示;

  • 第二,按條件概率採樣數據

數據生成過程的概率圖模型。

在這種概率模型下,我們可以重新定義編碼器和解碼器的概念。實際上,與考慮使用確定性編碼器和解碼器的簡單自編碼器不同,我們現在將考慮這兩個對象的概率版本。自然地,“概率解碼器”由定義,描述由給定已編碼變量到解碼變量的分佈,而“概率編碼器”由定義,描述根據原始變量給出編碼變量的分佈。

此時,我們已經注意到,在簡單的自編碼器中所缺乏的對隱空間的正則化自然出現在數據生成過程的定義中:我們假設隱空間中的編碼表示遵循先驗分佈。另外,我們還可以回顧一下著名的貝葉斯定理,該定理在先驗,似然性和後驗之間建立聯繫

現在讓我們假設是標準的高斯分佈,是高斯分佈,其均值由變量的確定性函數定義,並且協方差矩陣的形式爲正常數乘以單位矩陣的。假定函數屬於記爲的函數族,對於我們暫不指定。因此,我們有

現在,讓我們考慮。從理論上講,我們知道和,便可以使用貝葉斯定理來計算:這是經典的 貝葉斯推理問題 [4] 。但是,正如我們在前一篇文章中所討論的那樣,這種計算通常是棘手的(由於分母處的積分),需要使用諸如變分推理之類的近似技術。

注意:在這裏我們提到的和都是高斯分佈。因此,如果我們有,則意味着也應遵循高斯分佈,並且從理論上講,我們可以“僅”嘗試表示的相對於和的均值和協方差矩陣。但是,實際上不滿足此條件,因此我們需要使用近似算法(如變分推理),使該方法能夠通用,並且對模型假設的某些更改更加健壯。

譯者注:其實這裏要得到的結論就是不知道,也不知道,所以沒法求

變分推理公式

在統計中,變分推論(VI)是一種近似複雜分佈的技術。這個想法是要設置一個參數化的分佈族(例如高斯族,其參數是均值和協方差),並在該族中尋找目標分佈的最佳近似。該族中最好的對象是使給定的近似誤差測量值最小化的元素(大多數情況下是近似分佈與目標分佈之間的Kullback-Leibler散度),並通過對該族的參數進行梯度下降來發現。有關更多詳細信息,請參閱有關 變分推理的文章 [5] 及其中的參考文獻。

在這裏,我們將通過高斯分佈來近似,其均值和協方差由參數的兩個函數和定義。這兩個函數應該分別屬於後面確定但可以參數化的函數族和。因此我們可以寫出如下表示

譯者注:這裏的符號有點怪,其實是的意思,他是對的近似,就是對特定x的z分佈的近似(因爲無從得知)。

好了,我們已經以這種方式定義了一個變分推論的候選族,現在需要通過優化函數和(實際上是它們的參數)以最小化近似分佈和真實分佈間的Kullback-Leibler散度,從而找到該族中的最佳近似。換句話說,我們正在尋找最優的和,使得

譯者注:這個圖比較硬核。第一行是問題定義,也應該都能看懂;

第二行就是寫了一下KL散度的公式再稍作變換,特別注意z都是從這個分佈採樣的; 

第三行就是第二行的第二項用對數公式變換了一下;

第三行的最後一項其實是個常數,前兩項合起來是,於是得到第四行; 

第五行是利用正態分佈的定義得到的

在倒數第二個方程中,我們可以觀察到在近似後驗時存在一個權衡點——最大化“觀測”的可能性(第一項,【重構出的樣本的】預期對數似然概率的最大)與接近先驗分佈(第二項,和之間的KL散度最小)。這種折衷對於貝葉斯推理問題是很自然的,體現了在數據的置信度與先驗分佈置信度之間的平衡。

到目前爲止,如果假設函數是已知且固定的,則我們可以使用變分推理技術來近似後驗。但是實際上,定義解碼器的函數是未知的,而且也需要求解。但我們最初的目標是找到一種性能良好的編碼/解碼方案,其隱空間又足夠規則,可以用於生成目的。如果規則性主要由在隱空間上假定的先驗分佈所決定,則整個編碼-解碼方案的性能高度取決於函數的選擇。確實,由於可以從和近似(通過變分推論),而是簡單的標準高斯模型,僅存的兩個需要我們優化的對象是參數(決定了分佈的協方差)和函數(決定了分佈的均值)。

因此,讓我們考慮一下,正如我們之前討論的那樣,對於中的任何函數(每個函數都定義一個不同的概率解碼器),我們都可以得到的最佳近似。無論他的特性如何,但我們正在尋找一種儘可能高效的編碼-解碼方案,然後,當給定從採樣的時,我們希望選擇函數使的期望對數似然概率最大化。 換句話說,對於給定的輸入,當我們從分佈採樣然後從分佈採樣時,我們希望最大化的概率。因此,我們正在尋找最優

其中取決於函數,獲得方法如前所屬。將所有部分聚集在一起,我們正在尋找最優的,和,以便

我們可以在該目標函數中對應前面章節裏對VAE的直觀描述中引入的元素:和之間的重構誤差以及和(它是標準的高斯分佈)之間由KL散度給出的正則項。我們還可以注意到常數,它決定了前兩個條件之間的平衡。越高,我們對模型中的概率解碼器假設周圍的方差就越大,我們也就越關注正則化項(如果低,則相反)。

譯者注:上面幾段說了一大堆,其實就兩個意思。

1、最優的fgh其實就要滿足兩個目標,一個是從 近似 出來的隱空間分佈中採樣z然後解碼,希望它能和原數據x比較像;第二個是這個應該像一個標準正態分佈。

2、這是符合我們之前“儘可能無損重構+正則項”的總體思路的

將神經網絡引入模型

目前爲止,我們已經建立了一個依賴於三個函數,和的概率模型,並使用變分推理表示要解決的優化問題,以便獲得能夠給出最優值的,和。此模型的編解碼方案。由於我們無法輕鬆地在函數的整個空間上進行優化,因此我們限制了優化域,並決定將,和用神經網絡來定義。因此,,和分別對應於網絡體系結構定義的函數族,並且將對這些網絡的參數進行優化。

實際上,和不是由兩個完全獨立的網絡定義的,而是共享它們的一部分結構和權重,因此我們可以

因爲它定義了的協方差矩陣,所以被假定爲方陣。但是,爲了簡化計算並減少參數的數量,我們做出了額外的假設,即的近似值是具有對角協方差矩陣的多維高斯分佈(變量獨立性假設)。在此假設下,只是協方差矩陣對角元素的向量,因此其大小與相同。但是,我們以這種方式減少了我們用於變分推斷的分佈族,因此,對的近似可能不太準確。

VAE的編碼器部分

編碼器對建模時將均值和協方差均視關於爲的高斯函數,解碼器則與之不同。我們的模型假設具有固定的高斯協方差。函數定義關於的高斯分佈均值,由神經網絡建模,可以表示如下

VAE的解碼器部分

譯者注:上面這幾段比較簡單,第一個重點是編碼器獲得均值和協方差的網絡共享了一部分權重。第二個重點是協方差矩陣被簡化爲對角陣,也就是簡化成了一維向量。這樣,均值和方差就都可以用全連接網絡來獲得了。

然後,通過將編碼器和解碼器部分串聯在一起,可以獲得總體架構。但是,在訓練過程中,我們仍然需要對從編碼器返回的分佈中進行採樣非常小心。因爲採樣過程必須以允許誤差通過網絡反向傳播。

譯者注:我們的優化過程依賴從編碼器獲得的分佈中採樣,但其實採樣操作是不可導的!

儘管有隨機採樣發生在模型的中間,但有一個簡單的稱爲 重參數化技巧(reparametrisation trick) ,使梯度下降成爲可能。它利用以下事實:如果是遵循均值與協方差的高斯分佈的隨機變量,則可以表示爲

譯者注:這個技巧很巧妙,通過採樣一個實係數來獲得對高維向量的採樣。這樣整個過程就可導了。

reparametrisation示意圖。【如果沒有重採樣技巧,我們需要從一個真實的分佈中採樣一個高維向量,這是不可導的;加入重採樣技巧,我們將可以直接對均值和協方差向量進行反向傳播】

最後,這種方式獲得的變分式自編碼器架構的目標函數由上一小節的最後一個方程式給出,其中理論期望由蒙特卡洛近似代替,該近似值在大多數情況下僅進行單次採樣。因此,考慮這種近似並表示,我們可以獲得上一節中直觀得出的損失函數,該函數由一個重構項,一個正則項和一個常數來定義這兩個項的相對權重。

變分自編碼器的表示形式。【這就是完整的VAE網絡,損失函數其實也很簡單,我想大部分朋友應該都能夠動手實現】

總結

本文的主要方法是:

  • 降維是減少描述某些數據的特徵量的過程(通過僅選擇初始特徵的子集或通過將它們組合成數量更少的新特徵),因此可以看作是編碼過程

  • 自編碼器是由編碼器和解碼器組成的神經網絡體系結構,它們會創建瓶頸以處理數據,並經過訓練以在編碼-解碼過程中損失最少的信息(通過梯度下降迭代進行訓練,目的是減少重建錯誤)

  • 由於過度擬合,自編碼器的隱空間可能極爲不規則(隱空間中的臨近點可能產生截然不同的解碼數據,而且解碼後,隱空間中的某些點可能產生無意義的內容),因此,我們無法定義了一個生成過程,該過程僅包含從隱空間中採樣一個點,然後使其經過解碼器以獲取新數據

  • 變分自編碼器(VAE)是自編碼器,它通過使編碼器返回隱空間中的分佈而不是單個點,並在損失函數中添加一個對返回的分佈的正則項來解決隱空間不規則性的問題,以確保更好地組織隱空間

  • 假設有一個簡單的基本概率模型來描述我們的數據,則可以詳細推導由重構項和正則項組成的非常直觀的VAE損失函數,尤其是使用變分推理的統計技術(因此稱爲“變分”自編碼器)

總而言之,在過去的幾年中,GAN獲得的關注遠超過VAE。除其他原因外,與GAN對抗訓練的簡潔概念相比,VAE的理論基礎(概率模型和變分推論)的複雜程度較高。希望我們能像今年早些時候爲GAN所做的那樣,通過本篇文章分享寶貴的直覺和強大的理論基礎,以使VAE更易於新人使用。

總得來說VAE在理論層面還是比較複雜,歡迎大家關注我們的公衆號和我們交流。

參考資料

[1]

KL散度: https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence

[2]

變分自編碼器VAE:原來是這麼一回事 | 附開源代碼: https://zhuanlan.zhihu.com/p/34998569

[3]

變分自編碼器介紹、推導及實現: https://zhuanlan.zhihu.com/p/83865427

[4]

貝葉斯推理問題: https://towardsdatascience.com/bayesian-inference-problem-mcmc-and-variational-inference-25a8aa9bce29

[5]

變分推理文章: https://towardsdatascience.com/bayesian-inference-problem-mcmc-and-variational-inference-25a8aa9bce29

推薦閱讀

AINLP年度閱讀收藏清單

模型壓縮實踐收尾篇——模型蒸餾以及其他一些技巧實踐小結

中文命名實體識別工具(NER)哪家強?

學自然語言處理,其實更應該學好英語

斯坦福大學NLP組Python深度學習自然語言處理工具Stanza試用

太讚了!Springer面向公衆開放電子書籍,附65本數學、編程、機器學習、深度學習、數據挖掘、數據科學等書籍鏈接及打包下載

數學之美中盛讚的 Michael Collins 教授,他的NLP課程要不要收藏?

自動作詩機&藏頭詩生成器:五言、七言、絕句、律詩全了

模型壓縮實踐系列之——bert-of-theseus,一個非常親民的bert壓縮方法

這門斯坦福大學自然語言處理經典入門課,我放到B站了

徵稿啓示 | 稿費+GPU算力+星球嘉賓一個都不少

關於AINLP

AINLP 是一個有趣有AI的自然語言處理社區,專注於 AI、NLP、機器學習、深度學習、推薦算法等相關技術的分享,主題包括文本摘要、智能問答、聊天機器人、機器翻譯、自動生成、知識圖譜、預訓練模型、推薦系統、計算廣告、招聘信息、求職經驗分享等,歡迎關注!加技術交流羣請添加AINLPer(id:ainlper),備註工作/研究方向+加羣目的。

相關文章