李宏毅機器學習課程筆記-10.4基於Smoothness假設的半監督學習

Smoothness假設

Smoothness假設的定義

基於Smoothness假設的半監督學習的基本思路是“近朱者赤近墨者黑”,即相似的\(x\)具有相同的\(\hat y\),其具體定義爲:

  1. \(x\)分佈不平均,在某些地方(high density region)很集中,在某些地方很分散
  2. 如果\(x^1\)\(x^2\)在一個high density region中距離非常近,則\(x^1\)\(x^2\)通過1個high density path相連、\(\hat y^1=\hat y^2\)

舉一個例子,如下圖所示,\(x^1,x^2,x^3\)是3個樣本,如果單純地看它們之間的相似度,顯然\(x^2\)\(x^3\)更接近一些。但對於smoothness assumption來說,\(x^1\)\(x^2\)是位於同一個high density region中,它們之間有high density path;而\(x^2\)\(x^3\)之間則是“斷開”的,沒有high density path,因此\(x^1\)\(x^2\)更“像”。

img

手寫數字識別舉例

再舉一個手寫數字識別和人臉識別的例子,如下圖所示,最左側的2、最右側的2和最右側的3,從pixel角度來看明顯是最右側的2和3更加相似(儘管兩者並非是同一個數字),但如果考慮最左側的2朝着最右側的2的演化過程,可以發現產生了一種“間接相似性”(high density path)。根據Smoothness假設,由於這6個2之間存在間接的相似而這6個2和最右側的3之間不存在high density path,因此這6個2是彼此相似的;而最右側的3和這6個2是不相似的。

img

文章分類舉例

假設對天文學(astronomy)和旅行(travel)的文章進行分類,它們有各自的專屬詞彙,此時如果unlabeled data與label data的詞彙是相同或重合(overlap)的,那麼就很容易分類;但真實情況中unlabeled data和labeled data之間可能沒有任何重複的word,因爲世界上的詞彙太多了,sparse的分佈中overlap難以發生。

但如果unlabeled data足夠多,就會以一種相似傳遞的形式,建立起文檔之間相似的橋樑。

cluster and then label

如何實現基於Smoothness假設的半監督學習呢?在具體實現上,最簡單的方式是cluster and then label。

cluster and then label就是先把所有樣本(包括有標籤樣本和無標籤樣本)分成幾個cluster,然後根據每個cluster中各類別有標籤樣本的數量確定該cluster中所有樣本的label,然後進一步用這些cluster學習得到分類器

這種方法不一定會得到好的結果,因爲該方法有個前提是我們能夠把同類別的樣本分到同一個cluster,而這並不容易。對圖像分類來說,如果僅僅依據pixel-wise相似度來劃分cluster,得到的結果一般都會很差。所以爲了滿足這個前提,我們需要設計較好的方法來描述一張圖片(比如使用Deep Autoencoder提取圖片特徵feature),以保證cluster時能夠將同類別的樣本分到同一個cluster。

Graph-based Approach

high density path

如何實現基於Smoothness假設的半監督學習呢?我們可以將每個樣本視爲圖中的1個點,通過圖來表示connected by a high density path。Graph-based方法的基本思路是圖中的有標註樣本會影響與它們鄰近的無標註樣本並在圖中產生“間接相似性”,即使某些無標註樣本沒有直接與有標註樣本相連也仍然可以被判定爲相似。如果想要讓這種方法生效,收集到的數據一定要足夠多,否則可能導致無法形成path、失去了information的傳遞效果。

如何建立一張圖

有時候點之間的邊是比較好建立的(比如網頁超鏈接、論文引用),有時候需要我們自行建立點之間的邊。圖的好壞對最終結果的影響是非常關鍵的,但如何建圖是一件heuristic的事情,需要我們憑經驗和直覺來做,建圖步驟如下:

  1. 定義兩個樣本\(x^i,x^j\)之間的相似度計算方法\(s(x^i,x^j)\)

    如果是基於pixel-wise的相似度,那結果可能比較差,建議使用更好的方法(比如使用Autoencoder提取圖片特徵,並基於提取到的特徵計算相似度)。

    推薦使用的相似度計算方法爲高斯徑向基函數(Gaussian Radial Basis Function):\(s(x^i,x^j)=exp(-\gamma||x^i-x^j||^2)\),其中\(x^i,x^j\)均爲vector。經驗上來說exp(exponential)通常是可以幫助提升性能的,因爲它使得僅當\(x^i,x^j\)非常接近時similarity纔會大、只要距離稍微遠一點similarity就會迅速變小,也就是使用exponential可以做到只有非常近的兩個點才能相連、稍微遠一點就無法相連的效果。

  2. 建立點和點之間的邊

    • k-Nearest Neighbor(K近鄰算法)

      在特徵空間中,如果一個樣本附近的k個最近樣本的大多數屬於某一類別,則該樣本也屬於這個類別

    • e-Neighborhood

  3. 設置點和點之間邊的權重

    一條邊的權重應該和該邊兩個頂點的相似度成比例

如何定量地評估一個圖符合Smoothness假設的程度

那如何定量地評估一個圖符合Smoothness假設的程度呢?

img

如上圖所示,我們定義1個圖的Smoothness\(S=\frac{1}{2}\sum_{i,j}w_{i,j}(y^i-y^j)^2\)並希望它越小越好,其中\(i,j\)爲所有樣本點的索引、\(x^i\)表示樣本的特徵、\(y^j\)表示樣本的標註(有可能是僞標籤)、\(w_{i,j}\)是2個樣本之間邊的權重、\(\frac{1}{2}\)只是爲了方便計算。

上式Smoothness定義還可以表示爲\(S=y^TLy\),其中\(y\)是1個(R+U)-dim的vector:\(y=[\dots,y^i,\dots,y^j,\dots]^T\)\(L\)是1個(R+U)×(R+U)的矩陣(名字叫做Graph Laplacian)。

Graph Laplacian的定義爲\(L=D-W\),其中\(W_{i,j}\)爲2個樣本點之間邊的權重,把\(W\)每行元素之和放在該行對應的對角線上其它元素值爲0即可得到\(D\),如上圖所示。在圖神經網絡(Spectral-based Convolution)中,有關於Graph Laplacian的介紹。

如何訓練

Smoothness定義\(S=y^TLy\)\(y\)是模型的輸出(預測得到的類別),它是取決於模型參數的,因此訓練時僅需在有標註數據的損失函數上加上Smoothness即可:\(L=\sum_{x^r}C(y^r,\hat y^r)+\lambda S\),其中\(\lambda S\)可以被視爲正則項。

由上可知,訓練目標爲:

  1. 有標註數據的交叉熵越小越好,即模型的輸出與標註越接近越好
  2. 所有數據的Smoothness越小越好,即不管是有標註數據還是無標註數據,模型輸出都要符合Smoothness Assumption的假設

注:訓練時可以不僅僅要求整個模型的輸出層要smooth,還可以對模型中任意一個隱藏層加上smooth的限制。


Github(github.com):@chouxianyu

Github Pages(github.io):@臭鹹魚

知乎(zhihu.com):@臭鹹魚

博客園(cnblogs.com):@臭鹹魚

B站(bilibili.com):@絕版臭鹹魚

微信公衆號:@臭鹹魚

轉載請註明出處,歡迎討論和交流!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章