這個東西好,緣由之一是更接近生物的認知過程。html
能夠先看下lasso [Scikit-learn] 1.1 Generalized Linear Models - Lasso Regression,再看此篇會容易理解些。網絡
簡單地說,它能儘量地僅僅保留重要的特徵爲激活狀態。dom
《CMU 10-702 Sparsity and the lasso》ide
(1) 何爲稀疏(What’s sparsity)函數
From: http://www.cnblogs.com/tornadomeet/archive/2013/03/19/2970101.htmltornado
通常使得隱含層小於輸入結點的個數,可是咱們也可讓隱藏層的節點數大於輸入結點的個數,只須要對其加入必定的稀疏限制就能夠達到一樣的效果。post
如何讓隱藏層的節點中大部分被抑制,小部分被激活,這就是稀疏。學習
那什麼是抑制,什麼是激活能?測試
那添加什麼限制可使的隱含層的輸出爲稀疏呢?稀疏自動編碼但願讓隱含層的平均激活度爲一個比較小的值。
Hidden層的平均激活的數據表示爲:
其中, 表示在輸入數據爲x的狀況下,隱藏神經元j的激活度。
爲了使得均激活度爲一個比較小的值,引入 ,稱爲稀疏性參數,通常是一個比較小的值,使得 這樣就能夠是隱含層結點的活躍度很小。
(2) Sparse Autoencoder 帶約束的AutoEncoder
稀疏編碼是對網絡的隱含層的輸出有了約束,即隱含層節點輸出的平均值應儘可能爲0,這樣的話,大部分的隱含層節點都處於非activite狀態。所以,此時的sparse autoencoder損失函數表達式爲:
無稀疏約束時網絡的損失函數表達式以下:
後面那項爲KL距離,其表達式以下:
隱含層節點輸出平均值求法以下:
其中的參數通常取很小,好比說0.05,也就是小几率發生事件的機率。這說明要求隱含層的每個節點的輸出均值接近0.05(其實就是接近0,由於網絡中activite函數爲sigmoid函數),這樣就達到稀疏的目的了。
KL距離在這裏表示的是兩個向量之間的差別值。從約束函數表達式中能夠看出,差別越大則」懲罰越大」,所以最終的隱含層節點的輸出會接近0.05。
讀後感:
其實就是如何加約束能達到」消減feature「的目的。
到這裏咱們warm up完畢。
經過實例先了解這個東西能作什麼:稀疏編碼(Sparsecoding)在圖像檢索中的應用
目的:提升檢索的效果
1.1 圖像預處理
圖像預處理主要做用是去除圖片噪聲,去除相關性,增強邊緣等,以提升後續特徵抽取的有效性。常見的圖片預處理有白化,高通濾波,低通濾波,高斯去噪等。
1.2 特徵提取
特徵提取在圖像檢索中處於核心地位,有效的特徵可以表達出一幅圖像所描述的某些特定內容。常見的特徵有SIFT,SURF,Gabor紋理特徵,Gist,顏色直方圖,DAISY,ORB,HOG等。
1.3 特徵融合
這裏的特徵融合是針對一種局部特徵(描述子)來進行的,當某個描述子在不一樣圖片上抽取出的數目不定時,有必要使得全部的圖片具備統一維度的特徵向量表達。常見的有效的方式是使用文本挖掘中的詞袋(BOW,也稱BOF)的思想。
生物意義 and 數學意義
稀疏編碼在人臉識別,信號去噪,圖像重建,超像素,圖像分割,圖像分類,背景建模方面都有很好的效果。
稀疏性被解釋爲人眼視覺層中的V1層 [link],具有了人眼識別物體的基礎特性。這種視覺特性使得其特別適合圖像相關的處理和識別。
連接:https://www.zhihu.com/question/22205661/answer/152655757
超完備字典的學習
能夠根據具體的任務使用不一樣的算法,目前經常使用的是:
稀疏編碼與圖像檢索
稀疏編碼的明顯的優勢是可以重建信號,能去除噪聲,抗部分丟失性,更具備表達粒度,學習字典能夠是徹底無監督學習,或者有監督學習。
先吐槽一下主角
From: sparse autoencoder, sparse coding和restricted boltzmann machine的關係?
個人見解是:這三者基本是一致的,
咱們須要一些約束
」凸優化「 是指一種比較特殊的優化,是指目標函數爲凸函數且由約束條件獲得的定義域爲凸集的優化問題,也就是說目標函數和約束條件都是」凸」的。
Sparse coding是將輸入的樣本集X分解爲多個基元的線性組合,而後這些基前面的係數表示的是輸入樣本的特徵。其分解公式表達以下:
通常狀況下要求基的個數k很是大,至少要比x中元素的個數n要大,由於這樣的基組合才能更容易的學到輸入數據內在的結構和特徵。
* 對ai約束 *
因此,通常的作法是對係數a做一個稀疏性約束,這也就是sparse coding算法的來源。
此時系統對應的代價函數(前面的博文都用損失函數表示,之後統一改用代價函數,感受這樣翻譯更貼切)表達式爲:
第一項,重構輸入數據X的代價值;
第二項,S(.)爲分解係數的係數懲罰,lamda是兩種代價的權重,是個常量。
* 對基約束 *
可是這樣仍是有一個問題,好比說咱們能夠將係數a減到很小,且將每一個基的值增長到很大,這樣第一項的代價值基本保持不變,而第二項的稀疏懲罰依舊很小,達不到咱們想要的目的,即:
分解係數中只有少數係數遠遠大於0,而不是大部分系數都比0大(雖然不會大太多)。
解決這個問題的通用方法是是對基集合中的值也作了一個約束,約束後的系統代價函數爲:
Sparse coding的statistics解釋:
主要是從機率的角度來解釋sparse coding方法,不過這一部分的內容還真沒太看明白,只能講下本身的大概理解。若是把偏差考慮進去後,輸入樣本X通過sparse coding分解後的表達式則以下:
而咱們的目標是找到一組基Ф,使得輸入樣本數據出現的機率與輸入樣本數據的經驗分佈機率 最相近,若是用KL距離來衡量其類似度的話,就是知足他們的KL距離最小,即下面表達式值最小:
因爲輸入數據的經驗分佈函數機率是固定值,因此求上式值最小至關等價於求最大。
通過對參數a的先驗估計和函數積分值估計等推導步驟,最後等價於求下面的能量函數值最小:
而這就很好的和sparse coding的代價函數公式給聯繫起來了。
到目前爲止咱們應該知道sparse coding的實際使用過程當中速度是很慢的,由於即便咱們在訓練階段已經把輸入數據集的基Ф學習到了,在測試階段時仍是要經過凸優化的方法去求得其特徵值(即基組合前面的係數值),因此這比通常的前向神經網絡速度要慢(通常的前向算法只需用矩陣作一下乘法,而後作下加法,求個函數值等少數幾步便可完成)。
Sparse coding的autoencoder解釋:
首先來看看向量X的Lk規範數,其值爲: 由此可知,L1範數爲各元素之和,L2範數爲該向量到遠點的歐式距離。
用矩陣的形式來表達sparse coding的代價函數以下:
和前面所講的同樣,這裏也對基值s作了稀疏性懲罰,用的是L1範數來約束,同時也防止係數矩陣A過大,對其用的是L2範數的平方來約束。可是基值處的L1範數在0點是沒法求導的,因此不能用梯度降低等相似的方法來對上面的代價函數求最優參數,因而爲了在0處可導,可將公式變成以下:
continue...
關於這部份內容,暫停,UFLDL的內容不足以深入認識,打算讀論文研讀,另起一系列。
在稀疏編碼中」標註值」也是須要的,只不過它的輸出理論值是自己輸入的特徵值x,其實這裏的標註值y=x。這樣作的好處是,網絡的隱含層可以很好的代替輸入的特徵;