4. Stacked AutoEncoder(堆棧自動編碼器)


1. AutoEncoder介紹

2. Applications of AutoEncoder in NLP

3. Recursive Autoencoder(遞歸自動編碼器)

4. Stacked AutoEncoder(堆棧自動編碼器)

1. 前言

深度學習的威力在於其能夠逐層地學習原始數據的多種表達方式。每一層都以前一層的表達特征為基礎,抽取出更加抽象,更加適合復雜的特征,然后做一些分類等任務

堆疊自編碼器(Stacked Autoencoder,SAE)實際上就是做這樣的事情,如前面的自編碼器,稀疏自編碼器和降噪自編碼器都是單個自編碼器,它們通過虛構一個\(x->h->x\)的三層網絡,能過學習出一種特征變化\(h = f(wx+b)\)。實際上,當訓練結束后,輸出層已經沒有什么意義了,我們一般將其去掉,即將自編碼器表示為:

image

2. SAE原理

之前之所以將自編碼器模型表示為3層的神經網絡,那是因為訓練的需要,我們將原始數據作為假想的目標輸出,以此構建監督誤差來訓練整個網絡。等訓練結束后,輸出層就可以去掉了,因為我們只關心的是從\(x\)\(h\)的變換。

接下來的思路就很自然了,我們已經得到特征表達\(h\),那么我們可不可以將\(h\)再作為原始信息,訓練一個新的自編碼器,得到新的特征表達呢?當軟可以,而且這就是所謂的堆疊自編碼器(Stacked Autoencoder,SAE)。Stacked就是逐層堆疊的意思,這個跟“棧”有點像。當把多個自編碼器Stack起來之后,這個系統看起來就像這樣:

image

2.1 第一層AE

這樣就把自編碼器改成了深度結構了,即《learning multiple levels of representation and abstraction》(Hinton, Bengio, LeCun, 2015)。需要注意的是,整個網絡的訓練不是一蹴而就的,而是逐層進行的。比如說我們要訓練一個\(n -> m -> k\) 結構的網絡,實際上我們是先訓練網絡\(n -> m -> n\),得到\(n -> m\)的變換,然后再訓練\(m -> k -> m\)網絡,得到\(m -> k\)的變換。最終堆疊成SAE,即為\(n -> m -> k\)的結果,整個過程就像一層層往上面蓋房子,這就是大名鼎鼎的 layer-wise unsuperwised pre-training (逐層非監督預訓練)。

接下來我們來看一個具體的例子,假設你想要訓練一個包含兩個隱藏層的堆疊自編碼器,用來訓練 MNIST 手寫數字分類。

首先,你需要用原始輸入\(x(k)\)訓練第一個稀疏自編碼器中,它能夠學習得到原始輸入的一階特征表示\(h(1)(k)\),如下圖所示:

image

2.2 第二層AE

接着,你需要把原始數據輸入到上述訓練好的稀疏自編碼器中,對於每一個輸入\(x(k)\),都可以得到它對應的一階特征表示\(h(1)(k)\)。然后你再用這些一階特征作為另一個稀疏自編碼器的輸入,使用它們來學習二階特征\(h(2)(k)\),如下圖:

image

2.3 第三層

同樣,再把一階特征輸入到剛訓練好的第二層稀疏自編碼器中,得到每個\(h(1)(k)\)對應的二階特征激活值$h(2)(k) $。接下來,你可以把這些二階特征作為softmax分類器的輸入,訓練得到一個能將二階特征映射到數字標簽的模型。如下圖:

image

2.4 組合

最終,你可以將這三層結合起來構建一個包含兩個隱藏層和一個最終softmax分類器層的堆疊自編碼網絡,這個網絡能夠如你所願地對MNIST數據集進行分類。最終模型如下圖:

image

3. 總結

為什么逐層預訓練的SAE有不錯的效果?一個直觀的解釋是,預訓練好的網絡在一定程度上擬合了訓練數據的結構,這使得整個網絡的初始值是在一個合適的狀態,便於有監督階段加快迭代收斂。當然,有不少研究提出了很好的初始化策略,再加上現在常用的dropout、ReLU,直接去訓練一個深層網絡已經不是問題。

最后,多說一句,除了AE和SAE這種逐層預訓練的方式外,還有另外一條類似的主線,即限制玻爾茲曼機(RBM)與深度信念網絡(DBN)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM