半監督學習總結
一、總結
一句話總結:
在【有標簽數據+無標簽數據】混合成的訓練數據中使用的機器學習算法吧。一般假設,【無標簽數據比有標簽數據多】,甚至多得多。
其實,半監督學習的方法大都【建立在對數據的某種假設上】,只有滿足這些假設,半監督算法才能有性能的保證,這也是限制了半監督學習應用的一大障礙。
1、半監督學習中無標簽數據一般要求?
雖然訓練數據中含有大量無標簽數據,但其實在很多半監督學習算法中用的訓練數據還有挺多要求的,一般默認的有:【無標簽數據一般是有標簽數據中的某一個類別的】(不要不屬於的,也不要屬於多個類別的);有標簽數據的標簽應該【都是對的】;無標簽數據一般是【類別平衡】的(即每一類的樣本數差不多);【無標簽數據的分布】應該和有標簽的相同或類似 等等。
2、半監督學習算法分類?
1、【self-training】(自訓練算法)、
2、【Graph-based Semi-supervised Learning】(基於圖的半監督算法)、
3、【Semi-supervised supported vector machine】(半監督支持向量機,S3VM)。
3、半監督學習算法:【self-training(自訓練算法)】?
1.【簡單自訓練(simple self-training)】:用有標簽數據【訓練一個分類器】,然后用這個分類器【對無標簽數據進行分類】,這樣就會產生偽標簽(pseudo label)或軟標簽(soft label),挑選你認為分類正確的無標簽樣本(此處應該有一個【挑選准則】),把選出來的無標簽樣本用來訓練分類器。
2.【協同訓練(co-training)】:其實也是 self-training 的一種,但其思想是好的。假設每個數據可以從不同的角度(view)進行分類,不同角度可以訓練出不同的分類器,然后【用這些從【不同角度】訓練出來的分類器對無標簽樣本進行分類】,再選出認為可信的無標簽樣本加入訓練集中。由於這些分類器從不同角度訓練出來的,可以形成一種互補,而提高分類精度;就如同從不同角度可以更好地理解事物一樣。
3.【半監督字典學習】:其實也是 self-training 的一種,【先是用有標簽數據作為字典】,對無標簽數據進行分類,挑選出你認為分類正確的無標簽樣本,【加入字典】中(此時的字典就變成了【半監督字典】了)
4、半監督學習算法:【Graph-based Semi-supervised Learning】(基於圖的半監督算法)?
4.標簽傳播算法(Label Propagation Algorithm):是一種【基於圖的半監督算法】,通過【構造圖結構】(數據點為頂點,點之間的相似性為邊)來【尋找訓練數據中有標簽數據和無標簽數據的關系】。是的,只是訓練數據中,這是一種直推式的半監督算法,即只對訓練集中的無標簽數據進行分類,這其實感覺很像一個有監督分類算法...,但其實並不是,因為其標簽傳播的過程,會流經無標簽數據,即有些無標簽數據的標簽的信息,是從另一些無標簽數據中流過來的,這就用到了無標簽數據之間的聯系
5、半監督學習算法:【Semi-supervised supported vector machine】(半監督支持向量機,S3VM)?
5.半監督支持向量機:監督支持向量機是利用了【結構風險最小化】來分類的,半監督支持向量機還用上了無標簽數據的空間分布信息,即【決策超平面應該與無標簽數據的分布一致】(應該經過無標簽數據密度低的地方)(這其實是一種假設,不滿足的話這種無標簽數據的空間分布信息會誤導決策超平面,導致性能比只用有標簽數據時還差)
6、半監督深度學習?
大概就是,在【有標簽數據+無標簽數據混合成的訓練數據】中使用的【深度學習算法】吧
半監督深度學習算法個人總結為三類:無標簽數據預訓練網絡后【有標簽數據微調】(fine-tune);有標簽數據訓練網絡,利用從網絡中得到的【深度特征來做半監督算法】;讓網絡 【work in semi-supervised fashion】。
7、半監督深度學習:1.【無標簽數據預訓練,有標簽數據微調】?
對於神經網絡來說,一個好的初始化可以使得結果更穩定,迭代次數更少。因此如何利用無標簽數據【讓網絡有一個好的初始化】就成為一個研究點了。
8、半監督深度學習:2.【利用從網絡得到的深度特征來做半監督算法】?
神經網絡不是需要有標簽數據嗎?我給你【造一些有標簽數據】出來!這就是第二類的思想了,相當於一種間接的 self-training 吧。一般流程是:
【先用有標簽數據訓練網絡】(此時網絡一般過擬合...),從該網絡中提取所有數據的特征,以這些特征來用【某種分類算法】對無標簽數據進行分類,【挑選你認為分類正確的無標簽數據】加入到訓練集,再訓練網絡;如此循環。
由於網絡得到新的數據(挑選出來分類后的無標簽數據)會【更新提升,使得后續提出來的特征更好】,后面對無標簽數據分類就更精確,挑選后加入到訓練集中又繼續提升網絡,感覺想法很好,但總有哪里不對...orz
個人猜測這個想法不能很好地 work 的原因可能是噪聲,你挑選加入到訓練無標簽數據一般都帶有【標簽噪聲】(就是某些無標簽數據被分類錯誤),這種噪聲會誤導網絡且被網絡學習記憶。
9、半監督深度學習:3.【讓網絡 work in semi-supervised fashion】?
前面的1.和2.雖然是都用了有標簽數據和無標簽數據,但就神經網絡本身而言,其實還是【運行在一種有監督的方式上】。
哪能不能讓深度學習真正地成為一種半監督算法呢,當然是可以啊。譬如下面這些方法:【Pseudo-Label】 : The Simple and Efficient Semi-Supervised Learning Method for Deep Neural Networks,這是一篇發表在 ICML 2013 的文章,是一個相當簡單的讓網絡 work in semi-supervised fashion 的方法。【就是把網絡對無標簽數據的預測,作為無標簽數據的標簽(即 Pseudo label),用來對網絡進行訓練】,其思想就是一種【簡單自訓練】。但方法雖然簡單,但是效果很好,比單純用有標簽數據有不少的提升
網絡使用的代價函數如下:$$L = \sum _ { m = 1 } ^ { n } \sum _ { i = 1 } ^ { C } L ( y _ { i } ^ { m } , f _ { i } ^ { m } ) + \alpha ( t ) \sum _ { m = 1 } ^ { n ^ { \prime } } \sum _ { i = 1 } ^ { C } L ( y _ { i } ^ { \prime m } , f _ { i } ^ { \prime m } )$$,代價函數的前面是有標簽數據的代價,后面的無標簽數據的代價,在無標簽數據的代價中,【y'無標簽數據的 pseudo label】,是直接取網絡對無標簽數據的預測的最大值為標簽。
雖然思想簡單,但是還是有些東西需要注意的,就是這個α(t),其決定着無標簽數據的代價在網絡更新的作用,【選擇合適的α(t)很重要】,太大性能退化,太小提升有限。在網絡初始時,網絡的預測時不太准確的,因此生成的 pseudo label 的准確性也不高。在初始訓練時,【α(t)要設為 0,然后再慢慢增加】,論文中給出其增長函數。在后面的介紹中,有兩篇論文都使用了一種高斯型的爬升函數。
二、半監督學習總結
轉自或參考:半監督深度學習小結 - 知乎
https://zhuanlan.zhihu.com/p/33196506