1、自編碼的定義
自編碼器是一種數據的壓縮算法,屬於無監督學習,以自身X作為輸出值,但輸出值X‘ 和自身X之間還是有一些差異的。自編碼器也是一種有損壓縮,可以通過使得損失函數最小,來實現X’ 近似於X的值。簡單的自編碼器是一種三層的神經網絡模型,包含數據輸入層、隱藏層、輸出重構層,同時也是一種無監督學習模型。從輸入層到隱層稱為編碼過程,從隱層到輸出層稱為解碼過程。自編碼其就相當於自己生成標簽,而且標簽就是樣本數據本身。三層自編碼神經網絡的模型如下:
自編碼的兩個過程
1)輸入層——隱層的編碼過程:
2)隱層——輸出層的解碼過程
這之間的壓縮損失就是
很多人在想自編碼到底有什么用,輸入和輸出都是本身,對於這樣的操作有和意義,主要有兩點:
1)自編碼可以實現非線性降維,只要設定輸出層中神經元的個數小於輸入層中神經元的個數就可以對數據集進行降維。反之,也可以將輸出層神經元的個數設置為大於輸入層神經元的個數,然后在損失函數構造上加入正則化項進行系數約束,這時就成了稀疏自編碼。
2)利用自編碼來進行神經網絡預訓練。對於深層網絡,通過隨機初始化權重,然后用梯度下降來訓練網絡,很容易發生梯度消失。因此現在訓練深層網絡可行的方式都是先采用無監督學習來訓練模型的參數,然后將這些參數作為初始化參數進行有監督的訓練。
2、常見的自編碼器
1)欠完備自編碼器
欠完備自編碼器就是將輸出層中神經元的個數設置為小於輸入層中神經元的個數,以達到非線性降維的效果(在神經網絡的傳遞過程中由於激活函數的存在,因此是非線性的傳遞)。
2)稀疏自編碼器
稀疏自編碼就是對隱層的神經元加入稀疏約束,以便約束隱層中神經元不為0的個數,我們希望達到用盡可能少的神經元來表示數據X,以達到稀疏降維。稀疏自編碼有加速網絡訓練的功能。
3)收縮自編碼器
收縮自編碼是在損失函數中加入一項平方Frobenius范數的正則項,其表達式如下
4)棧式自編碼
棧式自編碼主要是用來實現深度學習的無監督預訓練的,其無監督預訓練過程如下
對於一個四層的神經網絡
首先采用稀疏自編碼器,訓練從輸入層到H1層的參數
訓練完畢之后我們去除解碼層,接着把H1層的輸出數據作為H2層的輸入數據,然后進行自編碼
訓練完之后去除H2層的解碼器。對於更高層的網絡,依次去訓練兩層之間的參數,直達最后一層隱層,然后利用softmax進行多分類
做完無監督預訓練之后,將得到的參數作為初始化參數,之后采用監督學習對模型參數進行微調。