前面說了一部分有監督學習的有關演算法,本節主要對半監督學習做一個簡單的介紹,當然,有監督學習還有很多其他的演算法,後面會不斷完善和補充。
半監督學習簡介
0.前言
這裡半監督學習的內容只做一些初步的介紹,理解半監督學習是如何進行學習的,主要敘述原理,看一下半監督學習是如何工作的,不針對具體演算法進行深究,到了實戰部分涉及到會進一步學習。
前面的有監督學習中,資料都是帶有標籤的資料。因此,半監督學習就是一部分資料有標籤,一部分資料沒有標籤,而通常情況下,無標籤的資料數量遠遠大於有標籤的資料。
為了後面能夠更好地描述,這裡先給出對資料的描述:
有標籤資料有R個,無標籤資料有U個,那麼上面就分別表示有標籤資料和無標籤資料。
那麼為什麼要做無監督學習呢?一是因為在真實世界中,往往有標籤的資料收集很困難;另一個原因就是我們人類的學習通常也是一種無監督學習的方式。
無監督學習為什麼會有用呢?來看下面的圖片:
假設有一隻貓一隻狗,對其進行分類,我們會把分界線畫成中間那條豎線,而當有一些unlabelled data之後:這些unlabelled data可能會影響我們的決定,會把分界線劃分成斜著的這條線。
那麼這樣劃分究竟有沒有用呢?比如貓下面那一個點有可能是下面這樣的一個資料:
這一張看樣子也有點像貓,因為其背景與貓的背景相似,因此,有可能會被劃分為貓。
半監督通常是要基於一些假設,然後進行建模的,那麼半監督學習的效果好不好,就是假設的是否合理。下面介紹幾種常見的半監督學習中的假設。
1.生成模型中的半監督學習
在前面《概率生成模型》一節中介紹了,在監督學習中,概率生成模型用來分類的方法:
假設資料集服從高斯分佈,然後利用最大似然估計估算出樣本分佈的引數,然後對未知樣本進行分類:
那麼在半監督學習中,我們不僅有帶有標籤的資料,還會有大量的沒有標籤的資料,如圖所示:
圖中綠色的點是無標籤資料,那麼這些無標籤的資料就會迫使原來的分類邊界進行移動,變成豎線。
那麼無監督學習中具體是如何實現呢?步驟如下:
(1)初始化一組引數μ1、μ2、Σ、P(C1)、P(C2);這組引數可以從labeled data計算得來;
(2)然後利用這組引數對無標籤資料進行進行分類;
(3)根據對無標籤資料的分類的結果,更新引數μ1、μ2、Σ、P(C1)、P(C2),具體更新方法如下:
(N是總樣本數,即R+U,N1為labeled data 屬於C1的樣本數,N2為labeled data 屬於C2的樣本數,
其實就是在這之前有標籤的資料上加上了無標籤資料的所計算得到的概率,可對照之前概率生成模型中的公式寫出剩餘引數的更新方式)
然後回到第2步,直到引數不再更新,就結束。
上面的第二步就是EM演算法中的E,第三步就是M。
演算法可以證明最終一定會收斂,但是不同的初始化的引數值會對結果有較大的影響。
在監督學習中,我們最大化目標函式:
在半監督學習中,由於多了一部分無標籤樣本,因此目標函式變為:
但是我們並不知道無標籤資料來自那一個class,就無法估測上面的概率,但是xu可能來自於C1也可能來自於C2,那麼:
然後就是maxL(θ),但是很不幸的是,上面的式子是不收斂的,無法直接進行求解,因此要是用EM演算法進行迭代求解。
2.基於低密度區域分隔的假設
什麼是基於低密度間隔呢?就是說兩類資料,在它們分隔的區域會有明顯的“隔離帶”,將兩類資料分隔開,如下圖所示:
左邊那條線就比右邊那條線更合理,因為左邊能夠將資料分的更開(類似於SVM),分開後兩邊的資料所屬類別就比較明確。而右邊那一條線對於左半部分資料可能就分類比較模糊。
因此,這種假設稱之為“非黑即白”的假設,即unlabeled data要麼屬於類別1,要麼屬於類別2。
2.1 self-training
這種假設就有一個比較著名的演算法Self-Training,步驟如下:
(1)利用labeled data先訓練一個分類模型出來,這個模型是任意的,可以用任意一種;
(2)利用這個模型去對unlabeled data進行分類,成為Pseudo-label;
(3)將一部分分類好的unlabeled data從中移除,並加入到labeled data中去;
(4)重複(1)~(3),直到模型不再發生改變。
那麼這裡有一個要把一部分資料從unlabeled data中移除的步驟,究竟移除哪一部分資料,通常是移除那一部分確信度比較高的資料,又或者給每一個資料提供一個權重,這裡暫不細說。
self-training和前面說的semi-surpervised learning的生成模型有點相似。
這裡“非黑即白”就會涉及到一個問題,就是Hard label和Soft label的問題。
所謂Hard label就是當unlabeled data輸出比較像class1那麼它就是class1,而soft-label是指輸出有一定概率屬於class1。如下圖所示:
然而在神經網路中,假設輸出為[0.7,0.3],然後使用soft label將unlabeled data設定為[0.7,0.3],這樣對於引數的更新其實並沒有用(因為模型引數不需要做任何更新,依然可以輸出一樣的值)。
但有時使用hard label又過於武斷,因此就有了另一種方法Entropy-based Regularization(基於熵值的正則化)。
2.2 Entropy-based Regularization
首先先看幾張圖,假設對於一個無標籤樣本分類,有下面三種情況:
在對unlabeled data進行類別判定時,我們希望最終所得到的結果越集中越好,假設有5個類別,對樣本xu進行分類,當分類結果為第一張圖時,認為結果是好的,
第二張圖結果也是好的,因為兩張圖在某一個類別上的置信度都很大,而第三張圖則是不好的,因為我們無法分辨出xu究竟屬於哪一類。
那麼如何來衡量上面這幾個結果的好壞呢?就是熵,熵是用來描述資料的分散程度的,其計算公式為:
熵越小,表示分類越集中,分類的辨識度就越高,因此我們希望其越小越好。上面三張圖的熵為:
那麼基於熵的正則化在半監督學習中就是:在訓練過程中,我們不但要求labeled data的損失越小越好,同時也要使得unlabeled data的熵越小越好,即為:
有了損失函式,就可以進行模型訓練了。
3.基於平滑的假設
基於平滑的假設的思想就是:當x1和x2通過一個高密度區域相連,那麼x1和x2就是相似的。這個思想有點像前面說的DBSCAN的思想。比如下面一張圖:
x1和x2從距離計算上來看相聚較遠,而x2和x3相聚更近,然而x1和x2中間有一塊高密度區域相連,那麼就認為x1和x2更相似,而x2和x3則不相似。
那麼在半監督學習中如何做呢?有兩種思想:
3.1 聚類後再分類
這種方法比較直觀,就是將所有的資料進行聚類,然後根據unlabeled data所屬的簇中labeled data所屬的類即為unlabeled data的類,如圖所示:
然而,這種方法往往需要資料分佈非常好,且聚類效果比較好,要求比較高,因此這種方法得到的結果並不理想。
3.2 圖方法
如何知道x1和x2是通過高密度區域相連的呢?我們可以利用資料建立一張圖出來,類似這樣:
通過這張圖就可以知道x1和x2是不是屬於同一類別,那麼如何建立一張圖呢?
(1)首先定義xi和xj之間的相似度s(xi,xj);
(2)然後以某一個點開始建立邊,邊的連線我們可以採用K-nearest neighbor或者e-neighborhood:
(3)然後每條邊的長度即為兩個樣本之間的相似度。
相似的計算通常採用RBF進行計算(RBF的函式關係就是,近的很近,遠的很遠):
類似於DBSCAN,最後建立一張圖:
在建圖時一般需要大量的資料,否則有可能會導致圖不連貫,斷裂,如圖所示這樣的情況:
上面是定性地說明圖連線如何進行半監督學習的過程,下面定量看一下圖建好之後,我們如何來衡量圖的好壞:
首先需要定義一個用來衡量一個圖好壞的指標S,S的計算如下:
S的值越小,表示圖越光滑,越好,如下兩個圖,來計算一下哪一個圖更光滑:
圖的邊就是上面通過RBF計算得到的權重的大小,y即為分類結果,那麼顯然左邊的比右邊的分類結果更合理,因為S更小。
上面的S可以進行一下改寫:
其中y是將labeled data和unlabeled data串起來的一個向量,即R+U維:
L則是(R+U)*(R+U)維的一個矩陣。這個矩陣就是著名的拉普拉斯矩陣:
根據上面的圖W和L分別為:
那麼在進行訓練時,由原本的labeled data使得損失最小,還要使得越smooth越好,即S越小越好,即損失函式變成了:
這裡y是由模型的引數決定的,因此,有了損失函式後可以直接利用梯度下降進行求解模型。
參考資料:
李宏毅《機器學習》——半監督學習
半監督學習部分就到這裡,內容不是很多,全部來源於視訊資料,這裡主要是進行回顧和整理,但是其思想很多值得學習的地方,因此在這裡先進行一個整理,後續如涉及到,會針對具體演算法進行實現和學習。