1. 程式人生 > >deeplearning系列(二)自編碼神經網路

deeplearning系列(二)自編碼神經網路

1. Pre_training

神經網路演算法通過反向傳播(back propogation)求得目標函式關於引數的偏導數(或者稱梯度值),然後使用梯度下降法(例如SGD)或者擬牛頓法(例如L-BFGS)等優化演算法求得使目標函式最小化時的引數取值。
由於目標函式非凸的,同時由於深度網路引數之多,又因為反向傳播對初始化的引數十分敏感,如果引數初始值選擇的不好,很容易使目標函式的求解陷入很差的區域性最優解。為了解決這個困難的最佳化問題,提出了pre_training 的方案,即通過pre_training技術使預訓練得到的引數作為反向傳播的起始點。這樣可以使反向傳播的初始搜尋點放在一個比較好的位置,從而保證優化演算法可以收斂到一個比較好的區域性最優解。


圖片名稱

上圖展示了一個簡單的pre_training的流程圖,首先通過逐層pre_training得到每層的引數,然後使用反向傳播來微調(fine-tune)這些預訓練的引數值。

2. 自編碼神經網路

通過神經網路學習的權重引數W(l)的物理意義是什麼?在神經網路的架構下,權重引數代表瞭如何進行特徵轉換,也就是轉換輸入特徵的表現形式,也稱為編碼(encoding)。pre_training的目的就是學習這些權重引數的,那麼怎樣定義學習到的引數的好壞呢?
好的權重可以:

  1. 以更精煉的形式(特徵維數減少)儲存前面一層的資訊;
  2. 同時儘可能少的丟失上一層的資訊(也稱為information-preserving encoding);
  3. 使用轉換後的特徵還可以很容易地重構出原始的特徵。

自編碼神經網路(Autoencoder)即是一種可以滿足這些要求的pre_training技術。它是一種無監督學習演算法,使用反向傳播,使目標函式的輸出等於輸入值。下圖是一個示例。


圖片名稱

自編碼神經網路試圖逼近這樣的一個恆等函式:hW,b(x)=x。使得神經網路的輸出等於輸入,這樣隱藏層可以看做對輸入的壓縮編碼,使用壓縮編碼後的特徵可以重構出原始特徵。

3. 稀疏約束

和包含一個隱藏層的普通神經網路相比,自編碼神經網路除了滿足輸出等於輸入的要求外,還可以加入其它的要求,比如稀疏性約束。
稀疏約束的一種方式可以表示為:啟用函式為sigmoid時,神經元輸出接近於1時可以看做該神經元被啟用,輸出接近於0時看做被抑制。
我們用a

(2)j表示隱藏神經元j的啟用度,則啟用度在訓練集上的平均值:

ρ^j=1mi=1ma(2)j(x(i))
表示隱藏神經元j平均啟用度。然後施加稀疏限制: ρ^j=ρ
其中,ρ為稀疏性引數,是一個接近於0的值,比如0.05。為了實現這一限制,在目標函式中新增另一個懲罰項,從而使隱藏神經元的啟用值在一個接近於ρ的適當範圍內。隱藏項選擇相對熵的形式: j=1s2KL(ρ||ρ^j)=j=1s2ρlogρρ^j+(1ρ)log1ρ1ρ^j
下圖給出了ρ=0.2時相對熵KL(ρ||ρ^j)隨自變數ρ^j的變化情況。

圖片名稱

可以看出,只有當ρ^j=ρ時懲罰值為0,自變數取其它值時,都施加了很大的懲罰。

總的目標函式為

J(W,b)=1mi=1m12||h(x(i))y(i)||2+λ2(||W(1)||2+||W(2)||2)+βj=1s2KL(ρ||ρ^j)

4. 反向傳播

與上一節淺層神經網路相比,反向傳播的不同之處在於殘差的變化:

δ(3)=(ya(3))f(z(3)) δ(2)=((W(2))Tδ(3)+β(ρ