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

1. AutoEncoder介紹

2. Applications of AutoEncoder in NLP

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

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

1. 前言

深度學習的威力在於其可以逐層地學習原始數據的多種表達方式。每一層都之前一層的表達特徵爲基礎,抽取出更加抽象,更加適合複雜的特徵,而後作一些分類等任務html

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

image

2. SAE原理

以前之因此將自編碼器模型表示爲3層的神經網絡,那是由於訓練的須要,咱們將原始數據做爲假想的目標輸出,以此構建監督偏差來訓練整個網絡。等訓練結束後,輸出層就能夠去掉了,由於咱們只關心的是從\(x\)\(h\)的變換。app

接下來的思路就很天然了,咱們已經獲得特徵表達\(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 手寫數字分類。spa

首先,你須要用原始輸入\(x(k)\)訓練第一個稀疏自編碼器中,它可以學習獲得原始輸入的一階特徵表示\(h(1)(k)\),以下圖所示:3d

image

2.2 第二層AE

接着,你須要把原始數據輸入到上述訓練好的稀疏自編碼器中,對於每個輸入\(x(k)\),均可以獲得它對應的一階特徵表示\(h(1)(k)\)。而後你再用這些一階特徵做爲另外一個稀疏自編碼器的輸入,使用它們來學習二階特徵\(h(2)(k)\),以下圖:code

image

2.3 第三層

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

image

2.4 組合

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

image

3. 總結

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

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

相關文章
相關標籤/搜索