Machine-Learning

什麼是變分自動編碼器以及它們用於哪些學習任務?

  • January 6, 2018

根據這個這個答案,自動編碼器似乎是一種使用神經網絡進行降維的技術。我還想知道什麼是變分自動編碼器(它與“傳統”自動編碼器相比的主要區別/優點)以及這些算法用於的主要學習任務是什麼。

儘管變分自編碼器 (VAE) 易於實現和訓練,但解釋它們一點也不簡單,因為它們融合了深度學習和變分貝葉斯的概念,並且深度學習和概率建模社區對相同的概念使用不同的術語。因此,在解釋 VAE 時,您可能要么專注於統計模型部分,而讓讀者不知道如何實際實現它,反之亦然,專注於網絡架構和損失函數,其中 Kullback-Leibler 術語似乎是憑空拉出。我將嘗試在這裡找到一個中間立場,從模型開始,但提供足夠的細節以在實踐中實際實現它,或者了解其他人的實現。

VAE 是生成模型

與經典(稀疏、去噪等)自動編碼器不同,VAE 是生成模型,如 GAN。對於生成模型,我的意思是學習概率分佈的模型 $ p(\mathbf{x}) $ 在輸入空間上 $ \mathcal{x} $ . 這意味著在我們訓練了這樣一個模型之後,我們可以從(我們的近似值)中採樣 $ p(\mathbf{x}) $ . 如果我們的訓練集由手寫數字 (MNIST) 組成,那麼在訓練生成模型之後,它能夠創建看起來像手寫數字的圖像,即使它們不是訓練集中圖像的“副本”。

學習訓練集中圖像的分佈意味著看起來像手寫數字的圖像應該有很高的概率被生成,而看起來像 Jolly Roger 或隨機噪聲的圖像應該有一個低概率。換句話說,這意味著學習像素之間的依賴關係:如果我們的圖像是 $ 28\times 28=784 $ 來自 MNIST 的像素灰度圖像,模型應該知道如果一個像素非常亮,那麼一些相鄰像素很可能也很亮,如果我們有一條長的、傾斜的亮像素線,我們可能會有另一個更小、水平的上面的像素線(a 7)等。

VAE 是潛變量模型

VAE 是一個潛變量模型:這意味著 $ \mathbf{x} $ ,784 個像素強度(觀察變量)的隨機向量,被建模為隨機向量的(可能非常複雜)函數 $ \mathbf{z}\in\mathcal{Z} $ 具有較低維度的,其分量是未觀察到的(潛在)變量。這樣的模型什麼時候有意義?例如,在 MNIST 案例中,我們認為手寫數字屬於一個維度遠小於 $ \mathcal{x} $ ,因為絕大多數784像素強度的隨機排列,一點也不像手寫數字。直觀地說,我們希望維度至少為 10(位數),但它很可能更大,因為每個數字都可以用不同的方式書寫。有些差異對於最終圖像的質量並不重要(例如,全局旋轉和平移),但其他差異很重要。所以在這種情況下,潛在模型是有意義的。稍後再談。請注意,令人驚訝的是,即使我們的直覺告訴我們維度應該約為 10,我們也絕對可以只使用 2 個潛在變量來使用 VAE 對 MNIST 數據集進行編碼(儘管結果不會很漂亮)。原因是即使是單個實變量也可以編碼無限多的類,因為它可以假設所有可能的整數值等等。當然,如果類之間有顯著的重疊(例如 MNIST 中的 9 和 8 或 7 和 I),即使只有兩個潛在變量的最複雜函數也無法為每個類生成清晰可辨的樣本。稍後再談。

VAE 假設多元參數分佈 $ q(\mathbf{z}\vert\mathbf{x},\boldsymbol{\lambda}) $ (在哪裡 $ \boldsymbol{\lambda} $ 是參數 $ q $ ),他們學習多元分佈的參數。參數化pdf的使用 $ \mathbf{z} $ ,它可以防止 VAE 的參數數量隨著訓練集的增長而無限增長,在 VAE 術語中稱為攤銷(是的,我知道……)。

解碼器網絡

在此處輸入圖像描述

我們從解碼器網絡開始,因為 VAE 是一個生成模型,而 VAE 中唯一實際用於生成新圖像的部分是解碼器。編碼器網絡僅在推理(訓練)時使用。

解碼器網絡的目標是生成新的隨機向量 $ \mathbf{x} $ 屬於輸入空間 $ \mathcal{X} $ ,即新圖像,從潛在向量的實現開始 $ \mathbf{z} $ . 這顯然意味著它必須學習條件分佈 $ p(\mathbf{x}\vert\mathbf{z}) $ . 對於 VAE,此分佈通常被假定為多元高斯1:

$$ p_{\boldsymbol{\phi}}(\mathbf{x}\vert\mathbf{z}) = \mathcal{N}(\mathbf{x}|\boldsymbol{\mu}(\mathbf{z}; \boldsymbol{\phi}), \boldsymbol{\sigma}(\mathbf{z}; \boldsymbol{\phi})^2I) $$

$ \boldsymbol{\phi} $ 是編碼器網絡的權重(和偏差)向量。向量 $ \boldsymbol{\mu}(\mathbf{z};\boldsymbol{\phi}) $ 和 $ \boldsymbol{\sigma}(\mathbf{z}; \boldsymbol{\phi}) $ 是複雜的、未知的非線性函數,由解碼器網絡建模:神經網絡是強大的非線性函數逼近器。


正如@amoeba 在評論中所指出的,解碼器和經典的潛在變量模型之間存在*驚人的相似性:因子分析。*在因子分析中,您假設模型:

$$ \mathbf{x}\vert\mathbf{z}\sim\mathcal{N}(\mathbf{W}\mathbf{z}+\boldsymbol{\mu}, \boldsymbol{\sigma}^2I),\ \mathbf{z}\sim\mathcal{N}(0,I) $$

兩種模型(FA 和解碼器)都假設可觀察變量的條件分佈 $ \mathbf{x} $ 關於潛變量 $ \mathbf{z} $ 是高斯的,並且 $ \mathbf{z} $ 自己是標準的高斯人。不同之處在於解碼器不假設 $ p(\mathbf{x}|\mathbf{z}) $ 是線性的 $ \mathbf{z} $ ,也不假設標準差是一個常數向量。相反,它將它們建模為複雜的非線性函數 $ \mathbf{z} $ . 在這方面,它可以看作是非線性因子分析。有關 FA 和 VAE 之間這種聯繫的深入討論,請參見此處。由於具有各向同性協方差矩陣的 FA 只是 PPCA,這也與眾所周知的結果有關,即線性自編碼器簡化為 PCA。


讓我們回到解碼器:我們如何學習 $ \boldsymbol{\phi} $ ? 直觀地說,我們想要潛在變量 $ \mathbf{z} $ 最大化產生的可能性 $ \mathbf{x}_i $ 在訓練集中 $ D_n $ . 換句話說,我們要計算的後驗概率分佈 $ \mathbf{z} $ ,給定數據:

$$ p(\mathbf{z}\vert\mathbf{x})=\frac{p_{\boldsymbol{\phi}}(\mathbf{x}\vert\mathbf{z})p(\mathbf{z})}{p(\mathbf{x})} $$

我們假設一個 $ \mathcal{N}(0,I) $ 先於 $ \mathbf{z} $ ,我們留下了貝葉斯推理中的常見問題,即計算 $ p(\mathbf{x}) $ (證據)很難(多維積分)。更何況,從這裡 $ \boldsymbol{\mu}(\mathbf{z};\boldsymbol{\phi}) $ 是未知的,我們無論如何也無法計算它。輸入變分推理,該工具為變分自動編碼器命名。

VAE 模型的變分推理

變分推理是一種對非常複雜的模型執行近似貝葉斯推理的工具。它不是一個過於復雜的工具,但是我的答案已經太長了,我不會對VI進行詳細解釋。如果您好奇,可以查看這個答案和其中的參考資料:

https://stats.stackexchange.com/a/270569/58675

可以說 VI 尋找一個近似值 $ p(\mathbf{z}\vert \mathbf{x}) $ 在參數分佈族中 $ q(\mathbf{z}\vert \mathbf{x},\boldsymbol{\lambda}) $ ,其中,如上所述, $ \boldsymbol{\lambda} $ 是家庭的參數。我們尋找最小化目標分佈之間的 Kullback-Leibler 散度的參數 $ p(\mathbf{z}\vert \mathbf{x}) $ 和 $ q(\mathbf{z}\vert \mathbf{x},\boldsymbol{\lambda}) $ :

$$ \min_{\boldsymbol{\lambda}}\mathcal{D}[p(\mathbf{z}\vert \mathbf{x})\vert\vert q(\mathbf{z}\vert \mathbf{x},\boldsymbol{\lambda})] $$

同樣,我們不能直接最小化這一點,因為 Kullback-Leibler 散度的定義包括證據。引入 ELBO(證據下界)並經過一些代數運算,我們終於得到:

$$ ELBO(\boldsymbol{\lambda})= E_{q(\boldsymbol{z}\vert \mathbf{x},\boldsymbol{\lambda})}[\log p(\mathbf{x}\vert\boldsymbol{z})]-\mathcal{D}[(q(\boldsymbol{z}\vert \mathbf{x},\boldsymbol{\lambda})\vert\vert p(\boldsymbol{z})] $$

由於 ELBO 是證據的下限(參見上面的鏈接),最大化 ELBO 並不完全等同於最大化給定數據的可能性 $ \boldsymbol{\lambda} $ (畢竟,VI 是一種近似貝葉斯推理的工具),但它的方向是正確的。

為了進行推斷,我們需要指定參數族 $ q(\boldsymbol{z}\vert \mathbf{x},\boldsymbol{\lambda}) $ . 在大多數 VAE 中,我們選擇多元、不相關的高斯分佈

$$ q(\mathbf{z}\vert \mathbf{x},\boldsymbol{\lambda}) = \mathcal{N}(\mathbf{z}\vert\boldsymbol{\mu}(\mathbf{x}), \boldsymbol{\sigma}^2(\mathbf{x})I) $$

這是我們做出的相同選擇 $ p(\mathbf{x}\vert\mathbf{z}) $ ,儘管我們可能選擇了不同的參數族。和以前一樣,我們可以通過引入神經網絡模型來估計這些複雜的非線性函數。由於該模型接受輸入圖像並返回潛在變量分佈的參數,我們將其稱為編碼器網絡。和以前一樣,我們可以通過引入神經網絡模型來估計這些複雜的非線性函數。由於該模型接受輸入圖像並返回潛在變量分佈的參數,我們將其稱為編碼器網絡。

編碼器網絡

也稱為推理網絡,僅在訓練時使用。

在此處輸入圖像描述

如上所述,編碼器必須近似 $ \boldsymbol{\mu}(\mathbf{x}) $ 和 $ \boldsymbol{\sigma}(\mathbf{x}) $ ,因此如果我們有 24 個潛在變量,則編碼器的輸出是 $ d=48 $ 向量。編碼器具有權重(和偏差) $ \boldsymbol{\theta} $ . 學習 $ \boldsymbol{\theta} $ , 我們終於可以根據參數寫出 ELBO $ \boldsymbol{\theta} $ 和 $ \boldsymbol{\phi} $ 編碼器和解碼器網絡,以及訓練集點:

$$ ELBO(\boldsymbol{\theta},\boldsymbol{\phi})= \sum_i E_{q_{\boldsymbol{\theta}}(\boldsymbol{z}\vert \mathbf{x}i,\boldsymbol{\lambda})}[\log p{\boldsymbol{\phi}}(\mathbf{x}i\vert\boldsymbol{z})]-\mathcal{D}[(q{\boldsymbol{\theta}}(\boldsymbol{z}\vert \mathbf{x}_i,\boldsymbol{\lambda})\vert\vert p(\boldsymbol{z})] $$

我們終於可以得出結論了。與 ELBO 相反,作為 $ \boldsymbol{\theta} $ 和 $ \boldsymbol{\phi} $ , 用作 VAE 的損失函數。我們使用 SGD 來最小化這種損失,即最大化 ELBO。由於 ELBO 是證據的下界,這朝著最大化證據的方向發展,從而生成與訓練集中的圖像最相似的新圖像。ELBO 中的第一項是訓練集點的預期負對數似然,因此它鼓勵解碼器生成與訓練圖像相似的圖像。第二項可以解釋為正則化器:它鼓勵編碼器生成潛在變量的分佈,類似於 $ p(\boldsymbol{z})=\mathcal{N}(0,I) $ . 但是通過首先引入概率模型,我們明白了整個表達式的來源:近似後驗之間的 Kullabck-Leibler 散度的最小化 $ q_{\boldsymbol{\theta}}(\boldsymbol{z}\vert \mathbf{x},\boldsymbol{\lambda}) $ 和模型後驗 $ p(\boldsymbol{z}\vert \mathbf{x},\boldsymbol{\lambda}) $ . 2

一旦我們學會了 $ \boldsymbol{\theta} $ 和 $ \boldsymbol{\phi} $ 通過最大化 $ ELBO(\boldsymbol{\theta},\boldsymbol{\phi}) $ ,我們可以扔掉編碼器。從現在開始,要生成新圖像,只需採樣 $ \boldsymbol{z}\sim \mathcal{N}(0,I) $ 並通過解碼器傳播。解碼器輸出將是與訓練集中的圖像相似的圖像。

參考文獻和進一步閱讀


1這個假設並不是絕對必要的,儘管它簡化了我們對 VAE 的描述。但是,根據應用程序,您可以假設不同的分佈 $ p_{\phi}(\mathbf{x}\vert\mathbf{z}) $ . 例如,如果 $ \mathbf{x} $ 是二進制變量的向量,一個高斯 $ p $ 沒有意義,並且可以假設多元伯努利。

2 ELBO 表達式以其數學上的優雅,為 VAE 從業者隱藏了兩個主要的痛苦來源。一是平均期限 $ E_{q_{\boldsymbol{\theta}}(\boldsymbol{z}\vert \mathbf{x}i,\boldsymbol{\lambda})}[\log p{\boldsymbol{\phi}}(\mathbf{x}i\vert\boldsymbol{z})] $ . 這實際上需要計算期望值,這需要從 $ q{\boldsymbol{\theta}}(\boldsymbol{z}\vert \mathbf{x}_i,\boldsymbol{\lambda}) $ . 考慮到所涉及的神經網絡的規模,以及 SGD 算法的低收斂速度,必須在每次迭代中抽取多個隨機樣本(實際上,對於每個 minibatch,情況更糟)非常耗時。VAE 用戶通過使用單個(!)隨機樣本計算期望值非常實用地解決了這個問題。另一個問題是,要使用反向傳播算法訓練兩個神經網絡(編碼器和解碼器),我需要能夠區分從編碼器到解碼器的前向傳播所涉及的所有步驟。由於解碼器不是確定性的(評估其輸出需要從多元高斯中提取),因此詢問它是否是可微架構甚至沒有意義。解決這個問題的方法是重新參數化技巧

引用自:https://stats.stackexchange.com/questions/321841

comments powered by Disqus