UFLDL之棧式自編碼

2022-08-30 21:03:14 字數 1486 閱讀 8237

參考資料:ufldl教程及tornadomeet的部落格

個人**:github位址

在自我學習的章節中,結合自編碼特徵提取與有監督的模型訓練來**資料的標籤。假設使用的有監督模型是logistic classifier,則全部的結構圖如下:

將輸入\(x\)對映到特徵層啟用量\(a\)的權值網路為\(w^\)是由全部資料訓練得到的。自學習演算法中,\(w^\)是不變的;但是實際上,可以把由自編碼演算法得到的權值作為初始值,使用梯度下降或者l-bfgs對引數進行微調以減小訓練誤差。

微調必須在有大量標註資料的情況下使用,才能顯著提公升分類器的效能。若只有大量未標註資料,卻只有相對較少的已標註資料集,微調作用非常有限。

當啟用函式非線性的時候,深度網路具有更強的表達能力。深度網路就是隱藏層或者說特徵層更多的網路。每個隱藏層和上乙個隱藏層之間都構成「整體——部分」的關係。以之前提到過的數字識別為例,如果第一層隱藏層檢測的是邊緣、筆畫,那麼第二層隱藏層就可以把這些特徵組合起來,構成更複雜的輪廓……

深度學習網路在數學上會遇到區域性極值問題和梯度瀰散問題,區域性極值很好理解,梯度瀰散是指使用bp演算法計算導數的時候,反向傳播的梯度會隨著層數的增加急劇減小,這樣最初幾層權重的變化會非常緩慢。

解決上述兩個問題的方案是逐層貪婪訓練方法,即每次都只訓練一層,訓練方法可以參照稀疏自編碼演算法。

採用逐層貪婪訓練方法訓練,以下圖這種情況為例:

先忽略features ⅱ特徵層和softmax classifier層,並假定features ⅰ層的輸出和輸入相同,從而訓練input到features ⅰ的權值網路,這個過程和自編碼演算法是相同的,即:

而後,去掉輸出層,只保留input和features ⅰ層,並計算出features ⅰ層的啟用值作為features ⅱ層的輸入。然後按照同樣的方法訓練features ⅰ層到features ⅱ層的權值網路,由此得到所有特徵層之間的權值。最後乙個特徵層可以視需要使用logistic回歸或者softmax回歸等分類器。

而微調採用的是bp演算法,按照ufldl教程的說法,其最後一層的誤差為:

\[\delta^= - (\nabla_}j) \bullet f'(z^)

\]以softmax分類器為例,其滿足:

\[\nabla j = \theta^t(i-p)

\]該公式在softmax回歸裡有提到,其中i是類別標籤,p為條件概率向量。

而由最後一層的誤差依次計算得到前面幾項的誤差以及根據誤差求得偏導數的過程和bp演算法是相同的。

個人認為,此處的最後一層指的不是softmax層而是特徵層的最後一層,這樣子公式才能和之前神經網路的吻合。

棧式自編碼

棧式自編碼神經網路 stacked autoencoder,sa 是對自編碼網路的一種使用方法,是乙個由多層訓練好的自編碼器組成的神經網路。由於網路中的每一層都是單獨訓練而來,相當於都初始化了乙個合理的數值。所以,這樣的網路會更容易訓練,並且有更快的收斂性及更好的準確度。棧式自編碼常常被用於預訓練 ...

棧式自編碼器學習

棧式自編碼器就是多個自編碼器級聯。棧式自編碼器的訓練過程是,n個ae按順序訓練,第1個ae訓練完成後,將其編碼器的輸出作為第2個ae的輸入,以此類推。最後得到的特徵作為分類器的輸入,完成最終的分類訓練。如下四幅圖所示 結果 在逐層訓練結束後,還需要乙個微調過程 fine tuning 大意如下 逐層...

UFLDL(五)自編碼演算法與稀疏性

新教程內容太繁複,有空再看看,這節看的還是老教程 之前討論的神經網路是在有監督的學習中的應用,而自編碼神經網路是一種無監督的學習演算法。它的特點是使用了bp,並且把輸入值當作目標值。當隱藏層單元的個數小於輸入的個數時,相當於完成了降維,而當輸出時,又相當於重新恢復。為了給隱藏單元加入稀疏性限制,可限...