1. 程式人生 > >深度學習之autoencoder

深度學習之autoencoder

1)autoencoder

autoencoder是一種無監督的學習演算法,他利用反向傳播演算法,讓目標值等於輸入值。如圖所示:


Autoencoder嘗試學習一個 的函式。也就是說autoencoder嘗試逼近一個恆等函式,使得輸出接近於輸入 。當然為了使這個函式有意義,需要加入一些限制條件(比如說限制隱藏神經元的數目),就可以發現一些有意義的結構。Autoencoder可以學習到資料的一些壓縮表示。例如如果輸入資料為100維,隱藏層為50個,那麼就需要從這50維的資料中重構出100維的輸出,使這個輸出接近於100維的輸入。因此這個隱藏層的50維的資料就必然會包含著輸入資料的一些相關性。所以說autoencoder就是為了學習到輸入資料的相關性表示的一種方法。

上面提到的對autoencoder可以加入一些“隱藏神經元的數目”的限制,來學習到輸入資料的一些有意義的表示。其實也可以引入稀疏性的限制,而這才是autoencoder中最常用到的限制。稀疏性限制是指如果當神經元的輸出接近於1的時候我們認為它被啟用,而輸出接近於0的時候認為它被抑制,那麼使得神經元大部分的時間都是被抑制的限制則被稱作稀疏性限制。這裡我們假設的神經元的啟用函式是sigmoid函式。另 表示隱藏神經元的啟用度,那麼定義為隱藏神經元的平均啟用度。另進而引入稀疏性限制。可以另等接近於0的較小值。要實現這個限制,我們需要給目標函式加入一個懲罰因子(其實是一個相對熵

因此,總的代價函式為

因此更新項為

2)反向傳播演算法回顧:

假設對於一個樣本個數為m的樣本集,對於單個樣例,其代價函式為。那麼對於樣本集整體的代價函式為。第一項為均方差項,第二項是Regularization,是為了防止過擬合而產生的。 用於控制前後兩項的相對重要性。

反向傳播演算法的目的是針對 來求取函式的最小值。首先我們需要將每一個引數初始化為一個很小的接近於0的隨機值,然後利用梯度下降法的迭代更新權重。


其中 為學習效率,這也是一個很重要的引數。這裡面最大的問題就變成了求取偏導數的問題。

反向傳播演算法的細節:


3)從self-learning到深度網路

有了autoencoder的基本概念,我們可以利用autoencoder來構建深度網路,近些年的一些列研究表明構建深度網路對於解決很多的計算機視覺問題具有重要意義,並能比現有的一些常規方法取得更好的效果。

 Self-learning

Self-learning是指可以利用autoecoder從未標註的資料中自我的學習特徵。具體說來,給定一組未標註的資料 ,訓練sparse autoencoder,即:


利用訓練得到的引數 ,給定一個新的樣本x,計算啟用量a,作為提取出的特徵。相對比於原始的樣本資料x,啟用量a可能會對資料有更好的表示。


4)深度網路:

我們可以把self-learning擴充套件到深度網路,即擁有多個隱藏層的神經網路。

對於這樣的深度網路,利用反向傳播演算法很容易收斂到區域性最小值,從而無法得到好的分類效果。對此,我們採用逐層貪婪演算法來訓練深度網路。即先利用原始輸入來訓練網路的第一層,得到其引數  ;然後網路第一層將原始輸入轉化成為由隱藏單元啟用值組成的向量(假設該向量為A),接著把A作為第二層的輸入,繼續訓練得到第二層的引數 ;最後,對後面的各層同樣採用的策略,即將前層的輸出作為下一層輸入的方式依次訓練。對於上述訓練方式,在訓練每一層引數的時候,會固定其它各層引數保持不變。所以,如果想得到更好的結果,在上述訓練過程完成之後,可以通過反向傳播演算法同時調整所有層的引數以改善結果,這個過程一般被稱作“fine-tuning”。下面的組圖揭示了這一過程。