時間:2018-07-04 17:02:25來源:網絡轉載
眾所周知,在實驗中我們會遇到各種各樣的數據,那么想象一下,如果我們遇到沒有標簽的數據會發生什么呢?大多數深度學習技術需要干凈的標注數據,但這一點現實嗎?從技術本質上說,如果你有一組輸入及其各自的目標標簽,你可以試著去了解特定目標的特定標簽概率。當然,現實中圖像映射真的會如此美好嗎?在這篇文章中,我將探索變分自編碼器(VAE),以更深入了解未標記數據的世界。該模型在對沒有標簽的圖像集合進行訓練后將產生獨特的圖像。
自動編碼器將輸入數據順序地解構為隱藏表示,并使用這些表示來順序地重構與它們的原始內容相似的輸出。它本質上是數據特定的數據壓縮,而這意味著它只能對類似于已經它訓練的數據進行壓縮。當然,自動編碼器也被公認為是有損耗的,因此相較于原始輸入,解壓縮輸出結果會稍微降低一些。那么大家可能會有所疑問,如果它們會造成質量損失,為什么還那么實用呢?這是一個很好的問題,事實證明,它們對于數據去噪是非常有用的,即我們在這里訓練一個自動編碼器,從自身損壞版本中重構輸入,這樣它就可以消除類似的損壞數據。
首先,我們來談談貝葉斯推理(Bayesianinference)。所有閱讀這篇文章的人可能都知道深度學習,以及談到近似復雜函數時它的有效性,然而貝葉斯推理提供了一個獨特的框架來解釋不確定性,所有的不確定性都是用概率表示的。這是有道理的,如果你仔細想想,在任何給定的時間,都有證據支持或反對我們已知的事物,這些證據可以被用來創造一個新的概率。再進一步,當我們學習新的東西時,我們必須考慮我們已經知道的,并將新的證據加入到考慮范圍內,創造一個新的概率。貝葉斯理論基本上是用數學方法描述這個概念的。
VAE就是這些想法的產物。從貝葉斯的角度來看,我們可以將VAE的輸入、隱藏表示和重構輸出視為有向圖形模型中的概率隨機變量。假設它包含一些數據的特定概率模型,x和潛在/隱藏變量z,我們便可以寫出模型的聯合概率,如下所示:
模型的聯合概率
給定模型生成的一個字符,我們不知道隱形變量的設置是如何生成這個字符的,我們的模型本質上就是隨機的!
VAE由3個主要部分組成:
?編碼器
?解碼器
?損失函數
給定輸入x,假設我們有一個28×28的手寫數字圖像,它可以達到784維度,其中每個像素都是一維的。現在,這將會編碼到一個潛在/隱藏的表示空間,而這將要比784少很多。我們現在可以采樣高斯概率密度來獲得表示的噪聲值。
是不是很酷?下面我們就用代碼來將這個表示出來吧。
首先,我們導入庫并找到我們的超參數。
接下來,初始化編碼器網絡。該網絡的工作是將輸入映射到隱藏的分布參數中。我們接受輸入,并通過ReLU(壓縮維度的經典非線性激活函數)的密集完全連接層發送它。下一步,我們將輸入數據轉換為隱藏空間中的兩個參數。我們使用密集,完全連接層-zmean和zlogsigma來預定義大小。
解碼器將“z”作為其輸入,并將參數輸出到數據的概率分布中。我們假設每個像素是1或0(黑色或白色),現在我們可以使用伯努利分布,因為它會將“成功”定義為二進制值來表示單個像素。因此,解碼器將獲得一個數字的潛在/隱藏表示以作為其輸入,并且它會輸出784個伯努利參數,每個像素一個,所以在0和1之間有784個值。
我們將使用z_mean和z_log_var,通過定義采樣函數,從隱藏/潛在正態分布中隨機抽取新的類似點。以下代碼塊中的epsilon是一個隨機正態張量。
一旦我們得到z,我們可以將其提供給我們的解碼器,解碼器會將這些潛在空間點映射回原始輸入數據。因此,為了構建一個解碼器,我們首先用兩個完全連接層及其它們各自的激活函數對其進行初始化。因為數據是從一個小的維度提取到一個較大維數,所以其中一些會在重構過程中丟失。
確實很酷?但是這個“一些”到底是多少呢?為了獲取準確值,我們將建立損失函數對其進行精確測量。下面的第一項是測量重構損失。如果解碼器輸出在重建數據方面很糟糕,那么損失方面的成本就會相當大。下一個項是正則化項,意味著它可以保持每個數字的表示盡可能多樣化。所以舉個例子來說就是,如果兩個不同的人同時寫出數字3,那么這些表示結果可能會看起來很不一樣,因為不同的人寫的結果當然會不一樣。這可能是一個不盡如人意的結果,而正則化項的任務就是拯救“不如意”!我們對不良行為進行懲罰(如這里的例子),并確保類似的表示是緊密相連的。我們可以將總損失函數定義為重構項和KL的散度正則化項的總和。
現在來到訓練部分,我們通常會使用梯度下降來訓練這個模型,以優化我們對編碼器和解碼器參數的損失。但是我們如何對隨機確定的變量的參數進行衍生?
原來,我們已經將隨機性建立在我們的模型本身上了。現在,梯度下降通常期望一個給定的輸入總是返回一個固定參數組的相同輸出。在我們這種情況下唯一的隨機來源將是輸入。那么我們如何解決這個問題呢?我們重新確定參數!我們將對樣本進行重新確定參數,使得隨機性可以獨立于參數。
我們將定義一個取決于參數確定性的函數,因此我們可以通過引入隨機變量將隨機性注入到模型中。編碼器將生成平均值向量和標準偏差向量,而不是生成實數值的向量。我們采用涉及z的函數關于其分布參數的導數。我們將模型的優化器定義為rmsprop,并將損失函數定義為vae_loss。
我們通過導入MNIST數據集并將它們饋送到我們的模型中,為給定數量的訓練次數和批量大小開始下面的訓練。
下面我們畫出二維平面上的鄰域。每個顏色聚類用一個數字表示,而閉合聚類本質上是與結構相似的數字。
數字表示法
另一種表示方法是通過掃描潛在計劃(latentplan)生成數字,定期采樣潛點,并為這些點生成相應的數字,如下所示:
生成的數字
這在某些程度上讓你感到震撼!
所以這個練習在本質上有三個關鍵的要點:
?變分編碼器允許我們通過執行無監督學習以生成數據。
?VAE=貝葉斯推理+深度學習。
?重參數化使我們能夠通過網絡進行反向傳播,隨機獨立的參數使我們能夠得出梯度。
查看github上的代碼,可獲得完整代碼資源:https://github.com/vvkv/Variational-Auto-Encoders/blob/master/Variational%2BAuto%2BEncoders.ipynb
標簽:
下一篇:詳細解析工業機器人控制系統
中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.hysjfh.com)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。
本網轉載并注明其他來源的稿件,均來自互聯網或業內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。
產品新聞
更多>2025-05-19
2025-04-30
2025-04-11
2025-04-08
2025-03-31
2025-03-26