自動編碼器
什么是自動編碼器(AutoEncoder)
自動編碼器是一種特殊的神經網絡,它希望擬合出一個輸入層與輸出層神經元個數相同的神經網絡,使得\(h_{(w,b)(x)} = x\)或近似相等.
它力求逼近一個恆等函數,使得神經網絡的輸出接近於輸入x.使用自動編碼器的意義在於,我們可以取用其隱層的輸出結果,如果隱層的輸出結果是一個維度較小的矩陣(向量),就可以實現諸如降維,數據降噪等優化.
圖為一個自動編碼器(輸入層忽略掉偏置神經元,則數目與輸出層神經元數目一致)

因此,自動編碼器的優化目標,就是使得重構誤差之和最小
為了規范定義重構誤差,我們先定義稀疏性的概念
稀疏性,激活度與相對熵
如果當神經元的輸出接近於1的時候我們認為它被激活,而輸出接近於0的時候認為它被抑制,那么使得神經元大部分的時間都是被抑制的限制則被稱作稀疏性限制。這里我們假設的神經元的激活函數是sigmoid函數。如果你使用tanh作為激活函數的話,當神經元輸出為-1的時候,我們認為神經元是被抑制的。
對於單個神經元,其在整個樣本集上的平均激活度表達式如下:
下式位衡量某一整層神經元在樣本集上的平均激活度的表達式. 我們希望這層各個神經元的激活度近似為\(\rho\),因此類比於神經網絡中輸出層的誤差計算,我們定義出相對熵的表達式(實際上,這個表達式近似等於二乘法)
相對熵越小,表明神經元的實際激活度與規定激活的的差值平均越小,如圖:
自動編碼器的總體代價函數
實際上,自動編碼器總體的代價函數可以看作
- 優化神經網絡的輸出值近似等於神經網絡的輸入值
- 優化各層神經元的激活度近似等於規定的激活度
接下來,我們要實現自動編碼器,只需要設法優化這個代價函數\(J_{sparse}\)即可. 下面討論對\(J_{sparse}\)求導