堆叠式降噪自动编码器(SDA)
1.1 自動編碼器(AutoEncoder,AE)
自動編碼器(AutoEncoder,AE)就是一種盡可能復現輸入信號的神經網絡,其輸出向量與輸入向量同維,常按照輸入向量的某種形式,通過隱層學習一個數據的表示或對原始數據進行有效編碼。值得注意的是,這種自編碼器是一種不利用類標簽的非線性特征提取方法, 就方法本身而言, 這種特征提取的目的在于保留和獲得更好的信息表示, 而不是執行分類任務,盡管有時這兩個目標是相關的。
一個典型的最簡單的自動編碼器擁有一個表示原始數據或者輸入特征向量的輸入層,一個表示特征轉換的隱層和一個跟輸入層匹配、 用于信息重構的輸出層,如圖一所示。當隱層數目大于 1 時, 自動編碼器就被視為深層結構,我們稱其為堆疊式自動編碼器,而我們通常所說的自動編碼器指的都是隱層數為1層的結構。自動編碼器的主要目標是讓輸入值和輸出值相等,所以首先用W1W_1W1?對輸入進行編碼,經過激活函數后,再用W2W_2W2?進行解碼,而編碼層和解碼層的權重 W1W_1W1?、W2W_2W2?通常取為互為轉置矩陣,即W2=W1TW_2=W_1^TW2?=W1T?,這便是自動編碼器的核心思想:先編碼,后解碼,前后保持不變。
圖一自動編碼器結構圖一 \ 自動編碼器結構圖一?自動編碼器結構
除了上述介紹的最典型的自動編碼器結構,還有其他幾種自動編碼器的變形結構。例如,如果自動編碼器的基礎上加上L1的正規性限制(L1主要是約束每一層中的節點中大部分都要為0,只有少數不為0,這就是Sparse名字的來源),我們就可以得到稀疏自動編碼器(SAE,Sparse AutoEncoder)。還有,如果在自動編碼器上加入了一個規則項,使其對權重值進行懲罰,就得到了收縮自動編碼器(CAE,Contractive AutoEncoder)。此外,如果在網絡的可視層(即數據的輸入層)引入隨機噪聲,然后再進行編解碼來恢復輸入層的數據或特征,就得到了降噪自動編碼器(DAE,Denoise AutoEncoder)。
單隱層的自動編碼器,充其量也就是個強化補丁版PCA(主成分分析),只用一次好不過癮。于是Bengio等人在2007年的 “Greedy Layer-Wise Training of Deep Networks”一文中,仿照堆疊受限玻爾茲曼機(RBM)來構成深度置信網絡(DBN)的方法,提出堆疊式自動編碼器(Stacked AutoEncoder)。接下來,就將對其中的堆疊式降噪自動編碼器(Stacked Denoise AutoEncoder)進行詳細地分析。
1.2 堆疊式降噪自動編碼器(Stacked Denoise AutoEncoder,SDAE)
對于單隱層的自動編碼器,通常利用反向傳播算法的諸多變種之一來進行訓練(其中最典型的方法是隨機梯度下降法), 就可以取得非常有效的結果。但是,如果仍將其應用于多隱層的網絡中,反向傳播的訓練方法就會產生一些問題:通過最初的幾層后, 誤差會變得極小, 訓練也隨之變得無效。盡管更多先進的反向傳播方法一定程度上緩解了這一問題, 但依然無法解決學習速度緩慢的問題,尤其是當訓練數據量有限時, 該問題更為明顯。 正如前面所提到的,如果可以通過把每一層當作一個簡單的自解碼器來進行預訓練,然后再進行堆疊,那么訓練效率就會得到大大地提高。正如圖二所示,先對每個單隱層的降噪自動編碼器單元進行無監督預訓練,然后再進行堆疊,最后進行整體的反向調優訓練,就得到了一個兩層隱藏層結構的堆疊式降噪自動編碼器。
圖二堆疊式降噪自動編碼器結構圖二\ 堆疊式降噪自動編碼器結構圖二?堆疊式降噪自動編碼器結構
下面詳細介紹一下構建上述兩層隱藏層結構的降噪自動編碼器的具體步驟。
- 首先對第一個DA單元進行預訓練,其中X^\hat XX^為恢復后的輸入數據或特征,XXX為未被噪聲污染的原始輸入數據或特征,yyy為被噪聲污染后的輸入數據或特征,σ(?)\sigma(\cdot)σ(?)為sigmoid函數:
圖三對第一個DA單元進行預訓練圖三 \ 對第一個DA單元進行預訓練圖三?對第一個DA單元進行預訓練 - 第一個自動編碼器的輸出可以表示如下:
h(y)=σ(W1y,b1)h(y)=\sigma(W_1y,b_1)h(y)=σ(W1?y,b1?)
X^=W1Th(y)+b2\hat X=W_1^Th(y)+b_2X^=W1T?h(y)+b2?
采用最小均方差作為代價函數,且利用梯度下降的方法進行權重值W和偏置值b的更新:
J(W1,b1,b2)=∑in∣∣Xi?X^i∣∣22J(W_1,b_1,b_2)=\sum^{n}_{i}||X_i-\hat X_i||_2^2J(W1?,b1?,b2?)=i∑n?∣∣Xi??X^i?∣∣22?
(W1,b1,b2)←argmin(J(W1,b1,b2))(W_1,b_1,b_2)\leftarrow arg\ min(J(W_1,b_1,b_2))(W1?,b1?,b2?)←arg?min(J(W1?,b1?,b2?))
其中梯度下降法的具體計算方式如下:
W1T:ΔWi,j=???J?X^i??X^i?Wi,jW_1^T:\Delta W_{i,j}=\epsilon\cdot \frac {\partial J}{\partial \hat X_i}\cdot\frac {\partial \hat X_i}{\partial W_{i,j}}W1T?:ΔWi,j?=???X^i??J???Wi,j??X^i??
b2:Δbi=???J?X^i??X^i?bib_2:\Delta b_i=\epsilon\cdot \frac {\partial J}{\partial \hat X_i}\cdot\frac {\partial \hat X_i}{\partial b_i}b2?:Δbi?=???X^i??J???bi??X^i??
b1:Δbi=???J?X^i??X^i?h(y)??h(y)?bib_1:\Delta b_i=\epsilon\cdot \frac {\partial J}{\partial \hat X_i}\cdot\frac {\partial \hat X_i}{\partial h(y)}\cdot\frac {\partial h(y)}{\partial b_i}b1?:Δbi?=???X^i??J???h(y)?X^i????bi??h(y)??????
預訓練完畢后,去掉輸出層及其相應的權重和偏置,只保留輸入層和隱藏層的W1W_1W1?和b1b_1b1?即可。然后將第一個DA單元的隱藏層作為第二個DA單元的輸入,進行第二個DA單元的預訓練如下所示:
圖四對第二個DA單元進行預訓練圖四\ 對第二個DA單元進行預訓練圖四?對第二個DA單元進行預訓練
-
第二個降噪自動編碼器的輸出可以表示如下:
h(h(y))=σ(W2h(y),b2)h(h(y))=\sigma(W_2h(y),b_2)h(h(y))=σ(W2?h(y),b2?)
h(X^)=W2Th(h(y)+b3)h(\hat X)=W_2^Th(h(y)+b_3)h(X^)=W2T?h(h(y)+b3?)
采用最小均方差作為代價函數,且利用梯度下降的方法進行權重值W和偏置值b的更新:
J(W2,b2,b3)=∑in∣∣h(Xi)?h(X^i)∣∣22J(W_2,b_2,b_3)=\sum^{n}_{i}||h(X_i)-h(\hat X_i)||_2^2J(W2?,b2?,b3?)=i∑n?∣∣h(Xi?)?h(X^i?)∣∣22?
(W2,b2,b3)←argmin(J(W2,b2,b3))(W_2,b_2,b_3)\leftarrow arg\ min(J(W_2,b_2,b_3))(W2?,b2?,b3?)←arg?min(J(W2?,b2?,b3?))
其中梯度下降法的具體計算方式如下:
W2T:ΔWi,j=???J?h(X^i)??h(X^i)?Wi,jW_2^T:\Delta W_{i,j}=\epsilon\cdot \frac {\partial J}{\partial h(\hat X_i)}\cdot\frac {\partial h(\hat X_i)}{\partial W_{i,j}}W2T?:ΔWi,j?=???h(X^i?)?J???Wi,j??h(X^i?)?
b3:Δbi=???J?h(X^i)??h(X^i)?bib_3:\Delta b_i=\epsilon\cdot \frac {\partial J}{\partial h(\hat X_i)}\cdot\frac {\partial h(\hat X_i)}{\partial b_i}b3?:Δbi?=???h(X^i?)?J???bi??h(X^i?)?
b2:Δbi=???J?h(X^i)??h(X^i)?h(h(y))??h(h(y))?bib_2:\Delta b_i=\epsilon\cdot \frac {\partial J}{\partial h(\hat X_i)}\cdot\frac {\partial h(\hat X_i)}{\partial h(h(y))}\cdot\frac {\partial h(h(y))}{\partial b_i}b2?:Δbi?=???h(X^i?)?J???h(h(y))?h(X^i?)???bi??h(h(y))? -
第二個DA單元預訓練完畢后,去掉其輸出層和相應的權重和偏置,只保留輸入層和隱藏層的W2W_2W2?和b2b_2b2?,并將其堆疊在第一個DA單元上即可。最后,再第二個DA單元的隱藏層之上添加一層輸出層(對輸出層的權重值W3W_3W3?和b3b_3b3?偏置進行隨機初始化即可),進行解碼恢復。
-
兩個DA單元的預訓練完畢后,最后要進行的是整體的反向調優訓練。調優訓練的代價函數也可以采用上述提到的代價函數,并利用梯度下降法自頂到底(預訓練時的反向誤差傳播只有兩層,而這里的誤差反向傳播為三層)進行權重和偏置值的更新。
參考文獻:
總結
以上是生活随笔為你收集整理的堆叠式降噪自动编码器(SDA)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinHex(三)
- 下一篇: 苏宁易购高鑫跑步进场,“即时零售”或成疫