zero-shot learning

Zero-shot Learning

參考文獻《Zero-Shot Learning with Semantic Output Codes》

背景

在分類問題中,因爲數據庫大小有限,因此在使用分類模型進行預測時,出現了在訓練集沒有出現過的類別。舉個例子,我們有個小型數據庫,裏面所含的類別只有人、鳥、汽車,經過我們的訓練,發現模型對於這些類別的目標已經有很好的性能了,但是突然出現了一個新的類別——狗,此時模型並不認識這個類別,這也就意味着模型肯定沒法對這個新的類別進行新的分類。
這個問題就是一個典型的因訓練樣本不足而導致的模型出現欠缺的問題,那麼該如何緩解這種問題呢?最簡單直接的方法就是大量的增加樣本,讓模型學習更多的類別,但是如果我採集一張新的類別樣本的成本太高,或者幾乎沒法採集到某些類別的樣本,此時該怎麼辦?也就是說如何在數據庫有限的情況下,讓模型竟可能的容忍新的類別,或者訓練集中沒有出現過的樣本?
上述問題就是一個典型的zero-shot learning問題,zero-shot learning的根本目的就是解決這種類別從未出現在訓練集中的情況。

one-shot learning方法

西方諺語中有這麼一句話:一隻鳥,長得像鴨子,叫聲像鴨子,走路也像鴨子,那它就是鴨子!
one-shot learning的想法就很類似於上述思想。傳統的類別標籤中,人的類別標籤就是人,鳥的類別標籤就是鳥,或者用更加符合編程的場景來描述,人的標籤是1,鳥的標籤是2,這些標籤本身並不具有很強的描述意義,僅僅是一個符號而已。如果我們不用上面這些符合標籤,而採用一些具有語義信息的描述標籤,比如我們描述人時,我們不說這是人,我們說這個物體是一種動物,直立行走,食肉,沒有尾巴。。。。。通過這些語義描述,我們可以對人這一類別進行屬性描述,當語義信息足夠多時,那麼人這一類別也就會變得獨一無二。通過訓練就可以將這些屬性列表與人相對應。
同理,當出現了新的物體是,雖然我們不知道這些物體是什麼,但是我們可以通過上述的屬性描述對這一新的物體進行描述,從而避免了無法識別新類別的尷尬情況。

在《Zero-Shot Learning with Semantic Output Codes》中,其將zero-shot learning的形式分爲了一下三個部分:

1、語義特徵空間

所謂語義特徵空間,就是對目標進行一定的語義描述,語義特徵空間中是一些語義特徵描述向量,假設語義特徵空間中一共有5個描述向量,比如是否有毛?是否有尾巴?能不能在水呼吸?是否食肉?是否移動緩慢?那麼對於狗狗這種動物而言,其語義描述子就是一個5維向量,即{1,1,0,1,0}

2、語義知識庫

所謂語義知識庫就是就是目標的語義描述和目標標籤的組合。每個目標都有自己的語義描述向量,類似於上文中狗狗的向量{1,1,0,1,0} ,同時狗狗還有自己的類別標籤,這樣一個組語義描述向量和屬性標籤就是當前動物的知識庫。

3、語義輸出編碼分類器

所謂語義輸出編碼分類器就是從最遠的目標圖像到目標屬性標籤的映射,也就是我們分類問題中所謂的分類器,其作用是對輸入目標進行判斷,得到其屬性標籤。這裏之所以稱之爲語義輸出編碼分類器是因爲其結構與語義特徵空間相掛鉤。定義個所以輸出編碼分類器H:XdY 代表將d維的原始輸入空間的數據Xd 映射成一個數據標籤集Y 的標籤,這裏的H 由兩個函數組成,如下:

H=L(S())S:XdFpL:FpY

上述的這個模型就是一個zero-shot classifier,其首先將原始的d維輸入映射到p維的語義特徵空間,比如我們將原始的狗狗的圖片,映射成如上面描述的語義特徵空間,讓他變成一個5維的描述向量。最後再從語義特徵空間映射到樣本的標籤。

下圖是一個關於熊和狗的語義特徵空間描述,以及語義輸出編碼分類器的預測結果,觀察發現預測結果還是很不錯的。



Tips:
具體的可以參看原文《Zero-Shot Learning with Semantic Output Codes》

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