深度學習-棧式自編碼算法


http://deeplearning.stanford.edu/wiki/index.php/%E6%A0%88%E5%BC%8F%E8%87%AA%E7%BC%96%E7%A0%81%E7%AE%97%E6%B3%95

概述

逐層貪婪訓練法依次訓練網絡的每一層,進而預訓練整個深度神經網絡。在本節中,我們將會學習如何將自編碼器“棧化”到逐層貪婪訓練法中,從而預訓練(或者說初始化)深度神經網絡的權重。


棧式自編碼神經網絡是一個由多層稀疏自編碼器組成的神經網絡,其前一層自編碼器的輸出作為其后一層自編碼器的輸入。對於一個 \textstyle n 層棧式自編碼神經網絡,我們沿用自編碼器一章的各種符號,假定用 \textstyle W^{(k, 1)}, W^{(k, 2)}, b^{(k, 1)}, b^{(k, 2)} 表示第 \textstyle k 個自編碼器對應的 \textstyle W^{(1)}, W^{(2)}, b^{(1)}, b^{(2)} 參數,那么該棧式自編碼神經網絡的編碼過程就是,按照從前向后的順序執行每一層自編碼器的編碼步驟:



\begin{align}
a^{(l)} = f(z^{(l)}) \\
z^{(l + 1)} = W^{(l, 1)}a^{(l)} + b^{(l, 1)}
\end{align}


同理,棧式神經網絡的解碼過程就是,按照從后向前的順序執行每一層自編碼器的解碼步驟:



\begin{align}
a^{(n + l)} = f(z^{(n + l)}) \\
z^{(n + l + 1)} = W^{(n - l, 2)}a^{(n + l)} + b^{(n - l, 2)}
\end{align}


其中,\textstyle a^{(n)} 是最深層隱藏單元的激活值,其包含了我們感興趣的信息,這個向量也是對輸入值的更高階的表示。


通過將 \textstyle a^{(n)} 作為softmax分類器的輸入特征,可以將棧式自編碼神經網絡中學到的特征用於分類問題。

 

訓練

一種比較好的獲取棧式自編碼神經網絡參數的方法是采用逐層貪婪訓練法進行訓練。即先利用原始輸入來訓練網絡的第一層,得到其參數 \textstyle W^{(1,1)}, W^{(1,2)}, b^{(1,1)}, b^{(1,2)};然后網絡第一層將原始輸入轉化成為由隱藏單元激活值組成的向量(假設該向量為A),接着把A作為第二層的輸入,繼續訓練得到第二層的參數 \textstyle W^{(2,1)}, W^{(2,2)}, b^{(2,1)}, b^{(2,2)};最后,對后面的各層同樣采用的策略,即將前層的輸出作為下一層輸入的方式依次訓練。


對於上述訓練方式,在訓練每一層參數的時候,會固定其它各層參數保持不變。所以,如果想得到更好的結果,在上述預訓練過程完成之后,可以通過反向傳播算法同時調整所有層的參數以改善結果,這個過程一般被稱作“微調(fine-tuning)”。


實際上,使用逐層貪婪訓練方法將參數訓練到快要收斂時,應該使用微調。反之,如果直接在隨機化的初始權重上使用微調,那么會得到不好的結果,因為參數會收斂到局部最優。


如果你只對以分類為目的的微調感興趣,那么慣用的做法是丟掉棧式自編碼網絡的“解碼”層,直接把最后一個隱藏層的 \textstyle a^{(n)} 作為特征輸入到softmax分類器進行分類,這樣,分類器(softmax)的分類錯誤的梯度值就可以直接反向傳播給編碼層了。

 

具體實例

讓我們來看個具體的例子,假設你想要訓練一個包含兩個隱含層的棧式自編碼網絡,用來進行MNIST手寫數字分類(這將會是你的下一個練習)。 首先,你需要用原始輸入 \textstyle x^{(k)} 訓練第一個自編碼器,它能夠學習得到原始輸入的一階特征表示\textstyle h^{(1)(k)}(如下圖所示)。


Stacked SparseAE Features1.png


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

Stacked SparseAE Features2.png


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

Stacked Softmax Classifier.png


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

Stacked Combined.png

 

討論

棧式自編碼神經網絡具有強大的表達能力及深度神經網絡的所有優點。

更進一步,它通常能夠獲取到輸入的“層次型分組”或者“部分-整體分解”結構。為了弄清這一點,回顧一下,自編碼器傾向於學習得到能更好地表示輸入數據的特征。因此,棧式自編碼神經網絡的第一層會學習得到原始輸入的一階特征(比如圖片里的邊緣),第二層會學習得到二階特征,該特征對應一階特征里包含的一些模式(比如在構成輪廓或者角點時,什么樣的邊緣會共現)。棧式自編碼神經網絡的更高層還會學到更高階的特征。


舉個例子,如果網絡的輸入數據是圖像,網絡的第一層會學習如何去識別邊,第二層一般會學習如何去組合邊,從而構成輪廓、角等。更高層會學習如何去組合更形象且有意義的特征。例如,如果輸入數據集包含人臉圖像,更高層會學習如何識別或組合眼睛、鼻子、嘴等人臉器官。

 

中英文對照

自編碼器 Autoencoder
逐層貪婪訓練法 Greedy layer-wise training
預訓練 PreTrain
棧式自編碼神經網絡 Stacked autoencoder
微調 Fine-tuning
原始輸入 Raw inputs
層次型分組 Hierarchical grouping
部分-整體分解 Part-whole decomposition
一階特征 First-order features
二階特征 Second-order features
更高階特征 Higher-order features
激活值 Activation

 

中文譯者

張天雷(ztl2004@gmail.com), 鄧亞峰(dengyafeng@gmail.com), 許利傑(csxulijie@gmail.com)


免責聲明!

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



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