歡迎來到長春三峰光電儀器制造有限公司!

長春三峰光電儀器制造有限公司

高精度編碼器成功進入中國航天領域

被列為重點攻關計劃并已多次榮獲科技創新項目基金!

咨詢熱線
0431-85102283
新聞中心
您的位置:首頁 > 行業新聞 > 詳細內容

透徹理解變分自編碼器VAE生成圖像的原理

發布者:長春三峰光電儀器制造有限公司2019-04-26

VAE可以說是最有用的自動編碼器類型,但在我們嘗試解決VAE之前,有必要了解通常用于數據壓縮或去噪的傳統自動編碼器。

在本文中,我們將重點介紹一種稱為變分自動編碼器的特定類型的自動編碼器。網上有很多文章解釋了如何使用自動編碼器,但沒有一篇特別全面。在本文將說明為什么我們可能想要使用VAE、他們解決的問題類型,給出這些神經架構如何工作的數學背景,以及使用Keras的一些實際實現。

首先會試著通過一些例子讓你對VAE可以做的事情感到興奮。

VAE的力量

假設您正在開發一款視頻游戲,并且您擁有一款風格非常復雜的開放世界游戲。你聘請了一個平面設計師團隊來制作一堆植物和樹木來裝飾你的世界,但是一旦把它們放進游戲中你就會覺得它看起來不自然,因為同一物種的所有植物看起來完全一樣,那么你能做些什么呢?

首先,您可能建議使用一些參數化來隨機嘗試和扭曲圖像,但有多少特征就足夠了?這種變化應該有多大?一個重要的問題是,實施計算密集程度如何?

這是使用變分自動編碼器的理想情況。我們可以訓練神經網絡來學習關于植物的潛在特征,然后每當我們的世界中出現一個,我們就可以從我們的"學習"特征中隨機抽取樣本并生成一個獨特的植物。事實上,這是多少開放世界游戲開始在他們的世界中產生風景的方面。

我們來看一個更加圖形化的例子。想象一下,我們是一名建筑師,并希望為任意形狀的建筑物生成平面圖。我們可以使用自動編碼器網絡來學習給定任意構建形狀的數據生成分布,并且它將從我們的數據生成分布中獲取樣本并生成平面圖。這個想法在下面的動畫中顯示。

這些對設計師的潛力可以說是最突出的。想象一下,我們為一家時裝公司工作,并負責創造新的服裝款式,事實上,我們可以在"時尚"商品上訓練自動編碼器,并讓網絡學習時裝發布的數據。隨后,我們可以從這個低維潛在分布中獲取樣本,并使用它來創建新的想法。

最后一個示例是我們將在本教程的最后一部分中使用的示例,其中將研究時尚流行的MNIST數據集。

自動編碼

傳統的自動編碼器

自動編碼器是令人驚訝的簡單神經架構。它們基本上是一種壓縮形式,類似于使用MP3壓縮音頻文件的方式,或者使用JPEG壓縮圖像文件。

自動編碼器與主成分分析(PCA)密切相關。實際上,如果自動編碼器中使用的激活函數在每個層內都是線性的,則瓶頸中存在的潛在變量直接對應于來自PCA的主要組件。通常,自動編碼器中使用的激活函數是非線性的,典型的激活函數是ReLU(整流線性單元)和S形激活函數。

網絡背后的數學很容易理解,所以我將簡要介紹一下。本質上,我們將網絡分為兩個部分,即編碼器和解碼器。

由φ表示的編碼器功能將原始數據X映射到潛在空間F,潛在空間F存在于瓶頸處。由ψ表示的解碼器功能將瓶頸處的潛在空間F映射到輸出。在這種情況下,輸出與輸入功能相同。因此,我們基本上試圖在一些廣義非線性壓縮之后重建原始圖像。

編碼網絡可以由通過激活函數的標準神經網絡函數表示,其中z是潛在維度。

類似地,解碼網絡可以以相同的方式表示,但是使用不同的權重,偏差和潛在的激活函數。

然后可以根據這些網絡函數編寫損失函數,并且我們將使用這種損失函數通過標準反向傳播過程訓練神經網絡。

由于輸入和輸出是相同的圖像,這不是真正的監督或無監督學習,因此我們通常稱之為自我監督學習。自動編碼器的目的是選擇我們的編碼器和解碼器函數,使得我們需要最少的信息來對圖像進行編碼,使得它可以在另一側再生。

如果我們在瓶頸層中使用的節點太少,重新創建圖像的能力將受到限制,我們將重新生成模糊或無法識別原始圖像。如果我們使用太多節點,那么根本不需要使用壓縮。

壓縮的情況非常簡單,例如,如果你下載某些內容時,就會壓縮發送給您的數據。一旦它到達你的計算機,它將通過解壓縮算法,然后顯示在您的計算機上。這類似于zip文件的工作方式,除了它是通過流式算法在幕后完成的。

去噪自動編碼器

還有其他幾種類型的自動編碼器。最常用的一種是去噪自動編碼器,它將在本文后面用Keras進行分析。這些自動編碼器在訓練之前為數據添加了一些白噪聲,但在訓練時將誤差與原始圖像進行比較。這迫使網絡不會過度適應圖像中存在的任意噪聲。稍后我們將使用它來從掃描的文檔圖像中刪除折痕和黑暗區域。

稀疏自動編碼器

與直觀相反,稀疏自動編碼器具有比輸入或輸出維度更大的潛在維度。但是,每次運行網絡時,只有一小部分神經元會發射,這意味著網絡本質上是"稀疏的"。這類似于去噪自動編碼器,在某種意義上它也是一種正規化形式,以減少網絡過度擬合的傾向。

壓縮自動編碼器

壓縮編碼器與后兩個程序大致相同,但在這種情況下,我們不會改變體系結構,只需在損失函數中添加正則化器。這可以被認為是脊回歸的神經形式。

現在,我們了解了自動編碼器的用途,我們需要了解他們不擅長什么。一些最大的挑戰是:

· 潛在空間的差距

· 潛在空間中的可分離性

· 離散潛伏空間

這些問題都可以在此圖中說明。

MNIST數據集的潛在空間表示

該圖顯示了潛在空間內不同標記數字的位置。我們可以看到潛在空間包含間隙,不知道這些空間中的哪些字符可能看起來像。這相當于在監督學習問題中缺乏數據,因為我們的網絡尚未針對潛在空間的這些情況進行過訓練。另一個問題是空間的可分離性,上圖中有幾個數字很好地分開,但也有標記隨機散布的區域,這使得難以分離字符的獨特特征(在這種情況下數字0 -9)。這里的另一個問題是無法研究連續的潛在空間,例如:

傳統自動編碼器的這些問題意味著在我們學習數據生成分布并生成新數據和圖像之前,我們還有很長的路要走。

現在我們了解了傳統自動編碼器的工作原理,我們將繼續使用變分自動編碼器。這些稍微復雜一些,因為它們實現了一種取自貝葉斯統計數據的變分推理。我們將在下一節中更深入地討論這個問題

變分自動編碼器

VAE繼承了傳統自動編碼器的架構,并使用它來學習數據生成分布,這允許我們從潛在空間中隨機抽取樣本。然后可以使用解碼器網絡對這些隨機樣本進行解碼,以生成具有與訓練網絡的特征類似的特征的獨特圖像。

對于那些熟悉貝葉斯統計數據的人來說,編碼器正在學習后驗分布的近似。這種分布通常難以分析,因為它沒有封閉形式的解決方案。這意味著我們可以執行計算昂貴的采樣程序,如馬爾可夫鏈蒙特卡羅(MCMC)方法,或者我們可以使用變分方法。正如人們可能懷疑的那樣,變分自動編碼器使用變分推理來生成其對該后驗分布的近似。

我們需要了解的第一件事是后驗分布以及為什么我們無法計算它。看看下面的等式,這是貝葉斯定理。這里的前提是我們想要知道如何從我們的潛在變量z中學習如何生成數據x 。這意味著我們想要學習p(z | x)。但是,我們不知道這種分布,我們不需要,因為我們可以用貝葉斯定理重新表達這個概率。然而,這并不能解決我們所有的問題,因為被稱為證據的分母通常是難以處理的。然而,一切都沒有丟失,因為存在一種允許我們近似這種后驗分布的厚臉皮解決方案。事實證明,我們可以將此推理問題轉化為優化問題。

為了近似后驗分布,我們需要一種方法來評估提案分布與真實后驗的比較。要做到這一點,我們使用貝葉斯統計學家最好的朋友,Kullback-Leibler散度。KL散度衡量兩種概率分布的相似程度; 如果它們是相同的,則分歧為零,如果它是正數,則兩個分布是不同的。KL嚴格為正,雖然技術上不是距離,因為函數不對稱。我們以下列方式使用KL散度。

這個等式可能看起來令人生畏,但這里的想法非常簡單。我們提出了一系列可能的分布,可能是我們的數據生成方式Q,我們希望找到最優分布q *,它能最小化我們在擬議分布和實際分布之間的距離。我們對這個公式仍有一個問題,即我們實際上并不知道p(z | x),因此我們無法計算KL偏差。那我們如何解決這個問題?

這是開始有點深奧的地方。我們可以做一些數學操作,并用ELBO(證據下界)和另一個涉及p(x)的術語重寫KL散度。

有趣的是,ELBO是這個等式中唯一的變量,它取決于我們選擇的分布。另一個術語不受我們選擇的分布的影響,因為它不依賴于q。因此,我們可以通過在上面的等式中最大化ELBO來最小化KL散度。關鍵是我們可以實際計算ELBO,這意味著我們現在可以執行優化過程。

因此,我們現在需要做的就是為Q提供一個很好的選擇,然后區分ELBO,將其設置為零,瞧,我們有最佳分布。

通常,在定義q時,為了簡單起見,進行平均場變分推斷。這基本上表示每個變分參數彼此獨立。因此,我們對每個數據點都有一個q,我們可以將它們相乘以給出一個聯合概率,給出"平均場" q。

實際上,我們可以根據需要選擇任意數量的字段或集群。例如,在MNIST的情況下,我們可能會選擇10個集群,因為我們知道存在10個可能的數字。

我們需要做的第二件事是通常稱為重新參數化的技巧,我們將隨機變量置于導數之外,因為隨機變量的導數由于其固有的隨機性而給出了更大的誤差。

重新參數化技巧有點深奧,但它基本上說明我們可以將正態分布寫成平均值加上一些標準偏差,乘以一些誤差。

這意味著在區分時,我們不是取隨機函數本身的導數,而只是它的參數。

如果這沒有多大意義,下面這段話解釋了這個技巧以及為什么它比隨機變量本身的衍生物更好地表現出來:

這個過程沒有一般的封閉形式解決方案,因此我們仍然在某種程度上限制了我們近似后驗分布的能力。然而,指數分布族確實具有封閉形式的解決方案。這意味著我們可以使用標準分布,例如正態分布,二項式,泊松,β等。因此,雖然我們可能找不到真正的后驗分布,但我們可以找到一個近似值,它可以在給定指數族的情況下發揮最佳作用。

變分推理的藝術是選擇我們的分布族Q,它足夠大以獲得后驗的良好近似,但不能太大以至于需要花費相當長的時間來計算。

現在我們已經對我們的網絡如何訓練以了解數據的潛在分布有了一個很好的了解,我們可以看看我們如何使用這種分布生成數據。

數據生成程序

看下面的圖像,我們可以認為我們對數據生成過程的近似決定了我們想要生成數字'2',因此它從潛在變量質心生成值2。但是,我們可能不希望每次都生成相同的'2',就像我們的植物視頻游戲示例一樣,所以我們在潛在空間中為此項添加一些隨機噪聲,這是基于隨機數和'學會了'價值分布的傳播'2'。我們通過我們的解碼器網絡傳遞它,我們得到一個看起來與原始不同的2。

這是一個過于簡化的版本,它抽象了實際自動編碼器網絡的架構。下面是在編碼器和解碼器網絡中使用卷積層的真實變分自動編碼器的體系結構的表示。我們看到,我們分別在潛在空間內學習數據生成分布的中心和擴展,然后從這些分布中"采樣"以生成基本上"偽造"的數據。

學習過程的固有性質意味著看起來相似的參數(刺激相同的網絡神經元發射)在潛在空間中聚集在一起,并且不是任意間隔的。這在下圖中說明。我們看到2的值開始聚集在一起,而值3逐漸被推開。這很有用,因為它意味著網絡不會在潛在空間中任意放置字符,從而使值之間的轉換更真實。

整個網絡架構的概述如下所示。我們使用一組圖像訓練自動編碼器,以了解潛在空間內的平均值和標準偏差,從而形成我們的數據生成分布。接下來,當我們想要生成相似的圖像時,我們從潛在空間中的一個質心進行采樣,使用我們的標準偏差和一些隨機誤差稍微扭曲它,然后通過解碼器網絡傳遞它。從該示例可以清楚地看出,最終輸出看起來與輸入圖像相似但不相同。

VAE編碼教程

我們將介紹一種簡單的去噪自動編碼器,用于去除文檔掃描圖像上的折痕和標記,以及消除時尚MNIST數據集中的噪聲。然后,我們將在使用MNIST數據集訓練網絡后使用VAE生成新的服裝項目。

去噪自動編碼器

MNIST

對于第一個練習,我們將向MNIST數據集添加一些隨機噪聲(鹽和胡椒噪聲),我們將嘗試使用去噪自動編碼器消除這種噪聲。首先,我們執行預處理:下載數據,縮放數據,然后添加噪聲。

在此之后,我們為自動編碼器網絡創建了架構。這涉及多層卷積神經網絡,編碼器網絡上的最大池化層以及解碼器網絡上的升級層。

除非你有GPU,否則該模型需要一段時間才能運行,每個時期大約需要3-4分鐘。我們的輸入圖像,帶噪聲的輸入圖像和輸出圖像如下所示。

輸入時尚MNIST的圖像

用鹽和胡椒噪聲輸入圖像

去噪網絡的輸出

正如你所看到的,我們能夠從嘈雜的圖像中充分消除噪音,但我們已經失去了相當多的服裝細節分辨率。這是我們為強大網絡支付的價格之一?梢哉{整網絡以使該最終輸出更能代表輸入圖像。

文字清理

我們的第二個去噪自動編碼器示例包括清理折痕和暗區的掃描圖像。以下是我們想要獲得的輸入和輸出圖像。

輸入"嘈雜"文本數據的圖像

清理文本圖像

變分自動編碼器

對于我們的結果,我們將嘗試生成時尚MNIST數據集中存在的服裝項目的新圖像。

這種神經結構有點復雜,并且包含一個稱為"Lambda"層的采樣層。

這是架構,但我們仍然需要插入損失函數并合并KL分歧。

我們現在可以查看我們的重建樣本,看看我們的網絡能夠學到什么。

我們可以清楚地看到鞋子,手提包和服裝商品之間的過渡。此處并未繪制所有潛在空間以幫助提高圖像清晰度。我們還可以查看時尚MNIST數據集中存在的10個服裝項目中的每一個的潛在空間和顏色代碼。

我們看到這些項目被分成不同的集群

通過本文對變分自動編碼器和變分推理的透徹講解。希望你們現在可以更好地了解自動編碼器是什么以及它們如何在實際應用中使用。

浙江11选5中奖规则