9.2、sparse coding稀疏編碼
如果我們把輸出必須和輸入相等的限制放鬆,同時利用線性代數中基的概念,即o = a1*φ1 + a2*φ2+….+ an*φn, φi是基,ai是係數,我們可以得到這樣乙個優化問題:
min |i – o|,其中i表示輸入,o表示輸出。
通過求解這個最優化式子,我們可以求得係數ai和基φi,這些係數和基就是輸入的另外一種近似表達。
因此,它們可以用來表達輸入i,這個過程也是自動學習得到的。如果我們在上述式子上加上l1的regularity限制,得到:
min |i – o| + u*(|a1| + |a
2| + … + |a
n |)
這種方法被稱為sparse coding。通俗的說,就是將乙個訊號表示為一組基的線性組合,而且要求只需要較少的幾個基就可以將訊號表示出來。「稀疏性」定義為:只有很少的幾個非零元素或只有很少的幾個遠大於零的元素。要求係數 ai 是稀疏的意思就是說:對於一組輸入向量,我們只想有盡可能少的幾個係數遠大於零。選擇使用具有稀疏性的分量來表示我們的輸入資料是有原因的,因為絕大多數的感官資料,比如自然影象,可以被表示成少量基本元素的疊加,在影象中這些基本元素可以是面或者線。同時,比如與初級視覺皮層的模擬過程也因此得到了提公升(人腦有大量的神經元,但對於某些影象或者邊緣只有很少的神經元興奮,其他都處於抑制狀態)。
稀疏編碼演算法是一種無監督學習方法,它用來尋找一組「超完備」基向量來更高效地表示樣本資料。雖然形如主成分分析技術(pca)能使我們方便地找到一組「完備」基向量,但是這裡我們想要做的是找到一組「超完備」基向量來表示輸入向量(也就是說,基向量的個數比輸入向量的維數要大)。超完備基的好處是它們能更有效地找出隱含在輸入資料內部的結構與模式。然而,對於超完備基來說,係數ai不再由輸入向量唯一確定。因此,在稀疏編碼演算法中,我們另加了乙個評判標準「稀疏性」來解決因超完備而導致的退化(degeneracy)問題。(
詳細過程請參考:ufldl tutorial稀疏編碼)
比如在影象的feature extraction的最底層要做edge detector的生成,那麼這裡的工作就是從natural images中randomly選取一些小patch,通過這些patch生成能夠描述他們的「基」,也就是右邊的8*8=64個basis組成的basis,然後給定乙個test patch, 我們可以按照上面的式子通過basis的線性組合得到,而sparse matrix就是a,下圖中的a中有64個維度,其中非零項只有3個,故稱「sparse」。
這裡可能大家會有疑問,為什麼把底層作為edge detector呢?上層又是什麼呢?這裡做個簡單解釋大家就會明白,之所以是edge detector是因為不同方向的edge就能夠描述出整幅影象,所以不同方向的edge自然就是影象的basis了……而上一層的basis組合的結果,上上層又是上一層的組合basis……(就是上面第四部分的時候咱們說的那樣)
sparse coding分為兩個部分:
1)training階段:給定一系列的樣本[x1, x 2, …],我們需要學習得到一組基[φ1, φ2, …],也就是字典。
稀疏編碼是k-means演算法的變體,其訓練過程也差不多(em演算法的思想:如果要優化的目標函式包含兩個變數,如l(w, b),那麼我們可以先固定w,調整b使得l最小,然後再固定b,調整w使l最小,這樣迭代交替,不斷將l推向最小值。em演算法可以見我的部落格:「
從最大似然到em演算法淺解
」)。
訓練過程就是乙個重複迭代的過程,按上面所說,我們交替的更改a和φ使得下面這個目標函式最小。
每次迭代分兩步:
a)固定字典φ[k],然後調整a[k],使得上式,即目標函式最小(即解lasso問題)。
b)然後固定住a [k],調整φ [k],使得上式,即目標函式最小(即解凸qp問題)。
不斷迭代,直至收斂。這樣就可以得到一組可以良好表示這一系列x的基,也就是字典。
2)coding階段:給定乙個新的x,由上面得到的字典,通過解乙個lasso問題得到稀疏向量a。這個稀疏向量就是這個輸入向量x的乙個稀疏表達了。
例如:
深度學習模型 方法之稀疏編碼
deep learning 深度學習 學習筆記整理系列 zouxy09 qq.com version 1.0 2013 04 08 宣告 1 該deep learning的學習系列是整理自網上很大牛和機器學習專家所無私奉獻的資料的。具體引用的資料請看參考文獻。具體的版本宣告也參考原文獻。3 本人才疏...
稀疏編碼和字典學習
這個問題一直想解決,看了很久都沒有想通,deep learning 深度學習 學習筆記整理系列之 五 寫的通俗易懂,作為csdn的部落格專家,以後經常拜讀他的文章。sparse coding稀疏編碼 如果我們把輸出必須和輸入相等的限制放鬆,同時利用線性代數中基的概念,即o a1 1 a2 2 an ...
UFLDL(五)自編碼演算法與稀疏性
新教程內容太繁複,有空再看看,這節看的還是老教程 之前討論的神經網路是在有監督的學習中的應用,而自編碼神經網路是一種無監督的學習演算法。它的特點是使用了bp,並且把輸入值當作目標值。當隱藏層單元的個數小於輸入的個數時,相當於完成了降維,而當輸出時,又相當於重新恢復。為了給隱藏單元加入稀疏性限制,可限...