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