iT邦幫忙

2021 iThome 鐵人賽

DAY 24
0
AI & Data

30天搞懂機器學習是否搞錯了什麼系列 第 24

【Day 24】半監督式學習(Semi-supervised Learning)(上)

  • 分享至 

  • xImage
  •  

我們知道監督式學習(Supervised Learning)就是有一堆Label好的訓練資料,而半監督式學習是我們有一組Label好的訓練資料,另外還有一組Unlabel的訓練資料,並且Unlabel的資料遠大於Label的資料。

半監督式學習可以分成兩種:Transductive Learning以及Inductive Learning。在做Transductive Learning的時候,你的Unlabeled data就是你的測試資料,而Inductive Learning就是我們不考慮測試資料,也就是我們不知道測試資料是什麼。

為什麼叫做半監督式學習呢?因為很多人會說我們沒有data,但其實我們不會沒有data,我們只是缺少有Label的data,所以半監督式學習如果可以利用這些Unlabel的data來做某些事的話,會是很有價值的。

生成模型(Generative Model)

Supervised Generative Model

監督式學習的生成模型在分類(Classification)(上)有講過了,在監督式學習裡面,你有一堆訓練資料,你知道他們分別是屬於class 1還是class 2,然後你會去估測class 1和class 2的事前機率(Prior probability) https://chart.googleapis.com/chart?cht=tx&chl=P(C_1)%2C%20P(C_2),接著你會去估測 https://chart.googleapis.com/chart?cht=tx&chl=P(x%7CC_1)%2C%20P(x%7CC_2)。假設每一個class的分佈都是Gaussian distribution的話,那你會估測這個class 1是從mean是 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E1,covariance是 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma 的Gaussian估測出來的,而這個class 2是從mean是 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E2,covariance也是 https://chart.googleapis.com/chart?cht=tx&chl=%5CSigma 的Gaussian估測出來的。有了這些你就可以估測新的data是屬於class 1的機率,那你會決定一個boundary的位置,就可以完成分類。

Semi-supervised Generative Model

而如果給了我們一些Unlable的data,它就會影響你的決定,假設下圖中綠色的點是Unlabeled data,那如果你的mean和variance是 https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E1%2C%20%5Cmu%5E2%2C%20%5CSigma 顯然很不合理,應該要是虛線所畫出來的樣子,而prior也會受到影響,舉例來說,我們本來覺得這兩個Labeled data是一樣多的,但看了這些Unlabeled data以後,你或許會覺得class 2的data其實是比較多的,它的Prior probability應該是比較大的。

  • 步驟一:計算每一筆Unlabeled data的事後機率(Posterior probability)。
    • https://chart.googleapis.com/chart?cht=tx&chl=P_%7B%5Ctheta%7D(C_1%7Cx%5Eu)
  • 步驟二:更新model。
    • https://chart.googleapis.com/chart?cht=tx&chl=P(C_1)%20%3D%20%5Cfrac%7BN_1%20%2B%20%5Csum_%7Bx%5Eu%7DP(C_1%7Cx%5Eu)%7D%7BN%7Dhttps://chart.googleapis.com/chart?cht=tx&chl=N 是所有的example,https://chart.googleapis.com/chart?cht=tx&chl=N_1 是被標記為class 1的example,在不考慮Unlabeled data的情況下,直覺就是 https://chart.googleapis.com/chart?cht=tx&chl=P(C_1)%20%3D%20%5Cfrac%7BN_1%7D%7BN%7D,而考慮了Unlabeled data,https://chart.googleapis.com/chart?cht=tx&chl=C_1 出現的次數就會是所有Unlabeled data它是 https://chart.googleapis.com/chart?cht=tx&chl=C_1 的事後機率的總和。
    • https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E1%20%3D%20%5Cfrac%201%20%7BN_1%7D%20%5Cdisplaystyle%20%5Csum_%7Bx%5Er%20%5Cin%20C_1%7D%20x%5Er%20%2B%20%5Cfrac%201%20%7B%5Csum_%7Bx%5Eu%7DP(C_1%7Cx%5Eu)%7D%20%5Cdisplaystyle%20%5Csum_%7Bx%5Eu%7D%20P(C_1%7Cx%5Eu)x%5Eu,在不考慮Unlabeled data的情況下,https://chart.googleapis.com/chart?cht=tx&chl=%5Cmu%5E1 就是把所有屬於 https://chart.googleapis.com/chart?cht=tx&chl=C_1 的labeled data都平均起來,而加上Unlabeled data之後,就是把Unlabeled data的每一筆data https://chart.googleapis.com/chart?cht=tx&chl=x%5Eu,根據它的事後機率做weighted sum。
  • 步驟三:回到步驟一,有了新的model之後,機率會不一樣,機率不一樣在步驟二model算出來就會不一樣,就一直反覆的做下去。

Low-density Separation

Low-density Separation意思就是在兩個class之間有一個很明顯的鴻溝,也就是在這兩個class的交界處的density是低的,幾乎不會有data。

Self-training

Self-training是Low-density Separation最具代表性、最簡單的方法,假設我們有一些Labeled data和Unlabeled data,接下來訓練一個model https://chart.googleapis.com/chart?cht=tx&chl=f%5E*,根據 https://chart.googleapis.com/chart?cht=tx&chl=f%5E* 去Label你的Unlabeled data,就是把 https://chart.googleapis.com/chart?cht=tx&chl=x%5Eu 丟進去 https://chart.googleapis.com/chart?cht=tx&chl=f%5E* 看輸出 https://chart.googleapis.com/chart?cht=tx&chl=y%5Eu 是什麼,就是你的Labeled data,這件事我們稱之為Pseudo-label。再來你要從你的Unlabeled data set裡面拿出一些data加進去Labeled data裡面,而得到更多Labeled data之後,就可以再回去訓練你的model。

Hard label vs Soft label

Self-training很像是前面提到的Generative Model裡面用的方法,唯一的差別是在Self-training你用的是Hard lebel,在Generative Model用的是Soft label。在Self-training我們會強制assign一筆訓練資料一定是屬於某一個class,但是在Generative Model我們是根據它的事後機率,可能有一部分屬於class 1,有一部分屬於class 2。

假設我們用的是Neural Network,你從你的Labeled data得到一組Network的參數 https://chart.googleapis.com/chart?cht=tx&chl=%5Ctheta%5E*,現在你有一筆Unlabeled data https://chart.googleapis.com/chart?cht=tx&chl=x%5Eu,根據 https://chart.googleapis.com/chart?cht=tx&chl=%5Ctheta%5E* 把它分成兩類,如果是Hard label就直接把它Label成class 1,而如果是Soft label,就會說是70%屬於class 1,30%屬於class 2。

Entropy-based Regularization

它是Self-training的進階版。Entropy-based Regularization是如果你用Neural Network,你的輸出會是一個distribution,這個distribution一定要很集中,如果分佈很平均就不符合Low-density Separation的假設。

於是我們就可以透過Entropy來計算這個distribution是集中還是分散,當Entropy越小,就代表越集中,而根據這個假設就可以重新設計Loss function。


參考資料

李宏毅老師 - ML Lecture 12


上一篇
【Day 23】深度學習實作 --- "Hello world"
下一篇
【Day 25】半監督式學習(Semi-supervised Learning)(下)
系列文
30天搞懂機器學習是否搞錯了什麼30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言