1. 程式人生 > >字典學習與稀疏表示

字典學習與稀疏表示

字典學習(Dictionary Learning)和稀疏表示(Sparse Representation)在學術界的正式稱謂應該是稀疏字典學習(Sparse Dictionary Learning)。該演算法理論包含兩個階段:字典構建階段(Dictionary Generate)和利用字典(稀疏的)表示樣本階段(Sparse coding with a precomputed dictionary)。

這裡有兩個問題是必須要預先解釋清楚:
問題1:我們為什麼需要字典學習?
回答這個問題實際上就是要回答“稀疏字典學習 ”中的字典是怎麼來的。做一個比喻,句子是人類社會最神奇的東西,人類社會的一切知識無論是已經發現的還是沒有發現的都必然要通過句子來表示出來(從某種意義上講,公式也是句子)。這樣說來,人類懂得的知識可要算是極為浩繁的。有人統計過人類每天新產生的知識可以裝滿一個2T(2048G)大小的硬碟。但無論有多少句子需要被書寫,對於一個句子來說它最本質的特徵是什麼呢?毫無疑問,是一個個構成這個句子的單詞(對英語來說)或字(對漢語來說)。所以我們可以很傲嬌的這樣認為,無論人類的知識有多麼浩繁,也無論人類的科技有多麼發達,一本長不過20釐米,寬不過15釐米,厚不過4釐米的新華字典或牛津字典足以表達人類從古至今乃至未來的所有知識,那些知識只不過是字典中字的排列組合罷了!

直到這裡,我相信相當一部分讀者或許在心中已經明白了字典學習的第一個好處——它實質上是對於龐大資料集的一種降維表示。第二,正如同字是句子最質樸的特徵一樣,字典學習總是嘗試學習蘊藏在樣本背後最質樸的特徵(假如樣本最質樸的特徵就是樣本最好的特徵),這兩條原因同時也是這兩年深度學習之風日盛的情況下字典學習也開始隨之升溫的原因。題外話:現代神經科學表明,哺乳動物大腦的初級視覺皮層幹就事情就是影象的字典表示。
問題2:我們為什麼需要稀疏表示?
回答這個問題毫無疑問就是要回答“稀疏字典學習”中稀疏兩字的來歷。不妨再舉一個例子。相信大部分人都有這樣一種感覺,當我們在解涉及到新的知識點的數學題時總有一種累心(累腦)的感覺。但是當我們通過艱苦卓絕的訓練將新的知識點牢牢掌握時,再解決與這個知識點相關的問題時就不覺得很累了。熟練者的大腦可以調動儘可能少的腦區消耗盡可能少的能量進行同樣有效的計算(所以熟悉知識點的你,大腦不會再容易覺得累了),並且由於調動的腦區很少,大腦計算速度也會變快,這就是我們稱熟練者為熟練者的原理所在。站在我們所要理解的稀疏字典學習的角度上來講就是大腦學會了知識的稀疏表示。稀疏表示的本質:用盡可能少的資源表示儘可能多的知識,這種表示還能帶來一個附加的好處,即計算速度快。

在懂得“字典”和“稀疏”各自的那點事兒以後,我們還要再講講稀疏和字典共同的那點兒事。或許在大腦中“字典”和“稀疏”是兩個不怎麼想幹的階段,畢竟“字典”涉及初級視覺皮層,而“稀疏”涉及前額葉皮層。但是在計算機中,“字典”和“稀疏”卻是一堆孿生兄弟。在學習樣本字典之初的時候,稀疏條件就已經被加入了。我們希望字典裡的字可以盡能的少,但是卻可以儘可能的表示最多的句子。這樣的字典最容易滿足稀疏條件。也就是說,這個“字典”是這個“稀疏”私人訂製的。