1. 程式人生 > >對K-means運用到deep learning的一點理解

對K-means運用到deep learning的一點理解

          最近,在學習與深度學習相關的論文,看了一位大牛的論文學習筆記後,決定也把自己學習和看到的整理下來,不知道個人的理解對不對,希望發現問題的親們能踴躍進行批評指正。微笑

         非監督學習的流程:

            1.從一組無標籤資料中學習特徵;

            2.用學習到的特徵提取函式提取有標籤資料特徵,進行分類器的訓練和學習;

            3.對無標籤資料進行預測;

       將k-means聚類演算法用來進行特徵學習,也可以達到非常好的效果。

        k-means構建一個字典D,通過最小化重構誤差,一個樣本只能屬於一個類中心,每一個n維的樣本通過字典D對映為k維的碼向量,這個碼向量就是樣本的特徵。那麼k-means的目標就是尋找滿足條件的字典D,這個字典的每列都是單位長度,而且對應的碼向量還要能更好的保留樣本的資訊。感覺k-means特徵學習和sparse coding很相似,只是sparse coding允許碼向量有多個非零值,而且對樣本描述更準確。那麼k-means的優勢在哪裡哩:1、首先根據字典D優化求解碼向量很簡單;2、給定碼向量優化字典D也很容易;3、只有一個引數聚類中心個數k需要調整;

         在學習資料的特徵時,一定要對資料進行預處理和初始化:

         a、對所有的樣本減去灰度的均值和除以標準差(避免分母為0和壓制噪聲,一般給標準差增加一個小的常數。);

         b、用白化去除資料的相關性;

         對資料處理完後就可以進行k-means特徵學習了,在此我們又遇到了一個問題,就是初始化聚類中心,一般的是隨機挑選k個樣本作為聚類中心,這樣會導致在資料分佈密集的地方挑選了幾個類中心,一箇中心可能就好了的,多選了幾個中心,是不好的,會導致許多空類出現,那個大牛說可以從一個正態分佈中隨機初始化聚類中心,這個我不知道是怎麼實現的額尷尬,希望知道的親,能給我指點一下。另外,還可以啟發式的解決這個問題,當空類出現時,再隨機挑選樣本來替代這個空類中心。

    k-means訓練演算法的大概過程:

      1.對資料進行歸一化;

      2、對資料進行白化處理;

      3.迭代a-b直到滿足條件:

             a、初始化聚類中心,即字典D,根據D得到碼向量s;

             b、根據碼向量s更新字典D,並進行歸一化,得到新的字典D;

分析:

k-means的優點:學習簡單,速度快,引數少,也能學習到方向性的邊緣特徵;

                    缺點:當資料的維數很高時,需要增加大量的樣本,才能得到好的結果;