李宏毅深度學習筆記-半監督學習


半監督學習

image-20200609140706680

什么是半監督學習?

大家知道在監督學習里,有一大堆的訓練數據(由input和output對組成)。例如上圖所示\(x^r\)是一張圖片,\(y^r\)是類別的label。

半監督學習是說,在label數據上面,有另外一組unlabeled的數據,寫成\(x^u\) (只有input沒有output),有\(U\)筆ublabeled的數據。

通常做半監督學習的時候,我們常見的情景是ublabeled的數量遠大於labeled的數量(\(U >> R\))。

半監督學習可以分成兩種:

  • 一種叫做轉換學習,ublabeled 數據就是testing set,使用的是testing set的特征。
  • 另一種是歸納學習,不考慮testing set,學習model的時候不使用testing set。

unlabeled數據作為testing set,不是相當於用到了未來數據嗎?

用了label 才算是用了未來數據,用了testing set的特征就不算是使用了未來數據。例如圖片,testing set的圖片特征是可以用的,但是不能用label。

什么時候使用轉換學習或者歸納學習?

看testing set是不是給你了,在一些比賽里,testing set給你了,那么就可以使用轉換學習。但在真正的應用中,一般是沒有testing set的,這時候就只能做歸納學習。

為什么使用半監督學習?

缺有lable的數據,比如圖片,收集圖片很容易,但是標注label很困難。半監督學習利用未標注數據做一些事。

對人類來說,可能也是一直在做半監督學習,比如小孩子會從父母那邊做一些監督學習,看到一條狗,問父親是什么,父親說是狗。之后小孩子會看到其他東西,有狗有貓,沒有人會告訴他這些動物是什么,需要自己學出來。

image-20200609144837927

為什么半監督學習有用?

假設現在做分類任務,建一個貓和狗的分類器。有一大堆貓和狗的圖片,這些圖片沒有label。

image-20200609145207275

假設只考慮有label的貓和狗圖片,要畫一個邊界,把貓和狗訓練數據集分開,可能會畫一條如上圖所示的紅色豎線。假如未標注數據的分布如上圖灰色點,可能會影響你的決定。未標注數據雖然只告訴我們input,但它們的分布可以告訴我們一些信息。

比如加入灰色點后,你會把邊界畫成紅色斜線。

半監督學習使用未標注數據的方式,往往伴隨着一些假設,所以有沒有用取決於假設符不符合實際。你可能覺得左下的灰點是貓,但是可能是狗,因為兩張圖片的背景看起來很像。

生成模型與半監督學習

image-20200609145743461

這邊要講4件事:

  • 第一個是在生成模型的時候,怎么使用半監督學習
  • 然后會講兩個通用的假設,一個是低密度分離假設
  • 一個是平滑度假設
  • 最后講半監督學習還有的一招,找一個好的代表

image-20200609151411502

在生成模型中為什么使用半監督學習?

在監督學習中,有一堆用來訓練的樣本,你知道它們分別屬於類別1,還是類別2。

  • 會去估算類別1和類別2的先驗概率\(P(C_1),P(C_2)\)
  • 然后計算類條件概率\(P(x|C_1),P(x|C_2)\) ,假設\(P(x|C_i)\)服從一個高斯分布。

假設類別1的數據是從均值為\(\mu_1\),協方差為\(\Sigma\)的分布中取出來的,而類別2的數據是從均值為\(\mu_2\),協方差也為\(\Sigma\)的分布中取出來的(之前講過共享協方差,效果會好一點)。

然后可以計算后驗概率\(P(C_1|x)\) ,決定一個決策邊界在哪里。

image-20200609160838193

如果今天有一些未標注數據,如上圖綠點,那仍然假設均值和方差是\(\mu_1,\mu_2,\Sigma\)顯然不合理。

如上圖左下所示,\(\Sigma\)應該比較接近圓圈(藍色圓圈),也許在類1采樣的時候有問題,所以采樣到奇怪的分布(藍色橢圓)。如上圖右下,類2的\(\mu_2\)不應該在橙色橢圓內,而應該在更下面。

這樣會使先驗概率受到影響,本來兩個分布,正例數據是一樣多,但是加入未標注數據之后,你可能會覺得類2的正例數據更多(先驗概率就更大)。總之加入未標注數據后,會影響對均值和協方差的估測,繼而影響類條件概率,最后影響了你的決策邊界。

image-20200609163730566

怎么做半監督學習?

初始化一組參數,如果是二分類任務,就是初始化類1和類2的先驗概率、均值和協方差,可以隨機初始化,用已經有標注的數據估測,統稱為\(\theta\)

  • step1:根據已有的\(\theta\) 可以計算每一筆未標注數據的后驗概率(屬於類1 的概率)
  • step2:根據step1的后驗概率更新模型,update的式子非常直覺

\(\large P(C_1)=\frac{N_1+\sum\limits_{x^u}P(C_1|x^u)}{N}\)\(\large \mu^1=\frac{1}{N_1}\sum\limits_{x^r\in C_1}x^r+\frac{1}{\sum\limits_{x^u}P(C_1|x^u)}\sum\limits_{x^u}P(C_1|x^u)x^u\)

先驗概率更新公式:

  • \(\large \frac{N_1}{N}\)是沒有未標注數據的時候的先驗概率(\(N_1\)是被標注為\(C_1\)的樣本),\(\large \sum\limits_{x^u}P(C_1|x^u)\)是未標注數據告訴我們的\(C_1\)出現的次數(所有未標注數據為\(C_1\)的后驗概率之和),屬於\(C_1\)還是\(C_2\)是根據概率來的,不是硬設計的。得到\(C_1\)受未標注數據影響的先驗概率\(P(C_1)\)

均值更新公式:

  • 不考慮未標注數據時,\(\mu_1\) 就是所有屬於\(C_1\)的標注數據的平均。加入未標注數據后,就加上未標注數據的后驗概率權重和。如果未標注數據偏向\(C_1\),那對\(C_1\)的影響就大一點,反之則小一點。對\(C_2\)來說,計算方式是一樣的。

接下來,返回step1 。有了新的model之后(新的\(\theta\)),\(P_{\theta}(C_1|x^u)\)會不一樣,那在step2,model算出來也會不一樣,接下來再返回step1更新概率......

理論上上述方法會收斂,但是初始值會影響最后收斂的結果。事實上,step1就是E步,step2就是M步。

image-20200609191742514

上述算法背后的理論是什么?

原來只有標注數據的時候,目標是最大化一個似然函數,那么給定\(\theta\),每一筆訓練數據的似然函數值是可以計算的(\(=P_{\theta}(x^r|\hat{y}^r)P(\hat{y}^r)\) ),然后把所有的似然函數值相加,就是總的似然函數值,然后找\(\theta\)最大化。\(\theta\)有顯式解,求最大值點(導數為0)。

現在加入未標注數據后,我們不知道未標注數據來自哪一個類別,那么未標注數據出現的概率就是和\(C_1\)的聯合概率+和\(C_2\)的聯合概率(相當於是\(\sum\limits_{C}P(x^u,C^i)\) 。接下來目標就是最大化\(P_{\theta}(x^u)\),但是\(P_{\theta}(x^u)\)的式子是非凸的,所以使用EM算法求解。

假設一:低密度分離

image-20200609192938127

這個世界是非黑即白的,什么是非黑即白?

假設現在有一大堆的data,有標注數據,有非標注數據,在兩個類別之間會有一個明顯的鴻溝。給一些標注數據,可以把邊界分在上圖右邊的線,也可以把邊界分在上圖左邊的線。但是考慮非標注數據,那么左邊的邊界會好一點,在邊界處,兩個類別的密度是低的(不會出現data)。

self-training

image-20200609200805022

低密度分離最代表性、最簡單的方法是self-training,非常直覺。

我們有一些標注數據,和一些未標注數據。接下來:

  • 從標注數據訓練一個model \(f^*\) (用DNN,deep、shallow還是其他機器學習的方法都可以)

  • 根據\(f^*\) 標注未標注數據,丟入\(x^u\),得到\(y^u\)\(\{(x^u,y^u)\}_{u=l}^{R+U}\)叫做偽標簽數據

  • 接下來,從偽標簽數據集移除一些數據加到標注數據集(移除哪些數據需要自己決定,設計一些啟發式的規則,或者給權重,有些數據的標簽比較確定,那就給大的權重)

  • 有了更多的標注數據之后,回頭再去訓練model \(f^*\)

self-training在回歸上有用嗎?

回歸是output一個數值,通過\(f^*\)得到\(\{x^u,y^u\}\),加到訓練數據集里再訓練\(f^*\) ,不會影響到\(f^*\),從均方誤差角度思考,\(y^u\)就是在\(f^*\)上,距離為0。

image-20200609204213726

可能覺得self-training很像是剛才生成模型里面用的EM算法,唯一的差別是在做self-training的時候,用的是硬標簽,生成模型里用的是軟標簽(概率)。在做self-training的時候,會強制分配一個數據屬於某一個類別,在生成模型里,使用的是后驗概率,部分屬於類1,部分屬於類2。

那哪一個比較好?

我們考慮使用神經網絡,從標注數據學習到一組參數\(\theta^*\),一筆未標注數據通過\(f^*\) ,得到分類概率\(\begin{bmatrix} 0.7\\0.3 \\ \end{bmatrix}\)

  • 如果是硬標簽,就直接分為類1,\(x^u\)的新target為\(\begin{bmatrix} 1\\0 \\ \end{bmatrix}\)
  • 如果是軟標簽,0.7的概率屬於類1,0.3的概率屬於類2,\(x^u\)的新target為\(\begin{bmatrix} 0.7\\0.3 \\ \end{bmatrix}\)

軟標簽沒有用,如果使用的target為\(\begin{bmatrix} 0.7\\0.3 \\ \end{bmatrix}\),意味着參數不變。必須使用硬標簽。

使用硬標簽意味着什么?

用硬標簽的時候,用的就是低密度分離的概念。得到的概率\(\begin{bmatrix} 0.7\\0.3 \\ \end{bmatrix}\)意味着為類1的概率高,但是在非黑即白的世界看來,就是等於類1。

Entropy-based Regularization(基於熵的正則化)

image-20200609210041170

熵:一個事件的不確定程度

Entropy-based Regularization(基於熵的正則化)是self-training的進階版,self-training里用概率划分類別,可能覺得比較武斷,那就可以用Entropy-based的這個方法。

Entropy-based是說,如果使用神經網絡,output是一個分布,我們不去限制output具體屬於哪一個類別,而是假設分布很集中(非黑即白的世界)。假設做5類別的分類的model:

  • 類別1的概率為1,其他類別概率為0,那就是好的
  • 類別5的概率為1,其他類別概率為0,那也是好的
  • 所有類別的概率很平均,那就是不好的,不符合低密度分離的假設(非黑即白)

怎么用數值的方法評估分布是集中還是不集中?

使用熵,分布的熵告訴你集中還是不集中。式子如上圖右上,每個類別的概率*log(每個類別的概率),再對類別個數求和取負數。

  • 第一個分布,熵為0,分布集中
  • 第二個分布,熵也為0,分布集中
  • 第三個分布,熵為\(\large 5*-(\frac{1}{5}ln(\frac{1}{5}))=ln(5)\) ,分布比較散

我們希望model的output在標注集上正確,在未標注集上的熵越小越好。

  • 根據這個目標,重新設計損失函數。原來只是希望model在標注集上的output和label距離越近越好,用交叉熵來評估它們之間的距離。
  • 現在在原來的基礎上,加上未標注集的output分布的熵。
  • 然后在未標注集部分乘上一個權重,來表明偏向標注部分還是未標注部分。

上圖右下的損失函數可以算微分,那就使用梯度下降最小化這個損失函數,迭代求解參數。加入未標注部分,作用就類似於正則化(在原來損失函數后加一個L1正則或者L2正則),這里則加入一個未標注集熵來防止過擬合,所以稱之為基於熵的正則化。

Semi-supervised SVM(半監督SVM)

image-20200609213923208

我們知道SVM是找邊界,給你兩個類別的數據,SVM找一個邊界,這個邊界一方面要有最大的間隔(讓兩個class分的越開越好),一方面要有最小的分類錯誤。

假設現在有一些未標注數據,半監督SVM會窮舉所有可能的label。

例如上圖左邊,有四筆未標注數據,每筆數據既可以屬於class1,也可以屬於class2,可能的情況如上圖右邊所示(有很多可能,這里沒畫完)。然后對每個可能的結果,都去做一個SVM,邊界如上圖紅色線。然后再去找讓間隔最大,錯誤最小的那一種結果。在例子里可能是黑色框這種結果。

窮舉所有方法運算量很大啊?

在上圖reference里,提出了一個近似方法,基本精神是一開始有一些label,然后每次改一筆未標注數據的label,看看能不能讓目標函數變大,變大就改。

假設二:平滑度假設

image-20200612215349126

精神是近朱者赤近墨者黑。

image-20200612215515681

假設:相似的\(x\)有相似的\(\hat{y}\)

這個假設聽起來沒有什么,而且光有這個假設是不精確的,因為給model(不是很深)相似的\(x\),output本來就是差不多的。

更精確的假設:

\(x\)的分布是不平均的,在某些地方很集中,在某些地方又很分散。如果今天\(x_1\)\(x_2\)在一個高密度的區域很相似的話,\(\hat{y}^1\)\(\hat{y}^2\)才會很像。

什么叫在高密度區域下呢?

意思是說可以用高密度的路徑做連接

舉個例子,假設數據的分布如上圖右邊所示,像一個血輪眼。現在有3筆數據\(x^1,x^2,x^3\),考慮粗略的假設(\(x\)\(\hat{y}\)像),會說\(\hat{y}^2\)\(\hat{y}^3\)比較像,\(\hat{y}^1\)\(\hat{y}^2\)比較不像。

但是平滑度假設不是這樣,更精確的假設是說,“像”要兩個數據中間為高密度區域下,比如\(x^1\)\(x^2\)中間是一個高密度區域(\(x^1\)\(x^2\)由一個高密度區域連接),有很多數據(中間想成平原地帶,地勢平坦,人煙很多),而\(x^2\)\(x^3\)之間數據稀少(中間想成一座山,人煙稀少),那么走平原會比走山容易,\(x^2\)走到\(x^1\)更容易(更相似)。

image-20200613190825992

image-20200613191217587

image-20200613191722183

為什么會有高密度區域假設?

因為在真實情況下,這個假設成立的可能性很高。

我們考慮手寫數字識別的例子,有兩個2一個3,如果計算像素點相似度的話,可能上圖右邊的2和3更像。但是從所有數據中看,左邊的2到右邊的2中間會有很多連續的形態。所以根據平滑度假設,左邊的2和右邊的2更像,因為右邊的2和3之間沒有過渡的形態。

看人臉識別也是一樣的,比如左臉像和右臉像差很多,兩個人的左臉像計算像素點相似度的話,可能比同一個人的兩張側臉像更高。但是如果收集到足夠多的未標注數據,會找到兩個側臉像的很多過渡形態,根據高密度區域假設,這兩張側臉像就是同一個人。

image-20200613191817343

高密度區域假設,在文件上非常有用,假如現在要區分天文學和旅游的文章。

天文學的文章會出現asteroid、bright,而旅游的文章會出現yellowstone、zion。如果未標注文章和標注文章的詞語有重疊,那可以很容易分類。但真實情況情況是,未標注文章和標注文章可能沒有任何詞語重疊,因為世界上的詞語太多了,一篇文章詞匯不會很多,每篇文章的詞語是非常稀疏的。

image-20200613192728998

但是收集到夠多的數據的話,就可以說上圖\(d_1、d_5\)像,\(d_5、d_6\)像,傳播下去就可以說\(d_1、d_3\)是一類,\(d_2、d_4\)是一類。

聚類、然后標注

image-20200613193019189

如何實踐平滑度假設?

最簡單的方法是聚類、然后標記。

假如數據分布如上圖,橙色是class 1,綠色是class 2,藍色是未標注數據。接下來做聚類,可能把所有數據分成3個簇。在簇1里,class 1的label最多,那簇1里所有數據標記為class 1,同樣的簇2和簇3都標記為class 2。把標記后的數據拿去learn就結束了。

這個方式不一定有用,因為要求簇正確,這個方法有效的假設是同一個class的東西聚集在一起。但是在圖像里要把同一個class的東西聚集在一起沒有那么容易。之前深度學習講過,不同class的圖像可能會很像,同一個class可能會不像,只用像素點做聚類,結果八成是不好的。沒辦法把同一個class的數據聚集在一起,那未標注數據就沒有用。

所以要有用,就要有一個好的方法來描述一張圖像,比如用Deep Autoencoder抽特征,然后再做聚類。

基於圖的方法

image-20200614143220120

上面是比較直覺的方法。另一個方法是引入圖結構,來表達通過高密度路徑進行連接這件事情。

把現在所有的數據點都建成一個圖,每個數據點就是圖上的一個點,想辦法計算它們之間的奇點,想辦法把它們之間的邊建出來。

所謂的高密度路徑的意思是說,如果有兩個點,在圖上是相連的,那它們就是同一個class,如果沒有相連,就算距離很近,也走不到。

如何構建圖?

有些時候,圖的表示可以很自然的得到。舉例說網頁的分類,你有記錄網頁和網頁之間的超鏈接,那超鏈接就很自然的告訴你網頁是怎么連接的。或者你要做的是論文的分類,論文和論文之間有引用的關系,這種引用的關系也是另外一種圖的邊,可以很自然地把這種圖畫出來。

當然有時候,需要自己想辦法構建圖

image-20200614151617799

怎么自己想辦法構建圖?

其實的圖的好壞對結果的影響是非常嚴重的,但是自己用什么方法做還是很啟發的,用自己覺得合適的方式做就可以了。

通常的做法是:

  1. 先定義兩個對象之間的相似度,比如圖像可以是基於像素點的相似度(可能效果不好),也可以是基於自動編碼器抽取出來的特征計算相似度(效果可能好一點)

  2. 定義完相似度后,就可以構建圖了(添加邊),圖有很多種:

    • K近鄰的圖,現在有一大堆數據,可以計算數據與數據之間的相似度,然后設置k例如3,就是3個最相似的點相連

    • e-Neighborhood的圖,只有相似度超過某個閾值的點才會相連

所謂的邊也不是只有相連和不相連這兩種選擇,可以給邊一些權重,讓邊跟兩個數據點的相似度成正比。相似度可以用Gaussian Radial Basis Function來定義,\(s(x^i,x^j)=exp(-\gamma||x^i-x^j||^2)\)

怎么計算這個相似度?

可以先算\(x^i,x^j\)的歐式距離,乘以一個參數取負號,再取exp。取exp很有必要,在經驗上最后效果比較好。因為取exp,下降速度很快,只有當\(x^i,x^j\)非常靠近時,奇點才會大,距離遠一點奇點就會下降很快變得很小。這樣才能制造如上圖右下方所示的,兩個距離近的橙色點有連接,綠色點和橙色點雖然距離也近,但是使用了exp導致只有很近很近的點才有連接,即使遠一點點就不會有連接了,有這樣的機制才能避免跨海溝的連接(橙色點和綠色點連接)。

image-20200614162840922

基於圖的方法精神是,如果現在在圖上面有一些標注數據,比如上圖左上方,已經知道了藍色圈的數據屬於class 1,那么跟他們有相連的數據點屬於class 1的概率也會上升。每一筆數據會去影響它的鄰居。

光會影響鄰居還不夠,因為有連接說明本來就很像,那很像的input ,output本來也就很像。這種方法真正的精髓是,class是會傳遞的,雖然一個點沒有與標注數據直接相連,但是有連接路徑,那么class 1就會隨着邊傳遞。

例如上圖右上方,所有數據點構建成一個圖(理想的例子),然后有一個藍色點屬於class 1,一個紅色點屬於class 2。經過基於圖的方法,藍色點會傳遞,紅色點也會傳遞,如上圖右下方所示。

image-20200614163138196

要讓基於圖的這種半監督學習方法有用的話,一個重要的原則是你的數據要多,如果數據不夠多,例如上圖所示,中間有斷開,那信息就傳遞不過去。

image-20200614163344586

之前是定性說一下怎么使用圖,這里要說一下怎么定量使用圖。

定量的使用方式是在這個圖的結構上面定一個東西,叫做label的平滑度,來表明這個label有多符合平滑度假設。

怎么定平滑度?

看上圖兩個例子,這兩個例子都有4個數據點,數據點之間連接的數字代表了邊的權重。現在給兩個例子的數據不同的label,左邊例子的label是1,1,1,0,右邊例子的label是0,1,1,0,那誰更平滑呢?

直觀感覺就是左邊例子更平滑,但我們需要定量描述。常見的方法是,考慮兩兩相連的點(不管有label還是沒有label),在所有的配對上,計算label差值的平方,然后乘上權重 ,最后求和。

所以左邊這個例子的S就是0.5,右邊例子的S是3,S越小越平滑。

image-20200614164542068

S可以稍微整理下,寫成向量形式如上圖。

\(\large y\)串成一個向量,\(\large y\)包括標注數據和未標注數據,所以有\(R+U\)維。

\(L\)\((R+U)\times(R+U)\)的矩陣,叫做圖拉普拉斯,\(L\)的定義是\(D-W\)\(W\)是兩兩數據點之間的權重,\(D\)\(W\)每行值之和(放在對角線)。

image-20200614165157169

現在可以用 \({\bf{y^T}}L{\bf{y}}\) 來評估現在得到的label有多平滑,式子里面的\({\bf{y}}\)是label的值,取決於神經網絡的參數。那么如果要把平滑度考慮到神經網絡里時,就是在原來的損失函數里加上\(\lambda S\)\(\lambda\)是某一個想要調的參數)。\(\lambda S\)像一個正則化項,在調整參數時,不只是讓標注數據的output跟真正的label越近越好,同時還要讓output的label在標注數據和未標注數據上符合平滑度假設。平滑度假設由\(S\)衡量。

不一定要在output上計算平滑度,在深度神經網絡里,可以把平滑度計算放在網絡的任何地方。你可以假設你的output是平滑度,也可以把某個隱藏層乘上一些別的transform,它也要平滑,也可以要求每個隱藏層的output都是平滑的。

Better Representation

image-20200614170528097

image-20200614170634844

精神是:

我們觀察到的世界其實是比較復雜的,在背后有一些比較簡單的向量,比較簡單的東西在操控這個復雜的世界。那只要看透假象,直指核心,就可以讓學習變得比較容易。

例如上圖右方剪胡子,胡子的變化是很復雜的,但是胡子受頭操控,頭的變化是有限的。所以胡子是觀測,而頭就是Better Representation。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM