前面說了一部分有監督學習的有關算法,本節主要對半監督學習做一個簡單的介紹,當然,有監督學習還有很多其他的算法,后面會不斷完善和補充。
半監督學習簡介
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是由模型的參數決定的,因此,有了損失函數后可以直接利用梯度下降進行求解模型。
參考資料:
李宏毅《機器學習》——半監督學習
半監督學習部分就到這里,內容不是很多,全部來源於視頻資料,這里主要是進行回顧和整理,但是其思想很多值得學習的地方,因此在這里先進行一個整理,后續如涉及到,會針對具體算法進行實現和學習。