Autoencoder 详解
本文介紹了AutoEncoder。包括如下內容:
- AutoEncoder的定義和推導。
- Sparse AutoEncoder由來和介紹。
- 做Deep Learning所用的unsupervised learning的方法之間的比較。
1. 數學基礎
1.1 Orthogonal Matrix
滿足如下定義的是Orthogonal Matrix
以元素表示為。
(a?1)ij=aji(a?1)ij=aji
1.2 The theorem about SVD
假設A是任意一個矩陣,SVD表示就是A=UΣVTA=UΣVT。
其中?ΣΣ?是一個對角矩陣。
U,VU,V都是orthonormal矩陣(columns/rows are orthonormal vectors)。
假設U.,≤kΣ≤k,≤kVT.,≤kU.,≤kΣ≤k,≤kV.,≤kT作為當我們只保留最大的k個singular values的decomposition。
這樣矩陣B,秩為k,它與A的距離就可以寫一個式子。
求得 B?=U.,≤kΣ≤k,≤kVT.,≤kB?=U.,≤kΣ≤k,≤kV.,≤kT。
這個定理需要用在推導過程中,具體看參考文獻[3]。
2. AutoEncoder 定義
AutoEncoder 是多層神經網絡,其中輸入層和輸出層表示相同的含義,具有相同的節點數。AutoEncode學習的是一個輸入輸出相同的“恒等函數”。不過輸入和輸出相同,使得這個網絡的輸出沒有任何意義。AutoEncoder的意義在于學習的(通常是節點數更少的)中間coder層(最中間的那一層),這一層是輸入向量的良好表示。這個過程起到了“降維”的作用。當AutoEncoder只有一個隱含層的時候,其原理相當于主成分分析(PCA),當AutoEncoder有多個隱含層的時候,每兩層之間可以用RBM來pre-training,最后由BP來調整最終權值。網絡權重更新公式很容易用求偏導數的方法推導出來,算法是梯度下降法。(RBM:層內無連接,層間全連接,二分圖)。
當AutoEncoder只有一個隱含層的時候,其原理相當于主成分分析(PCA)。但是 AutoEncoder 明顯比PCA的效果更好一點,尤其在圖像上。 當AutoEncoder有多個隱含層的時候,每兩層之間可以用RBM來pre-training,最后由BP來調整最終權值。
通過unsupervised learning只對inputX(t)X(t)我們可以做下面的事情:
- 自動獲取有意義Features
- leverage無標注數據
- 添加一個有數據驅動的規則化工具來幫助訓練(add a data-dependent regularizer to trainings)
下圖是一個AutoEncoder的三層模型,Input layer,Hidden layer,和Output layer。其中W?=WTW?=WT,因為使用tied weight。
如果是實數值作為輸入,我們要優化的目標函數是:
如果是01值那么就是:
L(f(X))=?∑i=1N(xilog(x??i)+(1?xi)log(1?x??i))L(f(X))=?∑i=1N(xilog(x^i)+(1?xi)log(1?x^i))
loss function的梯度可以寫成:
?a??(X(t))L(f(X(t)))=X??(t)?X(t)?a^(X(t))L(f(X(t)))=X^(t)?X(t)
當然使用tied weight,那么是兩個 ??的和。
具體推導在參考文獻[3],而且目前只能做有關liner AutoEncoder的推導,其他的目前是NP問題。
3. Denoising AutoEncoder
按照常理,hidden layer壓縮輸入,而且是一句training集的分布。hidden layer比Input layer小稱之為 undercomplete representation。
overcomplete representation 就是反過來,hidden layer比Input layer要大。這個會導致無法保證hidden layer提取有用的結構信息。
下圖是形成的網絡結構:
Denoising AutoEncoder是AutoEncoder的一個變種,與AutoEncoder不同的是,Denoising AutoEncoder在輸入的過程中加入了噪聲信息,從而讓AutoEncoder能夠學習這種噪聲。直觀可見就是新的輸入層有些值變成0了。
意思就是要使得我們的表達能夠足夠強壯,所以我們加入噪聲信息。
(一) 隨機讓一些input值做為0,根據一個概率v。
(二) 加入Gaussian噪聲。
具體會重新構建X??X^使用改變過的輸入X??X~,并且loss function是使用noiseless input X。我們把noise process稱為p(X??|X)p(X~|X)。
YouTube上有視頻講的很清楚,地址。
4. Sparse Autoencoder
這個部分在我之前的博文里有講到,自編碼算法與稀疏性 自我學習。
5. 幾種方法不同點
首先Autoencoder和RBM是一類的,都屬于學習模型;而稀疏編碼更像是施加在這些基本模型上的一種優化手段。
Autoencoder和RBM的不同之處:Autoencoder的神經元是確定型的,用的是sigmold函數,就像傳統的ff網絡一樣。而RBM的神經元是隨機的。(最基本的RBM神經元只有0和1兩種狀態,但是擴展后可以在這個區間上取任何值)由于autoencoder的確定性,它可以用BP方法來訓練。但是RBM就只能用采樣的方法來得到一個服從RBM所表示分布的隨機樣本。(Gibbs采樣,CD采樣等等)在深度學習里面,可以把autoencoder和RBM都看作是一塊塊磚頭,我們可以用許多這樣的磚頭構造出深層次的網絡。基本思路是前面先用這些“磚頭”搭出幾層網絡,自動學習出數據的一些特征后,后面再用一個分類器來分類,得到最后的結果。如果用autoencoder作磚頭,得到的就是stacked autoencoder;如果用RBM作磚頭,得到的就是deep belief network。
Denoising AutoEncoder與RBM非常像,:
(1)參數一樣:隱含層偏置、顯示層偏置、網絡權重
(2)作用一樣:都是輸入的另一種(壓縮)表示
(3)過程類似:都有reconstruct,并且都是reconstruct與input的差別,越小越好
Denoising AutoEncoder與RBM的區別:RBM是能量函數,區別在于訓練準則。RBM是隱含層“產生”顯示層的概率(通常用log表示),Denoising AutoEncoder是輸入分布與reconstruct分布的KL距離。所用的訓練方法,前者是CD-k,后者是梯度下降。RBM固定只有兩層;AutoEncoder,可以有多層,并且這些多層網絡可以由標準的bp算法來更新網絡權重和偏置,與標準神經網絡不同的是,AutoEncoder的輸入層和最終的輸出層是“同一層”,不僅僅是節點數目、輸出相同,而是完完全全的“同一層”,這也會影響到這一層相關的權值更新方式。總之,輸入與輸出是同一層,在此基礎上,再由輸入與輸出的差別構造準則函數,再求各個參數的偏導數,再用bp方式更新各個權重。
再說稀疏編碼,它是把大多數的神經元限制為0,只允許少量的神經元激活,來達到“稀疏”的效果。這主要是為了模擬人眼視覺細胞的特性。在算法里,其實就是在用來優化的目標函數里面加入一個表示稀疏的正則項,一般可以通過L1范數或者KL divergence來實現。并且稀疏性可以加到autoencoder上,也可以加到RBM上。稀疏編碼是訓練整個深層神經網絡的一種預先訓練的方法。它是一個非監督學習的過程,通過神經元對feature本身作一次回歸,可以得到一個神經元的初始參數。這些參數對再下來的監督學習過程算是個初始化。這一步也可以用分層的監督學習來取代。
參考文獻
[1] 維基百科:https://en.wikipedia.org/wiki/Autoencoder
[2] AutoEncoder:http://jacoxu.com/?p=1108
[3] 數學推導AutoEncoder Optimality:https://dl.dropboxusercontent.com/u/19557502/6_04_linear_autoencoder.pdf
[4] 知乎上回答地比較好的比較AutoEncoder和RBM聯系區別的回答:https://www.zhihu.com/question/22906027/answer/40628698
因為我們是朋友,所以你可以使用我的文字,但請注明出處:http://alwa.info
總結
以上是生活随笔為你收集整理的Autoencoder 详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Tensorflow中GRU和LSTM的
- 下一篇: Tensorflow Day16 Aut