堆疊降噪自編碼器SDAE


https://blog.csdn.net/satlihui/article/details/81006906
https://blog.csdn.net/github_39611196/article/details/85246236
https://blog.csdn.net/q1242027878/article/details/84679093
https://blog.csdn.net/zbzcDZF/article/details/86570761

自編碼器autocoder

(以下內容來自《深度學習》,侵刪)

自編碼器是神經網絡的一種,可以看作由兩部分組成:一個由函數h=f(x)表示的編碼器和一個生成重構的解碼器x=g(h).

傳統自編碼器被用於降維或者特征學習。

1.1 欠完備自編碼器

從自編碼器獲得有用特征的一種方法是限制h的維度比x小。這種編碼維度小於輸入維度的自編碼器稱為欠完備(undercomplete)自編碼器。學習欠完備的表示將強制自編碼器捕捉訓練數據中最顯著的特征。

學習過程可以簡單地描述為最小化一個損失函數:L(x,g(f(x)),其中L是一個損失函數,懲罰g(f(x))與x的差異,如均方誤差。

1.2 正則自編碼器

正則自編碼器使用的損失函數可以鼓勵模型學習其他的特性(除了將輸入復制到輸出),而不必限制使用淺層編碼器和解碼器以及小的編碼維數來限制模型的容量。這些特性包括稀疏表示、表示的小導數以及對噪聲或輸入缺失的魯棒性。

1.3 稀疏自編碼器

稀疏自編碼器簡單地在訓練時結合編碼層的稀疏懲罰 \Omega(h)和重構誤差:

L(x,g(f(x)))+\Omega(h)
其中g(h)是解碼器的輸出。通常h是編碼器的輸出即h=f(x)

稀疏自編碼器一般用來學習特征,以便用於像分類這樣的任務。

1.4 去噪自編碼器

去噪自編碼器(denoising autoencoder,DAE)最小化
L(x,g(f(\widetilde{x})))
其中\widetilde{x}是被某種噪聲損壞的x的副本。

1.5 收縮自編碼器(contractive autoencoder,CAE)

懲罰導數作為正則,迫使自編碼器學習可以反映訓練數據分布信息的特征,這樣的自編碼器稱為收縮自編碼器。

1.6 深度

深度可以指數地降低表示某些函數的計算成本。
深度自編碼器能比相應的淺層或者線性自編碼器產生更好的壓縮效率。

1.7 去噪自編碼器詳解

去噪自編碼器是一類接受損壞數據作為輸入,並訓練來預測原始未被損壞數據作為輸出的自編碼器。
DAE的訓練過程如下:


得分匹配是最大似然的代替。

DAE的訓練准則能讓自編碼器學到能估計數據分布得分的向量場,這是DAE的一個重要特性。

自動編碼機由三層網絡組成,其中輸入層神經元數量與輸出層神經元數量相等,中間層神經元數量少於輸入層和輸出層。搭建一個自動編碼器需要完成下面三樣工作:搭建編碼器,搭建解碼器,設定一個損失函數,用以衡量由於壓縮而損失掉的信息(自編碼器是有損的)。編碼器和解碼器一般都是參數化的方程,並關於損失函數可導,典型情況是使用神經網絡。編碼器和解碼器的參數可以通過最小化損失函數而優化。

降噪自動編碼器(Denoising Auto Encoder DAE)

降噪自動編碼器就是在自動編碼器的基礎之上,為了防止過擬合問題而對輸入層的輸入數據加入噪音,使學習得到的編碼器具有魯棒性而改進的,是Bengio在08年論文:Extracting and composing robust features with denoising autoencoders提出的。

論文中關於降噪自動編碼器的示意圖如下,類似於dropout,其中x是原始的輸入數據,降噪自動編碼器以一定概率(通常使用二項分布)把輸入層節點的值置為0,從而得到含有噪音的模型輸入xˆ。

SDAE

多個DAE堆疊能夠形成具有一定深度的SDAE。這時的SDAE並不能進行模式識別,因為它只是一個特征提取器,並不具有分類功能。為了使SDAE具有分類功能,需在其頂層添加分類器,如SVM、softmax等,並使用帶標簽的數據對SDAE進行有監督訓練,最后使用利用BP算法對整個網絡參數進行微調,便得到具有分類功能的SDAE,如圖4-5所示。具體步驟如下:

Step1 初始化SDAE網絡參數;

Step2 訓練第一層DAE,將其隱含層作為第2個DAE的輸入,並進行同樣的訓練,直到第n層DAE訓練完成;

Step3 將訓練好的n層DAE進行堆疊形成SDAE,向SDAE網絡頂層添加輸出層;

Step4 利用樣本數據和標簽對整個網絡進行有監督的微調。

SDAE的思想就是將多個DAE堆疊在一起形成一個深度的架構。只有在訓練的時候才會對輸入進行腐蝕(加噪),訓練完成就不需要在進行腐蝕。結構如下圖所示:

逐層貪婪訓練:每層自編碼層都單獨進行非監督訓練,以最小化輸入(輸入為前一層的隱層輸出)與重構結果之間的誤差為訓練目標。前K層訓練好了,就可以訓練K+1層,因為已經前向傳播求出K層的輸出,再用K層的輸出當作K+1的輸入訓練K+1層。

一旦SDAE訓練完成, 其高層的特征就可以用做傳統的監督算法的輸入。當然,也可以在最頂層添加一層logistic regression layer(softmax層),然后使用帶label的數據來進一步對網絡進行微調(fine-tuning),即用樣本進行有監督訓練。

(補圖;

code:
https://blog.csdn.net/q1242027878/article/details/84668175
https://blog.csdn.net/q1242027878/article/details/84679093
https://blog.csdn.net/github_39611196/article/details/85246236


免責聲明!

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



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