昨天最後提到Target data和Source data都是labeled data的情況,今天我會繼續介紹完剩下三種。
首先是Target data是unlabeled,Source data是labeled的情況。
在Source data有function的輸入和輸出,但在Target data只有function的輸入,沒有function的輸出。所以我們可以把Source data當作是訓練資料,Target data當作是測試資料,但問題是這兩筆資料是非常的mismatch。
如果把一個Neural Network當作是一個feature的extractor,我們知道Neural Network的前幾層是在抽feature,後面幾層是在做classification,那我們把feature拿出來看會發現,在做feature extraction的時候,原來Source domain的圖片和Target domain的圖片抽出來的feature完全不一樣,所以後面的classifier雖然可以把藍色的部分做好,但紅色的部分就沒辦法。
所以我們希望前面的feature extractor可以把domain的特性去除掉,也就是說feature extractor的輸出不應該是紅色跟藍色的點分成兩群,而是要混在一起,那我們就可以使用Domain-adversarial training。
它的作法是把feature extractor的輸出丟給一個domain的classifier,而這個domain classifier要做的是判斷feature extractor給它的feature是來自哪個domain。
而因為feature extractor可以輕易的騙過domain classifier,所以必須要增加它的難度,它不只要騙過domain classifier,還同時要讓label predictor做得好,這個label predictor就是給它feature extractor的輸出,以手寫辨識為例,它就會輸出十個class。
在Zero-shot learning裡面,它的訓練資料和測試資料的Task是不一樣的。舉例來說,在影像上面你的Source data可能是貓跟狗,但是你的Target data裡面是草泥馬,而Source data裡面完全沒有草泥馬。
這個task在語音上很早就有解決方法了,假如我們把不同的word都當作一個詞彙,但本來在訓練或測試的時候就有可能看到不同的詞彙,所以在語音上面的作法是,不要直接辨識一段聲音屬於哪一個word,而是辨識一段聲音是屬於哪一個phoneme,接著再做一個phoneme跟table之間對應關係的表,這個表我們稱之為lexicon,也就是辭典,所以我們辨識出phoneme之後就可以透過查表找到對應的word。
在影像上,我們可以把每一個class,用它的attribute來表示,也就是說,你有一個database,database裡面有所有不同可能的object跟它的特性,假設現在要辨識動物,這個database可以告訴你每一種動物有什麼樣的特性,所以attribute要定的夠豐富,每一個calss都要有獨一無二的attribute。
接著在訓練的時候,我們不直接辨識每一張圖片是屬於哪一個class,而是去辨識每一張圖片裡面具備什麼樣的attribute。
那在測試的時候,就算來了一張沒有看過的圖片,它也只需要辨識它具有那些attribute,然後我們就可以透過查表看哪一種動物的attribute跟model的輸出最接近。
有時候attribute可能非常複雜,我們就可以做attribute的embedding,也就是說現在有一個embedding sapce,接著把訓練資料裡的每一張圖片和所有的attribute都透過transform把它變成embedding space上面的一個點,其中 g 和 f 都可以是Neural Network,那我們訓練的時候就會希望 g 和 f 越接近越好,而在測試的時候就去看它的attribute做embedding以後跟哪一個attribute最像。
這是一個更簡單的Zero-shot learning的方法,假設我們有一個現成的語音辨識系統,跟一個現成的word vector,那我們就可以把一張圖丟進Neural Network裡面,而它覺得有0.5的機率是lion,有0.5的機率是tiger,接下來再去找lion跟tiger的word vector,然後把lion跟tiger的word vector用1:1的比例混合得到一個新的vector,最後再去看哪一個word vector跟混和的結果最接近。
最後要講的兩種情況是Source data都沒有label的情況下,Target data有label跟沒有label的情況,分別是Self-taught learning和Self-taught Clustering。
Self-taught learning跟一般的semi-supervised learning是不太一樣的,一般的semi-supervised learning會假設那些unlabeled data還是至少還是跟labeled data比較有關係,但Self-taught learning裡面,Source data跟Target data的關係是比較遠的。
Self-taught learning的概念其實很簡單,假設Source data夠多,雖然是unlabeled,我就可以去訓練一個feature extractor,接著用這個feature extractor在Target data上面去抽feature。