深度學習 AE與VAE

2021-09-24 17:54:38 字數 2149 閱讀 9666

自動編碼器是一種資料的壓縮演算法,其中資料的壓縮和解壓縮函式是資料相關的、有損的、從樣本中自動學習的。在大部分提到自動編碼器的場合,壓縮和解壓縮的函式是通過神經網路實現的。

搭建乙個自動編碼器需要完成下面三樣工作:搭建編碼器,搭建解碼器,設定乙個損失函式,用以衡量由於壓縮而損失掉的資訊。編碼器和解碼器一般都是引數化的方程,並關於損失函式可導,典型情況是使用神經網路。編碼器和解碼器的引數可以通過最小化損失函式而優化,例如sgd。

自編碼器是乙個自監督的演算法,並不是乙個無監督演算法。自監督學習是監督學習的乙個例項,其標籤產生自輸入資料。要獲得乙個自監督的模型,你需要乙個靠譜的目標跟乙個損失函式,僅僅把目標設定為重構輸入可能不是正確的選項。

目前自編碼器的應用主要有兩個方面,第一是資料去噪,第二是為進行視覺化而降維。配合適當的維度和稀疏約束,自編碼器可以學習到比pca等技術更有意思的資料投影。

自編碼器(autoencoder)是神經網路的一種,經過訓練後能嘗試將輸入複製到輸出。自編碼內部有乙個隱藏層 h,可以產生編碼(code)表示輸入。該網路可以看作由兩部分組成:乙個由函式 h = f(x) 表示的編碼器和乙個生成重構的解碼器 r = g(h)。如果乙個自編碼器只是簡單地學會將處處設定為 g(f(x)) = x,那麼這個自編碼器就沒什麼特別的用處。相反,我們不應該將自編碼器設計成輸入到輸出完全相等。這通常需要向自編碼器強加一些約束,使它只能近似地複製,並只能複製與訓練資料相似的輸入。這些約束強制模型考慮輸入資料的哪些部分需要被優先複製,因此它往往能學習到資料的有用特性。

相比於自編碼器,vae更傾向於資料生成。只要訓練好了decoder,我們就可以從標準正態分佈生成資料作為解碼器的輸入,來生成類似但不同於訓練資料的新樣本,作用類似gan。

實際上,在ae的基礎上通過encoder產生的向量,可以這麼理解:

假如在ae中,一張滿月的作為輸入,模型得到的輸出是一張滿月的;一張弦月的作為輸入,模型得到的是一張弦月的。當從滿月的code和弦月的code中間sample出乙個點,我們希望是一張介於滿月和弦月之間的,但實際上,對於ae我們沒辦法確定模型會輸出什麼樣的,因為我們並不知道模型從滿月的code到弦月的code發生了什麼變化。

而vae做的事情,實際上就是在原本滿月和弦月生成的code上面加了noise,即在某個數值區間內,每個點理論上都可以輸出滿月的;在某個數值區間內,每個點理論上都可以輸出弦月的,當調整這個noise的值的時候,也就是改變了這個數值區間,如下圖所示,當兩個區間出現重合的公共點,那麼理論上,這個點既應該像滿月,又應該像弦月,因此輸出的就應該兼具滿月和弦月的特點,也就生成一張介於滿月和弦月之間的月相,而這個月相,在原本的輸入中是不存在的,即生成了新的。

在下面這個圖中,我們通過六個因素來描述最終的人臉形狀,而這些因素不同的值則代表了不同的特性:

對於每個隱性引數他不會去只生成固定的乙個數,而是會產生乙個置信值得分布區間,這是一種連續的表達方式,通過取樣,我們就可以獲得許多從來沒有見過的資料了。

vae和ae的差異在於:

為什麼會有這個差別呢?我們不妨從生成模型的角度考慮一下。既然ae的decoder做的是z

−>x』

z->x』

z−>x』

的變換,那麼理論上它也可以作為生成器使用。但這裡有個問題,顯然不是所有的rz都是有效的z。z的邊界在**?如何得到有效的z,從而生成x

xx?這些都不是ae能解決的。vae對映的是分布,而分布可以通過取樣得到有效的z,從而生成相應的xxx。

由AE到生成模型VAE

vae variational autoencoder 變分自編碼器 1 ae vae 2 vae以及損失函式 學習不僅僅在於學習本身,還有創新,深度學習也一樣,不僅在於其強大的學習能力,更在於它的創新能力。所以,我們將模型分為兩類,一類是判別模型,一類是生成模型。所謂判別模型,通常是利用訓練樣本來...

深度學習與神經網路(十四) VAE變分自編碼器

vae是無監督學習 variational autoencoder 變分自編碼器 通常我們會拿 vae 跟 gan 比較,的確,它們兩個的目標基本是一致的 希望構建乙個從隱變數 z 生成目標資料 x 的模型,但是實現上有所不同 vae作為乙個生成模型,其基本思路是很容易理解的 把一堆真實樣本通過編碼...

資源記錄 VAE 學習筆記

vae全面理解 上 vae全面理解 下 三顧vae 然後有一篇英文部落格,角度稍有不同,但也很好,與上面的部落格互相有補充 vae careful walkthrough 其中,高亮的一段 另外,英文部落格中的圖 decoder部分裡寫的 p z x 我覺得不是很恰當,其實應該是p x z 更好理解...