1. 程式人生 > >Multiple Instance Learning

Multiple Instance Learning



///////////////////////////////////////////推薦學習組//////////////////////////////

http://www.robots.ox.ac.uk/~vgg/

////////////////////////////////////////////////////////////////////////////////////////



多示例學習(Multiple Instance Learning)

今天一直在準備組會seminar,是導師點名要我做的報告,一篇有關weakly supervised的論文《Weakly supervised discriminative location and classification: a joint learning process》。讀了第一遍就覺得所謂weakly supervised似乎就是多示例學習換了一個說法而已。再看更多的論文之前,這個結論還有待驗證。不管怎麼說,多示例學習是一個影響深遠的大坑,很多令人印象深刻的重要工作都直接或者間接的應用了多示例的思想。其中我覺得最耀眼的應該是Felzenszwalb大牛的《Object Detection with Discriminatively trained part based models》。在那篇文章裡他把這個模型叫做latent SVM,實際上就是MILSVM的變種。

監督學習 (Supervised Learning)

“學習是透過教授或體驗而獲得知識、技術、態度或價值的過程,從而導致可量度的穩定的行為變化,更準確一點來說是建立新的精神結構或審視過去的精神結構。”                                                                                                                  ————百度百科

 

上面這段話裡,我覺得說的最貼切的地方是“學習需要審視過去”。對於計算機來說,所謂過去就是訓練樣本,機器學習是一個根據訓練樣本得到分類器或者擬合函式的過程。而監督學習意味著每個訓練樣本都有屬於自己的標記。當這個標記代表著分類類別的時候,學習得到的就是分類函式。當這個標記代表著某種連續的取值的時候,學習得到的就是擬合函式。更復雜的,每個標記可以是一個集合,這時候學習得到的是結構化預測函式。

 

很多時候,不是每個訓練樣本都有標記,而是隻有一部分被標記,而另一部分只有資料本身,標記缺失掉了。這時候需要將沒有標記的資料和有標記的資料結合起來進行機器學習,這就是半監督學習。又有的時候,甚至所有的樣本都沒有標記,這就是非監督學習。但是實際上,非監督學習沒法進行目標明確的分類、擬合任務,只能做一些分析性的任務,比如說聚類,PCA,字典學習等等。

 

多示例問題 (Multiple Instance Problem)

我們考慮這樣一種訓練資料,這個資料是有標記的,標記只有兩個類別,正和負。但這一次標記的目標不是一個樣本,而是一個數據包(bag)。某一個或者幾個資料合在一起叫做一個bag,每個bag有自己的標記。當一個bag的標記為負時,這個bag裡面所有樣本的標記都是負的。當一個bag的標記為正時,這個bag裡面至少有一個樣本的標記為正。 我們的目標是學習得到一個分類器,使得對新輸入的樣本,可以給出它的正負標記。這樣的一類問題就是多示例問題。

 

這個問題在實際的應用中非常常見,比如說,方校長建長城的時候,他要列舉一些違禁詞彙不讓大家搜尋,他覺得一個一個輸入太麻煩了,於是可以找來一些黃色或者反動的網站,直接作為正樣本包:網站中的詞彙總有一個是違禁的。然後拿健康向上的人民日報網頁作為負樣本包:裡面的詞彙沒有一個是違禁的。又比如做檢測問題,標記訓練圖片樣本的時候需要給出一個矩形框指明目標的位置,有可能標的不夠準確,導致不同的樣本之間對不齊,這時候可以將標記的矩形框做一些區域性擾動得到一些新的矩形框,將它們一起看成一個bag,其中總有一個是最佳的正樣本,也就是標記為正。而取一張沒有目標的圖片,作為負樣本包:無論在裡面怎麼擷取圖片,都是負樣本。

 

 求解方法

關於多示例問題怎麼求解,假如說所有的樣本標記都已經知道了,那就是一個監督學習的問題了,用SVM,adaboost之類的都可以做。現在的困難是,有很多樣本的標記我們不知道。對於負樣本包來說就無所謂了,裡面每個樣本那都是負標記,這個是明確的。問題出在正樣本包上面,每個正樣本包裡只能保證有一個是正樣本,其他的是正是負就不知道了,關鍵是到底是哪個樣本是正的呢?這個也是不清楚的。

 

解決這個問題的方法其實挺直接的:迭代優化(alternative optimization)。也就是說,我們先假設已經知道了所有樣本的標記,那麼就可以通過某種監督學習的方法得到一個分類模型,通過這個模型我們可以對每個訓練樣本進行預測,然後更新它們的標記,我們又可以拿這一次新得到的標記重新訓練分類模型了。所以整個優化過程分為兩部分:監督學習,標記更新。

 

這裡還有一些地方需要注意:

第一點, 訓練監督學習的模型的時候,只從正樣本包裡挑選被預測的“最像正確”(也就是分類得分最高)的那一個,正樣本包裡面其他的樣本,不管預測出來是正的還是負的都不要了。這是因為,其實多示例的問題也可以描述為,正樣本包裡面“最正確”的一個樣本標記是正的,跟其他樣本無關。所以,這種選擇策略恰恰是符合問題定義的。

第二點,如果負樣本足夠多的話,可以只挑選每個負樣本包裡面被預測“最像正確"的一個樣本作為負樣本進行訓練,這樣子的負樣本也叫做hard sample或者most violated sample。實踐上來說,它們對於模型快速收斂是最有效的。

 

那麼下面給出一個簡單的流程圖:

 

多示例學習:


輸入:資料矩陣X=[x1,x2,,xn], 包標記Y=[Y1,Y2,,Ym],包與樣本的關係I=[I1,I2,,Im]

輸出: 分類函式 f

 

將每個標記包j中的樣本iIj初始化為包的標記yi=Yj,初始化集合U為空,將所有樣本加入樣本集U

重複下面的過程

iU的樣本的資料xi以及標記yi訓練得到一個分類函式f

利用f預測所有樣本的標記yi

清空U

對於每個正標記包,選取f預測得分最高的樣本加入集合U

對於每個負標記包,選取f預測得分最高的樣本加入集合U(或者取較高的某些樣本,也可以取全部樣本都加入U,這取決於負樣本是否充足)

直到滿足結束條件

返回f