深度学习(二十四)矩阵分解之基于k-means的特征表达学习
矩陣分解之基于k-means的特征表達(dá)學(xué)習(xí)
原文地址:http://blog.csdn.net/hjimce/article/details/50429317
作者:hjimce
一、相關(guān)理論
? ? ?因?yàn)樽罱愕捻?xiàng)目,要么沒有數(shù)據(jù)、要么訓(xùn)練數(shù)據(jù)很少,精度老是提高不上去,另一方面最近看到網(wǎng)上一篇推薦文章:《Convolutional Clustering for Unsupervised Learning》,于是就操起家伙,學(xué)習(xí)CNN無監(jiān)督學(xué)習(xí)方面的文章,看能不能把精度提高上去。
? ?本篇博文主要講解2012年大神吳恩達(dá)他們曾發(fā)表的一篇paper:《Learning?Feature?Representations?with?K-means》。可能大家對于k均值聚類,這個算法之前已經(jīng)非常熟悉了,覺得這個算法是一個很簡單的算法,估計(jì)會覺得沒什么可以學(xué)的東西,因此對其不感興趣。然而其實(shí)很多人只是表層理解的k-means算法,對于k-means怎么用于圖片分類無監(jiān)督特征表達(dá)學(xué)習(xí)、k-means與矩陣分解的關(guān)系、與壓縮感知相關(guān)理論之間的關(guān)系,卻極少有人去深究理解。曾經(jīng)的我,看到這篇文獻(xiàn)題目的時候,曾心想:“這種文獻(xiàn)肯定很水,連k-means這種算法也好意思拿出來發(fā)表文章”。好吧,這也許就是所謂的:坐井觀天,慚愧啊。人生只有意識到自己是菜鳥的時候,才會去努力,才會進(jìn)步。
? ?本篇博文我將從k-means與矩陣分解開始講起,矩陣分解推導(dǎo)部分主要參看文獻(xiàn):《k-Means Clustering Is Matrix Factorization》,對公式的推導(dǎo)過程不感興趣的可以跳過,個人感覺推導(dǎo)公式枯燥乏味。矩陣分解部分是為了對k-means有進(jìn)一步的了解。因?yàn)楹竺嬉v的特征表達(dá)學(xué)習(xí),文獻(xiàn)給出的公式也是一個矩陣分解的公式。第三部分,我們將詳細(xì)講解文獻(xiàn):《Learning?Feature?Representations?with?K-means》,深入學(xué)習(xí)如何利用k-means算法進(jìn)行圖片特征學(xué)習(xí),并提高圖片分類的精度,領(lǐng)略k-means的牛逼之處。
二、k-means與矩陣分解
這幾天剛好看到這篇paper:《k-Means Clustering Is Matrix Factorization》,因此就用這篇文獻(xiàn)進(jìn)行思路講解。最近突然領(lǐng)悟到矩陣分解威力好強(qiáng)大,好多機(jī)器學(xué)習(xí)的算法都根源于矩陣分解,如PCA、NMF、ICA、LDA、稀疏編碼等,所以就決定對矩陣分解的奧義做一個總結(jié),決定寫一個系列博文,做一個總結(jié),不然算法一多,就會亂掉。下面的的講解,主要翻譯自文獻(xiàn):《k-Means Clustering Is Matrix Factorization》。
1、k-means算法回顧
k均值算法可以說是機(jī)器學(xué)習(xí)中,最常用的一個聚類算法,給定數(shù)據(jù)集X∈Rm,我們的目的就是把它們分成C1,C2……CK,其中k就是我們要聚類的個數(shù)。我們知道k-means算法的原理就是最小化下面的函數(shù):
?
其中,xj是每一個數(shù)據(jù)點(diǎn),ui是聚類中心,當(dāng)xj聚類為Ci時,那么zij的值就是1,如果不是那么就是為0,即:
?
2、證明
(1)證明題目
開始前我們先明確一下我們的目標(biāo),我們的目標(biāo)是證明k-means的目標(biāo)函數(shù)可以被分解成如下矩陣形式:
?
其中,X是數(shù)據(jù)樣本矩陣,每一列表示一個樣本。M是聚類中心矩陣,它的每一列就是我們的聚類中心ui,Z表示一個編碼矢量:
?
就像上初中的時候,考試考證明題一樣,我們的目標(biāo)就是要證明上面的等式成立。也就是k-means的過程就相當(dāng)于矩陣分解的過程。如果對證明過程不感興趣的可以跳過,因?yàn)樽C明過程確實(shí)是挺枯燥的。而且這也不是本篇博文的重點(diǎn),這只是為了讓大家先對k-means的求解其實(shí)是可一個歸結(jié)為一個矩陣分解問題的。
(2)定義
為了后面推導(dǎo)方便起見,我們先對一些代號,做一下定義。我們定義:數(shù)據(jù)樣本矩陣X,X的每一列表示一個樣本xj,我們把矩陣X的L2范數(shù)定義為所有樣本向量的長度平方和,即:
?
OK,啰嗦了這么多,我們要大干一場了,下面開始證明等式:
?
成立。
(3)證明成立
我們先把等式左邊展開:
?
然后上面的T1、T2、T3項(xiàng)我們可以進(jìn)一步化簡為:
?
?
我們把等式右邊也展開:
?
這個時候,我們可以看到T4=T1,T2=T5。因此接著我們只需要證明:T3=T6,證明過程如下:
T6項(xiàng)等價于:
據(jù)此,我們可以進(jìn)一步推導(dǎo):
?
其中Z*Z^T是一個對角矩陣。至此T3=T6證明成立,因此我們最后所要證明的等式也就成立了,證畢。
啰嗦了這么多,無非就是想要說一句話:k-means也是一個矩陣分解的求解過程。
三、特征表達(dá)學(xué)習(xí)
? ? OK,言歸正傳,前面啰嗦了一大堆,僅僅只是為了說明一個問題:k-means的求解過程是一個矩陣分解的過程。本部分要講的利用k-means做特征學(xué)習(xí),才是我們要關(guān)注的東西。接著我們要講的東西就是文獻(xiàn):《Learning?Feature?Representations?with?K-means》到底是怎么實(shí)現(xiàn)無監(jiān)督特征學(xué)習(xí)。本部分同時也參考了前輩zouxy的博文:http://blog.csdn.net/zouxy09/article/details/9982495?,感謝前輩。
? ? 開始前先要講一下spherical?K-means算法,這個算法與我們平時學(xué)到的k-means算法稍微有點(diǎn)不同,是k—means算法的一個進(jìn)化版。所以需要先熟悉一下這個算法。spherical?K-means故名思議,意思應(yīng)該是我們的數(shù)據(jù)點(diǎn)集全部分布在一個球面上,然后進(jìn)行聚類。因此在采用這個算法的時候,需要對每個數(shù)據(jù)點(diǎn)歸一化處理,使得我們要聚類的數(shù)據(jù),分布在一個球面上,然后我的個人理解這一個球面聚類,應(yīng)該是用了余弦相似度度量替代了歐式距離度量(具體沒有細(xì)看,只是個人淺薄理解,可能有誤)。
1、字典與矢量量化
首先文獻(xiàn)采用的k—means算法是:spherical?K-means,其滿足如下條件:
?
其中,D我們由稱之為字典,字典這個詞把我難住了,我不是信息專業(yè)的,從沒聽過字典,好高大上的名字。然而其實(shí)說白了D就是一個變換矩陣。D(j)就是表示D的第j每一列,D的每一列就是我們k均值的聚類中心向量,因?yàn)槲覀兊木垲愂窃趩挝磺蛎嫔?#xff0c;所以聚類中心的模長等于1。
S又稱之為特征向量編碼,當(dāng)D的第j列(聚類中心)與x(i)最近的時候,s(i)對應(yīng)的元素不為0,其余全部為0。這個就是對x(i)的一個編號罷了,比如我們對X進(jìn)行聚類,聚類為5個類,最后如果xi被聚類為第3個類別,那么編碼矢量si=(0,0,1,0,0)。編碼這個詞聽起來好像也有點(diǎn)牛逼的樣子,其實(shí)我們也可以把s理解為特征。而k-means特征提取的過程,說白了就是計(jì)算s。
???K-mean無監(jiān)督學(xué)習(xí)的過程,說白了就是為了學(xué)習(xí)字典D,也就是每個聚類中心。然后當(dāng)我們輸入一個新數(shù)據(jù)x的時候,我們就用D去計(jì)算S,計(jì)算公式如下:
?
簡單理解一下上面的那個符號:argmax。因?yàn)槲覀兪窃谝粋€球面上,兩點(diǎn)間如果最近,那么Dj*Xi應(yīng)該是最大的(點(diǎn)積、余弦)。
2、算法流程
至今為止,我們都還沒扯到圖像,扯到圖像的特征學(xué)習(xí),接著我們就要開始結(jié)合實(shí)際應(yīng)用,講訴k-means的特征學(xué)習(xí)過程。
(1)數(shù)據(jù)獲取
對于圖像,我們要如何進(jìn)行k-means無監(jiān)督特征學(xué)習(xí)?我們從一堆的圖片中,隨機(jī)的抽取出一大堆的圖片塊(16*16大小的塊),然后把這些16*16的圖片塊(這個是灰度圖),拉成一個一維的向量xi,也就是256維的特征向量,這就是我們的訓(xùn)練數(shù)據(jù)了。文獻(xiàn)抽取出了100000個16*16的圖片塊,進(jìn)行字典學(xué)習(xí)。
(2)數(shù)據(jù)預(yù)處理
a、亮度和對比度歸一化。采用如下公式對樣本xi進(jìn)行歸一化:
?
這個簡單,搞過機(jī)器學(xué)習(xí)的人都知道,上面公式分母加了一個數(shù):10,是為了避免除數(shù)是0。
b、白化
這個我們可以采用PCA白化也可以采用ZCA白化,不過我們需要注意的是:白化的過程對于我們的結(jié)果非常重要,所以千萬不要忘了白化。這個文獻(xiàn)對是否采用白化進(jìn)行了對比:
?
左邊是沒用使用白化,聚類出來的中心。右邊則是我們采用白化,學(xué)習(xí)得到的字典。
(3)最后就是spherical?k-means的聚類過程了。
最后算法總流程如下:
3、圖片識別應(yīng)用
前面我們介紹了,給定一堆無標(biāo)簽圖片,我們通過K-means算法,進(jìn)行學(xué)習(xí)字典D。接著我們就要知道它具體是怎么用于圖片識別分類的。下面是算法的總流程:
(1)通過無監(jiān)督學(xué)習(xí),學(xué)習(xí)到一系列的字典D。
(2)接著我們利用學(xué)習(xí)到的字典,把一張輸入圖片,進(jìn)行函數(shù)映射:
我們可以把這個過程看成是卷積,比較容易理解。這個映射過程不一定是非重疊的。
(3)采用pooling進(jìn)行降維。
(4)如果是構(gòu)建多層網(wǎng)絡(luò),那么就重復(fù)上面的過程。如果單層網(wǎng)絡(luò),那么我們就后面接一個分類器,比如svm。
后面就不再細(xì)講了,個人感覺:http://blog.csdn.net/zouxy09/article/details/9982495?講的很好,覺得自己再怎么細(xì)講,也沒有前輩講的很細(xì),自嘆不如啊,所以本篇博文到此結(jié)束。
參考文獻(xiàn):
1、《k-Means Clustering Is Matrix Factorization》
2、《Learning?Feature?Representations?with?K-means》
3、http://blog.csdn.net/zouxy09/article/details/9982495?
4、《An Analysis of Single-Layer Networks in?Unsupervised Feature Learning》
5、《Convolutional Clustering for Unsupervised Learning》
**********************作者:hjimce ? 時間:2015.12.12 ?聯(lián)系QQ:1393852684 ? 地址:http://blog.csdn.net/hjimce? ?原創(chuàng)文章,版權(quán)所有,轉(zhuǎn)載請保留本行信息(不允許刪除)
總結(jié)
以上是生活随笔為你收集整理的深度学习(二十四)矩阵分解之基于k-means的特征表达学习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习(二十三)Maxout网络学习-
- 下一篇: 深度学习(二十五)基于Mutil-Sca