自编码器(AE)
自編碼器可以理解為一個試圖去還原其原始輸入的系統,如下圖所示,虛線藍色框內就是一個自編碼器模型,它由編碼器(Encoder)和解碼器(Decoder)兩部分組成,本質上都是對輸入信號做某種變換。基本意思就是一個隱藏層的神經網絡,輸入輸出都是x,并且輸入維度一定要比輸出維度大,屬于無監督學習。一種利用反向傳播算法使得輸出值等于輸入值的神經網絡,它先將輸入壓縮成潛在空間表征,然后通過這種表征來重構輸出。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???
對于自編碼器,我們往往并不關系輸出是啥(反正只是復現輸入),我們真正關心的是中間層的編碼,或者說是從輸入到編碼的映射。可以這么想,在我們強迫編碼y和輸入x不同的情況下,系統還能夠去復原原始信號x,那么說明編碼y已經承載了原始數據的所有信息,但以一種不同的形式!這就是特征提取啊,而且是自動學出來的!實際上,自動學習原始數據的特征表達也是神經網絡和深度學習的核心目的之一。?
?Auto-Encoder: What Is It? And What Is It Used For? (Part 1):https://towardsdatascience.com/auto-encoder-what-is-it-and-what-is-it-used-for-part-1-3e5c6f017726
目錄
1. AutoEncoder模型演進
1.1 AutoEncoder
1.2 Denoising AutoEncoder
1.3 Sparse AutoEncoder
1.4 CNN/LSTM AutoEncoder
1.5 Variational AutoEncoder(VAE)
1.6 Adversarial AutoEncoder
2. 背景知識點
2.1 KL散度
2.2 變分推斷:用于近似計算后驗分布P(Z|X)
2.3 Reparameterization Trick:對某一分布的數據進行采樣
2.4?GAN生成對抗網絡
1. AutoEncoder模型演進
參考:AutoEncoder模型演進圖譜
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ?
1.1 AutoEncoder
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ? ?
這里我們可以看到,AutoEncoder在優化過程中無需使用樣本的label,本質上是把樣本的輸入同時作為神經網絡的輸入和輸出,通過最小化重構誤差希望學習到樣本的抽象特征表示z。這種無監督的優化方式大大提升了模型的通用性。
對于基于神經網絡的AutoEncoder模型來說,則是encoder部分通過逐層降低神經元個數來對數據進行壓縮;decoder部分基于數據的抽象表示逐層提升神經元數量,最終實現對輸入樣本的重構。
問題:
這里指的注意的是,由于AutoEncoder通過神經網絡來學習每個樣本的唯一抽象表示,這會帶來一個問題:當神經網絡的參數復雜到一定程度時AutoEncoder很容易存在過擬合的風險。?
1.2 Denoising AutoEncoder
為了緩解經典AutoEncoder容易過擬合的問題:
下圖是Denoising AutoEncoder的模型框架。目前添加噪聲的方式大多分為兩種:(1)添加服從特定分布的隨機噪聲;(2)隨機將輸入x中特定比例置為0。有沒有覺得第二種方法跟現在廣泛石紅的Dropout很相似,但是Dropout方法是Hinton等人在2012年才提出來的,而第二種加噪聲的方法在08年就已經被應用了。這其中的關系,就留給你思考一下。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Denoising AutoEncoder模型框架
1.3 Sparse AutoEncoder
為了在學習輸入樣本表示的時候可以得到稀疏的高維抽象特征表示,Ng等人[5]在原來的損失函數中加入了一個控制稀疏化的正則項。稀疏約束能迫使encoder的各層只有部分神經元被激活,從而將樣本映射成低維稀疏特征向量。?
具體來說,如果單個神經元被激活的概率很小,則可認為該網絡具有稀疏性。神經元是否被激活可以看做服從概率的伯努利分布。
神經網絡稀疏性的約束衡量方式:
- 可以使用KL散度來衡量神經元被激活的概率ρ^與期望概率ρ之間的loss,通過將D_KL加入到AutoEncoder的目標函數中,即可實現對神經網絡稀疏性的約束。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
- 另外,還有一種方法就是對神經網絡各層的輸出加入L1約束。
1.4 CNN/LSTM AutoEncoder
其實無論是Convolutional Autoencoder[6]、 Recursive Autoencoder還是LSTM Autoencoder[7]等等,思路都是將傳統NN網絡的結構融入到AutoEncoder中。
以LSTM AutoEncoder為例,目標是針對輸入的樣本序列學習得到抽象特征z。因此
- encoder部分:是輸入一個樣本序列輸出抽象特征z,采用如下的?Many-to-one LSTM;
- decoder部分:則是根據抽象特征z,重構出序列,采用如下的?One-to-many LSTM。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
將傳統NN網絡的結構引入AutoEncoder其實更多是一個大概的思想,具體實現的時候,編碼器和解碼器都是不固定的,可選的有:CNN/RNN/雙向RNN/LSTM/GRU等等,而且可以根據需要自由組合。
1.5 Variational AutoEncoder(VAE)
參考:
- 論文:"Tutorial on Variational Autoencoders"
- 博客:“Tutorial - What is a variational autoencoder??”。
- 損失函數含義:Deep Learning AutoEncoder 及其相關模型
Vairational AutoEncoder(VAE)是Kingma等人與2014年提出。VAE比較大的不同點在于:
VAE不再將輸入x映射到一個固定的抽象特征z上,而是假設樣本x的抽象特征z服從(μ,σ^2)的正態分布,然后再通過分布采樣生成抽象特征z(重采樣Reparametrization tricks),最后基于z通過decoder得到輸出。
由于抽象特征z是從正態分布采樣生成而來,因此VAE的encoder部分是一個生成模型,然后再結合decoder來實現重構保證信息沒有丟失。模型框架如下圖所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
損失函數:?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
VAE 的結構可以表示為圖1:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ? ??? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖1? VAE? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 圖2? VAE:Reparameterization Trick
但是,圖1這種方式需要在前向傳播時進行采樣,而這種采樣操作是無法進行反向傳播 的。于是,論文作者提出一種“Reparameterization Trick”:將對采樣的操作移到輸入層進行,于是就有了圖2的VAE 最終形式:
? ? ? ? ? ? ? ? ? ??
下圖表示了 VAE 整個過程。即首先通過 Encoder 得到x的隱變量分布參數;然后采樣得到隱變量z。接下來按公式,應該是利用 Decoder 求得x的分布參數,而實際中一般就直接利用隱變量恢復x
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
下圖展示了一個具有3個隱變量的 VAE 結構示意圖,是對上面抽象描述的一個補充說明,不再贅述。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???
VAE 理論跟實際效果都非常驚艷,理論上涉及到的主要背景知識也比較多,包括:隱變量(Latent Variable Models)、變分推理(Variational Inference)、Reparameterization Trick 等。
VAE是一個里程碑式的研究成果,倒不是因為他是一個效果多么好的生成模型,主要是提供了一個結合概率圖的思路來增強模型的魯棒性。后續有很多基于VAE的擴展,包括infoVAE、betaVAE和factorVAE等。
1.6 Adversarial AutoEncoder
既然說到生成模型引入AutoEncoder,那必定也少不了將GAN的思路引入AutoEncoder[9],也取得了不錯的效果。
對抗自編碼器的網絡結構主要分成兩大部分:自編碼部分(上半部分)、GAN判別網絡(下半部分)。整個框架也就是GAN和AutoEncoder框架二者的結合。訓練過程分成兩個階段:首先是樣本重構階段,通過梯度下降更新自編碼器encoder部分、以及decoder的參數、使得重構損失函數最小化;然后是正則化約束階段,交替更新判別網絡參數和生成網絡(encoder部分)參數以此提高encoder部分混淆判別網絡的能力。
一旦訓練完畢,自編碼器的encoder部分便學習到了從樣本數據x到抽象特征z的映射關系。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
2. 背景知識點
2.1 KL散度
KL 散度:https://blog.csdn.net/matrix_space/article/details/80550561?
在信息論中,D(p||q) 表示用概率分布Q來擬合真實分布P時,產生的信息損耗,其中P表示真實分布,Q表示P的擬合分布
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
2.2 變分推斷:用于近似計算后驗分布P(Z|X)
參考:變分推斷(Variational Inference)最新進展簡述
變分推斷(Variational Inference, VI)是貝葉斯近似推斷方法中的一大類方法,將后驗推斷問題巧妙地轉化為優化問題進行求解,相比另一大類方法馬爾可夫鏈蒙特卡洛方法(Markov Chain Monte Carlo, MCMC),VI 具有更好的收斂性和可擴展性(scalability),更適合求解大規模近似推斷問題。
當前機器學習兩大熱門研究方向:深度隱變量模型(Deep Latent Variable Model, DLVM)和深度神經網絡模型的預測不確定性(Predictive Uncertainty)的計算求解都依賴于 VI,尤其是 Scalable VI。其中,DLVM 的一個典型代表是變分自編碼器(Variational Autoencoder, VAE),是一種主流的深度生成模型,廣泛應用于圖像、語音甚至是文本的生成任務上;而預測不確定性的典型代表是貝葉斯神經網絡(Bayesian Neural Network, BNN)。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?變分推斷
問題定義:
原始目標是:需要根據已有數據推斷需要的分布p;當p不容易表達,不能直接求解時,可以嘗試用變分推斷的方法, 即,尋找容易表達和求解的分布q,當q和p的差距很小的時候,q就可以作為p的近似分布,成為輸出結果了。在這個過程中,我們的關鍵點轉變了,從“求分布”的推斷問題,變成了“縮小距離”的優化問題。
考慮一個一般性的問題, x 是 n 維的觀測變量,z 是 m 維的隱變量,貝葉斯模型中需要計算后驗分布,如下:?
? ? ? ? ? ? ? ? ? ?
其中,p(z) 是先驗分布,p(x|z) 是似然函數, p(x)=∫p(z)p(x|z),稱為 evidence,通常 p(x) 是一個不可積的多重積分,導致后驗分布 p(z|x) 無法獲得解析解,同時因為 p(x) 只與確定的觀測變量有關,在計算時可認為是一個常數。
VI 假設后驗分布用一個變分分布 q(z;θ) 來近似,通過構造如下優化問題,KL散度:
? ? ? ? ? ? ??
求解使得兩個分布距離最小的變分分布參數 θ,從而得到近似后驗分布。因為真實后驗分布是未知的,直接優化公式(2)是一件比較有挑戰的事情,VI 巧妙地將其轉化為優化 ELBO 的問題。
2.3 Reparameterization Trick:對某一分布的數據進行采樣
Reparametrization tricks 重參數技巧
在 VAE 中,隱變量z一般取高斯分布,即z=N(μ,σ2)=P(Z|X),然后從這個分布P(Z|X)中采樣,但采樣的過程本身是不可逆的,就導致整個過程無法反向傳播。我們已經知道?P(Z|X)?是服從正態分布的,也知道均值和方差,那么如何產生數據呢?解決方法就是Reparametrization tricks重參數技巧,從正態分布P(Z|X)中采樣得到Z:
首先,從均值為0、標準差為1的高斯分布中采樣,再放縮平移得到Z:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
這樣,從?到z只涉及了線性操作(平移縮放),采樣操作在NN計算圖之外,這樣相當于將采樣過程提前,而?對于NN來說只是一個常數。
2.4?GAN生成對抗網絡
GAN生成對抗網絡:https://easyai.tech/ai-definition/gan/
?
?
?
總結
- 上一篇: jieba分词(python使用篇)(一
- 下一篇: 强化学习(RL)