天天看點

從PCA到AutoEncoder

文章目錄

    • PCA
    • PPCA
    • Kernel PCA
    • ICA
    • AutoEncoder
      • Undercomplete AutoEncoder
      • Sparse AutoEncoder
      • Stacked AutoEncoder
      • Denoising AutoEncoder
      • Contrastive AutoEncoder
      • VAE and AAE
      • More
      • 推薦閱讀
      • Reference

PCA

理論簡單,計算隻涉及到線性代數的計算,特征保持正交性,如果原始特征不具有正交性,隻有獨立性,這個時候可以使用ICA。

有兩種可産生相同算法的等價視角:最大方差和最小重構誤差。兩種視角都希望找到一組正交投影,把原資料投影到低維的線性子空間上。但最大方差視角是說,我們希望資料投影之後在投影方向上有最大方差;而最小重構誤差視角是說,我們希望投影後的資料和原資料之間的均方差最小。

計算過程:

  1. 定義樣本均值和樣本協方差
  2. 可以得到某個投影方向u_1上的方差
  3. 方差最大作為目标函數,把這個問題看作有限制最優化問題,是以可用拉格朗日乘子法求解,令導數為0,線性代數中的特征值分解問題,求得特征值和特征向量。

    在餘下的方向中依次選擇最大方差方向,就是S由大到小給出的各個特征值以及對應的特征向量,由于S是實對稱矩陣,得到的特征向量之間是正交,線性無關,可以互不影響,依次求解。

    最小重構誤差視角和最大方差視角一樣,也是特征值問題。隻不過這裡是去掉較小特征值對應的方向,因為那些方向對應着較小的重構誤差,而先前是保留較大特征值對應的方向。但得到的結果是完全一樣的。

    從PCA到AutoEncoder

PCA的複雜度問題,特征分解是 O(n^3) 複雜度,

如果僅需要前M個最大的特征值以及特征向量,那麼有一些算法可達到O(M*D^2)複雜度

PPCA

PPCA比起傳統PCA,有一點優勢就是利用了機率分布。因為我們的資料即使在某個低維子空間上,也不可能分布在整個子空間,而是隻處在其中一個小區域。機率模型就很好地利用了這一點。當然,除了生成資料之外,機率模型更大的優勢還是通過觀察變量,也就是手裡的資料,去推斷參數也就是 W W W、 μ \mu μ、 σ 2 \sigma^2 σ2是什麼。這就要利用一些統計推斷方法,比如最大似然法。但想用最大似然,必須先知道似然函數是什麼。

x = W z + μ + ϵ x=Wz+{\mu}+{\epsilon} x=Wz+μ+ϵ

假定各維噪聲之間是獨立的、且方差相等。從這個機率架構可以看出,我們先是用 W W W建立了隐變量與觀察變量之間的關系,再用 μ \mu μ和 ϵ \epsilon ϵ描述了觀察變量的機率分布是什麼樣的。

從機率角度看,這些隐變量張成的子空間以及從該子空間如何生成樣本比較重要,但取這個子空間的哪些方向則不是那麼重要。隻要子空間一緻,我們可以任意旋轉張成子空間的這些方向。我覺得這也是PPCA和傳統PCA的差別之一。

Kernel PCA

在低維空間無法區分的特征,先通過Kernel函數從低維空間映射到高維空間,再通過PCA進行降維。

ICA

PCA假設隐變量服從高斯分布,這樣想得到各維之間獨立的隐變量,隻需旋轉隐變量使其協方差陣為對角陣即可,即隐變量各維之間線性無關。對于高斯分布來說,線性無關就是獨立,是以其聯合分布可分解為各維分布的乘積。

如果不要求隐變量一定是高斯分布,但仍保持觀察變量和隐變量之間具有線性關系,那就是ICA。這樣的話,協方差陣為對角陣就不夠了,因為對于任意分布來說,線性無關隻是獨立的必要條件而非充分條件。

得到這個獨立解可以有很多方法,比如用高階統計量而不僅僅是二階的協方差來度量獨立性,或者用互資訊等方式來度量。

AutoEncoder

從PCA到AutoEncoder
從PCA到AutoEncoder

對 X X X重新表達後,再用 regression 來預測 y y y會效果很好。那隐含層的 x ′ x' x′向量,一般就假設是互相獨立,也就是開始的x裡的correlation被抹去了。

Undercomplete AutoEncoder

将未标注的訓練集,拿來做監督學習,學習輸入的重構輸出。通過最小化重構損失函數L(x,x̂ ),訓練未标注訓練集,得到x的中間表示。 輸出的神經元數量要和輸入的數量一樣,也稱Undercomplete AutoEncoder,是PCA的非線性泛化。 如果每一層不加激活函數,也可以視作是線性的PCA降維表示。

Undercomplete AutoEncoder 中不考慮正則化部分

為了防止模型隻是記住 x 和 overfitting,增加模型的泛化能力,在L中加入正則化

L(x,x̂ ) + regularizer

Sparse AutoEncoder

It’s worth noting that this is a different approach towards regularization, as we normally regularize the weights of a network, not the activations.

和上面提到的正則化不同,正則化是對網絡學習得到的權重進行,而Sparse AE是對激活函數進行正則化,本質上就是在損失函數裡加上能讓隐向量h稀疏化的正則項。A sparse autoencoder involves a sparsity penalty Ω(h) on

the code layer h.

從PCA到AutoEncoder
從PCA到AutoEncoder

One result of this fact is that we allow our network to sensitize individual hidden layer nodes toward specific attributes of the input data. Whereas an undercomplete autoencoder will use the entire network for every observation, a sparse autoencoder will be forced to selectively activate regions of the network depending on the input data. As a result, we’ve limited the network’s capacity to memorize the input data without limiting the networks capability to extract features from the data.

也就是對于不同的輸入,激活的網絡結構是不一樣的。而對于上面的undercomplete autoencoder 來說,對于所有的輸入,網絡結構都是一樣的。這樣我們可以在不限制網絡學習特征的能力同時又限制網絡記憶資料的能力。(Learning features!)

有兩種正則化的方式,一種是L1正則化,另一種是KL 散度。對于每個節點來說,處于激活或者不激活狀态,也就是服從伯努利分布。

兩個伯努利分布的KL 散度計算如下:

從PCA到AutoEncoder

Stacked AutoEncoder

從PCA到AutoEncoder

由于包含了非線性變換,是以目标函數不再是簡單的二次函數,會變成非凸問題,優化起來容易陷入局部極值。deep learning解決的問題之一,就是利用逐層優化的pretraining方式,使得在最後整體優化之前,找到一個比較好的初始解,這樣即使陷入局部極值,找到的也會是比較好的局部極值。

逐層貪婪訓練,每層訓練的時候固定住其他層的參數不變,隻訓練當層參數。而不是每次訓練,每層參數都處于變化中。

Denoising AutoEncoder

上面提到的各種AE都是基于input和output完全一緻的,另一中提升泛化能力的做法是将input加入noise後作為input 提供給網絡。

從PCA到AutoEncoder
從PCA到AutoEncoder

Contrastive AutoEncoder

for very similar inputs, the learned encoding would also be very similar 對于比較相似的輸入,表示也很相似

derivative of the hidden layer activations are small with respect to the input

收縮自編碼器是一種正則自編碼器。它在編碼h=f(x)的基礎上添加了顯示的正則項,鼓勵 f 的導數盡可能小,它的懲罰項Ω(h) 是平方Frobenius範數(元素平方的和),作用于與編碼器的函數相關偏導數的Jacobian矩陣。

從PCA到AutoEncoder

VAE and AAE

add a constraint on the encoding

network, that forces it to generate latent vectors that roughly

follow some distribution q(z | x), e.g. unit Gaussian.

從PCA到AutoEncoder

一共有兩個encoder,一個decoder,綠色小原點部分是 一個 encoder 表示,黃色小原點部分是另一個encoder ,相當于噪聲,棕色小圓點部分相當于采樣變量。Reparameterization Trick 從服從我們将從 N(μ,σ^

2) 采樣變成了從 N(0,1) 中采樣,然後通過參數變換得到從N(μ,σ^2) 中采樣的結果。

它本質上就是在我們正常的自編碼器的基礎上,對 encoder 的結果(在VAE中對應着計算均值的網絡)加上了“高斯噪聲”,使得結果 decoder 能夠對噪聲有魯棒性;而那個額外的 KL loss(目的是讓均值為 0,方差為 1),事實上就是相當于對 encoder 的一個正則項,希望 encoder 出來的東西均有零均值。

那另外一個 encoder(對應着計算方差的網絡)的作用呢?它是用來動态調節噪聲的強度的。

直覺上來想,當 decoder 還沒有訓練好時(重構誤差遠大于 KL loss),就會适當降低噪聲(KL loss 增加),使得拟合起來容易一些(重構誤差開始下降)。

反之,如果 decoder 訓練得還不錯時(重構誤差小于 KL loss),這時候噪聲就會增加(KL loss 減少),使得拟合更加困難了(重構誤差又開始增加),這時候 decoder 就要想辦法提高它的生成能力了。

在 VAE 中,重構跟噪聲是互相對抗的,重構誤差跟噪聲強度是兩個互相對抗的名額,而在改變噪聲強度時原則上需要有保持均值不變的能力,不然我們很難确定重構誤差增大了,究竟是均值變化了(encoder的鍋)還是方差變大了(噪聲的鍋)。

而均勻分布不能做到保持均值不變的情況下改變方差,是以正态分布應該更加合理。

重參數技巧

我們将從 N(μ,σ^2) )采樣變成了從 N(0,1) 中采樣,然後通過參數變換得到從N(μ,σ^2) 中采樣的結果。這樣一來,“采樣”這個操作就不用參與梯度下降了,改為采樣的結果參與,使得整個模型可訓練了。

從PCA到AutoEncoder

More

從PCA到AutoEncoder

推薦閱讀

VAE for NLP

skip thought vectors

花式解釋AutoEncoder與VAE

Reference

[1]. PRML讀書會第十二章 Continuous Latent Variables(PCA,PPCA,核PCA,Autoencoder,非線性流形)

[2]. Introduction to autoencoders.

[3]. PCA and Autoencoders

[4]. Autoencoder

[5]. 變分自編碼器VAE:原來是這麼一回事

繼續閱讀