自編碼器是一種無監督的神經網絡模型,其核心的做用是可以學習到輸入數據的深層表示。網絡
當前自編碼器的主要應用有兩個方面:一是特徵提取;另外一個是非線性降維,用於高維數據的可視化,與流行學習關係密切。函數
自編碼器(AutoEncoder,AE):最原始的AE網絡是一個三層的前饋神經網絡結構,由輸入層、隱藏層和輸出層構成。學習
對於二值神經網絡,也就是輸入層的每一個神經元只能取值0或1,那麼損失函數一般由交叉熵來定義;編碼
對於輸入神經元是一個任意實數,則永昌採用均方偏差來定義損失函數。spa
自編碼器的核心設計是隱藏層,隱藏層的設計有兩種方式:設計
1. 當隱藏層神經元個數小於輸入層神經元個數時,稱爲undercomplete。該隱藏層設計使得輸入層到隱藏層的變化本質上是一種降維的操做,網絡試圖以更小的維度去描述原始數據而儘可能不損失數據信息,從而獲得輸入層的壓縮表示。當隱藏層的激活函數採用線性函數時,自編碼器也稱爲線性自編碼器,其效果等價於主成分分析。code
2. 當隱藏層神經元個數大於輸入層神經元個數時,稱爲overcomplete。該隱藏層設計通常用於稀疏編碼器,能夠得到稀疏的特徵表示,也就是隱藏層中有大量的神經元取值爲0。blog
自編碼器的相關模型:io
1. 降噪自編碼器(Denoising Autoencoders,DAE):其目的是加強自編碼器的魯棒性。自編碼器的目標是指望重構後的結果輸出與輸入數據相同,也就是可以學習到輸入層的正確數據分佈。但當輸入層數據受到噪音的影響時,可能會使得得到的輸入數據自己就不服從原始的分佈。在這種狀況下,利用自編碼器獲得的結果也將是不正確的,爲了解決這種因爲噪音產生的數據誤差問題,提出DAE網絡結構。
可視化
2. 棧式自編碼器(Stacked Autoencoders,SAE):也稱爲堆棧自編碼器、堆疊自編碼器等。就是將多個自編碼器進行疊加。利用上一層的隱藏層即是做爲下一層的輸入,獲得更抽象的表示。
SAE的一個很重要的應用是經過逐層預訓練來初始化網絡權重參數,從而提高深層網絡的收斂速度和減緩梯度消失的影響。
SAE經過下面兩個階段做用於整個網絡。
階段1:逐層預訓練:是指用過自編碼器來訓練每一層的參數,做爲神經網絡的初始化參數。利用逐層預訓練的方法,首先構建多個自編碼器,每個自編碼器對應於一個隱藏層。從左到右逐層訓練每個自編碼器,用訓練後的最優參數做爲神經網絡的初始化參數。若是考慮到模型的魯棒性,防止數據受噪音的影響,能夠將AE變位DAE,這樣由多個DAE疊加的棧式自編碼器,也稱爲棧式降噪自編碼器。
階段2:微調:通過第一步的逐層預訓練後,獲得了網絡權重參數更加合理的初始化估算,就能夠像訓練普通的深層網絡同樣,經過輸出層的損失函數,利用梯度降低等方法來迭代求解最優參數。
3. 稀疏編碼器:因爲稀疏編碼器可以學習到輸入的數據的稀疏特徵表示,所以當前被普遍應用於無監督的特徵提取學習中。特色:隱藏層向量是稀疏的,儘量多的零元素。