2019-12-08
總結few-shot learning 泛指從少量標註資料中學習的方法和場景,理想情況下,乙個能進行 few-shot learning 的模型,也能快速地應用到新領域上。few-shot learning 是一種思想,並不指代某個具體的演算法、模型,所以也並沒有乙個通用的、萬能的模型,能僅僅使用少量的資料,就把一切的機器學習問題都解決掉,討論 few-shot learning 時,一般會聚焦到某些特定的問題上,比如 few-shot learning 思想應用到分類問題上時就稱之為 few-shot classification。
在 few-shot classification 裡,問題是這樣的:
上述問題稱之為 n
'>n
n-way k
'>k
k-shot 問題,k
'>k
k 一般較小(10 以下)。特別的,當 k=1
'>k=1
k=1 時稱之為 one-shot,當 k=0
'>k=0
k=0 時稱之為 zero-shot。
本文涉及的**,都是在相同的框架下來解決這個問題的,具體來說,模型 m
'>m
m 具有兩大塊能力
將乙個類別的資料表示為乙個向量,作為這個類的 representation
將乙個輸入和乙個類的 representation 進行比較,判斷兩者的匹配程度
第 1 點的存在,讓其產生的模型能處理任意新的類別,不管你給什麼樣的 support set,它總能產生 n
'>n
n 個向量表示這 n
'>n
n 個類別。
最簡單的辦法是用 train set 進行表示學習,然後對給定的 suppor set,將每個類中的 k 個樣本的向量加和或平均作為類的 representation,待**的資料也編碼成向量和,和這些類的 representation 計算相似或距離就好了。之後可以看到本文中涉及的**,其方法就是這個簡單想法的擴充和改進。
為了盡量和實際使用時接近,few-shot classification 在訓練時引入乙個叫做 episode 的概念,每個 episode 包含從 train set 中取樣出來的一部分資料,以及用這部分資料進行訓練的過程:
模型測試時通常會在乙個和 train set 類別不交叉的標註資料集上進行,稱這個資料集為 test set。測試過程同樣以 episode 為基礎,一般是取樣若干個 episode 計算 query set 的**精度,然後地多個 episode 的結果平均作為整體結果。
看原文吧!!!
這篇 iclr 2019 的**旨在分析現有 few-shot classification 方法的一些問題。
觀點模型和方法
這篇**的目標不是提出乙個新的模型來在 few-shot classification 問題上得到更好的效果,所以在模型部分,只是對乙個簡單的 baseline 模型做了增強得到了 baseline++ 模型,用來在之後和其他模型對比,以論證前面的「baseline 方法效果被顯著低估了」這個觀點。
如上圖所示,baseline 模型由乙個 feature extractor 或者說 encoder 和乙個分類模組組成,作者之所以認為之前的一些工作裡 baseline 模型效果被低估了,是因為之前的一些**,在分類模組這裡,用的是乙個固定的、簡單的距離函式(如余弦距離、歐式距離)。
作者在這裡做了一些改動,包括:
當然,作者在這裡強調,這個 baseline++ 模型並不是他們的貢獻,而是來自於 2018 年的一篇**14
。實驗和結論
作者對比了 matching networks、prototypical networks、relation networks 和乙個 meta learning 的方法 maml 模型。
這個對比圖還是挺直觀的,對於理解不同模型之間的差異挺有幫助。
圖上的 meta-training 和 meta-testing,其實就是指訓練和測試。但是 few-shot classification 的訓練用資料和實際使用是要**的類別原則上是不一樣的,學到的更多的是區分不同類別的能力而不是區分某個指定類別的能力,這個還有監督分類問題是不太一樣的,這裡加個 meta 是和普通的分類模型的訓練、測試進行區分,不用太在意。b
進行了三個實驗:
實驗的通用設定為:
由於作者自己重新實現了用於對比的幾個模型,所以先和原作者**中報告的結果做了對比,如下圖所示:
可以看到作者實現的這幾個模型和它們的原實現的效果相比,大部分是稍差一些,也有些表現更好的。
在 cub 和 miniimagenet 兩個資料集上做實驗時,使用四層 cnn 作為 encoder,實驗結果如下圖所示:
可以看到,baseline++ 模型和這些 sota 的模型相比並沒有很大的差距,甚至在一些情況下比 sota 的模型還要好。baseline++ 模型僅僅是對 baseline 模型的乙個簡單修改,所以作者說 baseline 模型的能力被顯著地低估了。
接著,作者認為 encoder 是很重要的,所以嘗試了將 encoder 替換成更深的網路,結果顯示使用更深的網路後大部分模型的效果都有了顯著的提公升。
第三個實驗 —— 也就是那個先在 miniimagenet 資料集上訓練然後在 cub 資料集上測試的實驗,統一使用更深的 resnet-18 作為 encoder,結果顯示 baseline 模型的效果最好。
由於 cub 資料集都是鳥類的資料,所以訓練與測試時的領域差異性很小;miniimagenet 資料集包含了很多不同類別的物體,所以領域差異性比 cub 要大;當訓練使用 miniimagenet 資料集而測試時使用 cub 時,領域差異性是最大的。同樣使用 resnet-18 作為 encoder 時,三個不同的 5-way 5-shot 實驗對比結果也說明了目前這些 few-shot classification 模型在領域遷移上的問題,如下圖所示:
而之所以 baseline 模型會最好,有可能是因為 baseline 模型進行了 fine tuning,所以作者再進一步實驗,在其他模型上也加上 fine tuning 操作,結果顯示領域差異性大時,fine tuning 是很有必要的,如下圖所示:
few-shot learning 這個概念最早是李飛飛提出來的15
,不過早先的一些工作方法都比較複雜,除了上述我看的一些**外,還有一些從 meta learning 的方向來做的。目前看來,few-shot learning 特別是 few-shot classification 的方法,主要都是在 2016 年 matching networks 提出的框架下使用越來越複雜的模型,比如還有一篇我沒有通讀的微軟的**16
的做法就是使用複雜的 attention 模型,我相信 elmo、bert 等更強大的預訓練模型也會逐步用到這個領域裡。
回到這幾篇**,可以看到 few-shot learning 應用到分類問題上時,能取得一定的成果,但也還是有一些問題或者限制的
train set 中需要有足夠多的類別,雖然每類的資料可以不多 —— 一定要認識清楚這點,不要以為 few-shot learning 就真的只需要很少很少的資料就夠了
領域遷移能力不夠好 —— 當然這是目前幾乎所有模型的問題,但 few-shot learning 本來就想要去解決新類別的學習問題,希望未來能看到在這方面更多的一些討論吧
我個人對於資料稀缺時該如何訓練模型這個話題是很感興趣的,除了 few-shot learning,目前了解到的一些方法還有:資料增強、遠端監督、多工學習。從這幾篇**來看,表示學習也是很重要的一環,乙個表示能力很強的預訓練模型,也會很有幫助。
小樣本學習
眾所周知,深度學習是機器學習發展中乙個非常重要的里程碑,在很多任務上深度學習都取得了巨大的成功。然而,由於深度模型包含的引數很多,通常需要大量的有標籤的資料才能進行模型訓練,這點嚴重地限制了它的應用 在很多場景下,收集大量的有標籤的資料是非常昂貴 困難 甚至不可能的,比如醫療資料 手機上使用者手動標...
小樣本學習 few shot learning
首先需要宣告的是,小樣本學習屬於遷移學習。接著,舉個例子詳細闡述。人類從未見到過 澳大利亞的鴨嘴獸 給我們一張鴨嘴獸的 後,人類就認識了!有的朋友可能會想,為什麼我們人類總是能快速的學習到未知的事物?簡單的說,是因為人類生活中各種知識的積累以及人類天生的思考能力 如 模擬能力 知識的積累意味著我們是...
小樣本點雲深度學習庫 小樣本學習 二
我對小樣本學習的誤解與困惑 我們的 小樣本 真的很小嗎?我們似乎習慣性的拿深度學習的大量資料集訓練,與人類嬰兒做對比。並藉此來嘲諷ai you are not as good as me,you are loser.但,最近的一些不連貫的思考,使我開始反思,我們人類小樣本真的比機器學習與深度學習小嗎...