1. 程式人生 > >Deep Learning基礎--線性解碼器、卷積、池化

Deep Learning基礎--線性解碼器、卷積、池化

sparse pca 過程 條件 連接 移動 .cn 計算過程 htm

本文主要是學習下Linear Decoder已經在大圖片中經常采用的技術convolution和pooling,分別參考網頁http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial中對應的章節部分。

  Linear Decoders:

  以三層的稀疏編碼神經網絡而言,在sparse autoencoder中的輸出層滿足下面的公式:

  技術分享

  從公式中可以看出,a3的輸出值是f函數的輸出,而在普通的sparse autoencoder中f函數一般為sigmoid函數,所以其輸出值的範圍為(0,1),所以可以知道a3的輸出值範圍也在0到1之間。另外我們知道,在稀疏模型中的輸出層應該是盡量和輸入層特征相同,也就是說a3=x1,這樣就可以推導出x1也是在0和1之間,那就是要求我們對輸入到網絡中的數據要先變換到0和1之間,這一條件雖然在有些領域滿足,比如前面實驗中的MINIST數字識別。但是有些領域,比如說使用了PCA Whitening後的數據,其範圍卻不一定在0和1之間。因此Linear Decoder方法就出現了。Linear Decoder是指在隱含層采用的激發函數是sigmoid函數,而在輸出層的激發函數采用的是線性函數,比如說最特別的線性函數——等值函數。此時,也就是說輸出層滿足下面公式:

  技術分享

  這樣在用BP算法進行梯度的求解時,只需要更改誤差點的計算公式而已,改成如下公式:

  技術分享

  技術分享

  Convolution:

  在了解convolution前,先認識下為什麽要從全部連接網絡發展到局部連接網絡。在全局連接網絡中,如果我們的圖像很大,比如說為96*96,隱含層有要學習100個特征,則這時候把輸入層的所有點都與隱含層節點連接,則需要學習10^6個參數,這樣的話在使用BP算法時速度就明顯慢了很多。

  所以後面就發展到了局部連接網絡,也就是說每個隱含層的節點只與一部分連續的輸入點連接。這樣的好處是模擬了人大腦皮層中視覺皮層不同位置只對局部區域有響應。局部連接網絡在神經網絡中的實現使用convolution的方法。它在神經網絡中的理論基礎是對於自然圖像來說,因為它們具有穩定性,即圖像中某個部分的統計特征和其它部位的相似,因此我們學習到的某個部位的特征也同樣適用於其它部位。

  下面具體看一個例子是怎樣實現convolution的,假如對一張大圖片Xlarge的數據集,r*c大小,則首先需要對這個數據集隨機采樣大小為a*b的小圖片,然後用這些小圖片patch進行學習(比如說sparse autoencoder),此時的隱含節點為k個。因此最終學習到的特征數為:

  技術分享

  此時的convolution移動是有重疊的。

  Pooling:

  雖然按照convolution的方法可以減小不少需要訓練的網絡參數,比如說96*96,,100個隱含層的,采用8*8patch,也100個隱含層,則其需要訓練的參數個數減小到了10^3,大大的減小特征提取過程的困難。但是此時同樣出現了一個問題,即它的輸出向量的維數變得很大,本來完全連接的網絡輸出只有100維的,現在的網絡輸出為89*89*100=792100維,大大的變大了,這對後面的分類器的設計同樣帶來了困難,所以pooling方法就出現了。

  為什麽pooling的方法可以工作呢?首先在前面的使用convolution時是利用了圖像的stationarity特征,即不同部位的圖像的統計特征是相同的,那麽在使用convolution對圖片中的某個局部部位計算時,得到的一個向量應該是對這個圖像局部的一個特征,既然圖像有stationarity特征,那麽對這個得到的特征向量進行統計計算的話,所有的圖像局部塊應該也都能得到相似的結果。對convolution得到的結果進行統計計算過程就叫做pooling,由此可見pooling也是有效的。常見的pooling方法有max pooling和average pooling等。並且學習到的特征具有旋轉不變性(這個原因暫時沒能理解清楚)。

  從上面的介紹可以簡單的知道,convolution是為了解決前面無監督特征提取學習計算復雜度的問題,而pooling方法是為了後面有監督特征分類器學習的,也是為了減小需要訓練的系統參數(當然這是在普遍例子中的理解,也就是說我們采用無監督的方法提取目標的特征,而采用有監督的方法來訓練分類器)。

  參考資料:

http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial

http://www.cnblogs.com/tornadomeet/archive/2013/03/25/2980766.html

Deep Learning基礎--線性解碼器、卷積、池化