小樣本學習 few shot learning

2021-09-23 11:28:56 字數 2973 閱讀 3626

首先需要宣告的是,小樣本學習屬於遷移學習。接著,舉個例子詳細闡述。

人類從未見到過「澳大利亞的鴨嘴獸」,給我們一張鴨嘴獸的**後,人類就認識了!

有的朋友可能會想,為什麼我們人類總是能快速的學習到未知的事物?簡單的說,是因為人類生活中各種知識的積累以及人類天生的思考能力(如:模擬能力)。知識的積累意味著我們是存在各種知識的先驗的,天生的思考能力意味著我們擁有強大的模擬能力、強大的大腦算力。

以「人類從未見到過「澳大利亞的鴨嘴獸」,給我們一張鴨嘴獸的**後,人類就認識了!」這句話為例。鴨嘴獸就代表未知的事物(new class),而我們生活中已經見到過的鴨子、狸貓、魚等動物就代表知識的先驗,我們把這種知識的先驗稱為 元知識 (meta knowledge),我們大腦的能快速的把從未見過的鴨嘴獸與這些元知識快速的模擬(可能還存在一些其他腦力活動,如視覺提取物體的特徵),得出結論:這個長得像鴨子嘴,還能像魚一樣游泳、身形扁扁的新動物就是鴨嘴獸。

這裡有的朋友可能會疑問了,如果你是乙個剛學會走路的孩子,什麼都沒見過,是否還存在這種快速的樣本學習能力呢?可以這麼想,人生來都是初始化的,裝備全靠打,iq 高的元知識積累的就快,iq 低的元知識積累的就慢。

機器學習目前都是模擬人類的智慧型來做的,那麼對應我們的機器模型,few-shot learning 又是怎麼樣的呢?

對應我們的機器模型,few-shot learning 的核心任務可以當成識別新的類。例如:我們已經通過些許動物(狗除外)的樣本訓練出來了模型,我們想讓模型識別新的類-----狗。顯然,這就是要把源知識(source)遷移到包含狗的知識領域來(target)。顯然這正是遷移學習的範疇。這時候我們需要識別新的類------狗,比較簡單的解決方案是什麼呢?絕大部分同學會想到,把源模型當做預訓練模型,修改全連線層,進行 fine-tune。需要注意的是:

源模型是需要大量帶 label 的樣本訓練的,一般的如 imagenet上預訓練模型

fine-tune 也是需要樣本量的支援的,不然 retrain 全連線層時很容易過擬合。

fine-tune 本質還是依賴深度學習 big data 餵餐的策略,彷彿與我們的小樣本學習背道而馳。

我們來看看真正的 few shot 吧~

為了完成識別新類(狗)的問題,於是需要新來一張標好 label 的樣本(如 :有 label,樣本是田園土狗, 稱作 sample set 或 support set)用來泛化模型,那麼再來 test 樣本時候(如:無 label,樣本是哈士奇,稱作 query set 或者 test set),我們就可以把這個 哈士奇的樣本 label 標出來,達到分類的目的。這種學習叫做 one-shot learning,即單樣本學習。

注意:我這裡舉得例子,各品種狗的 label 都是 dog,不單獨區分細粒度。

同樣的,如果剛才來的是一堆標好 label 的樣本(除了田園土狗,可能還有京巴、吉娃娃、泰迪等做 support set),這種學習叫做 few-shot learning,即小樣本學習,一般 few 不會大於 20。

經過我上邊的介紹,可以對小樣本學習做個定義:

自己的話解釋一下就是: 模型只有少量的有 label 的訓練樣本 s ,s 中包括 n 個樣本,yi 代表各樣本的 label。因為測試樣本集中每個樣本都有乙個正確的類別,我們希望,再來新的待分類的測試樣本 x』 時候,正確**出 x' 標籤是 y'。

注: 把每個類別 yi 的單個樣本換成 k個樣本就 變成了k-shot learning , few-shot 一般指的是 k 不超過 20。

解決小樣本問題的一種模型(孿生網路)

如下圖簡單理解一下小樣本的訓練方式:

訓練和測試過程是相似的,拿 omniglot 資料集為例。

此資料集可以認為是小樣本學習的乙個基準資料集。

它一共包含1623 類手寫體,每一類中包含20 個樣本。其中這 1623 個手寫體類來自 50 個不同地區(或文明)的 alphabets,如:latin 文明包含 26 個alphabets,greek 包含 24 個alphabets。

一般用於訓練的是 964 類(30個地區的字母),用於測試的是 659 類 (20個地區的字母)。

訓練的目的就是,用 964 個類來訓練模型,識別 659 個新的類。

如下圖的 24個 希臘字母,代表 greek 文明下的 24 個類,每個字母只有 20 個樣本。

每次 iteration 從 964 個類中隨機的選擇 20 個類,從每個類中的 20 個樣本取樣 5 個作為 support set,5 個 作為 query set。(選擇的這個數目可以自行改變)。

以孿生網路為例,就是 query set 中的不斷的於 support set 的成對組合,訓練模型,確定模型引數。

testing:

測試過程,對 659 個類中隨機選擇 m 個類,每個類提供 k 個樣本作為 support set 來泛化模型。稱為 m-way k-shot。

以孿生網路為例,在 m 個類中,若 support set 每類都為單樣本(即 m 個樣本),送進來的 query set ( 同樣的是 m 個類 )不斷的與 support set 成對相似度量,若相似,則歸於該類。

關於其他的**一些方法,如 prototypical networks 可以參照該大神部落格

最後,說明一點是,omniglot 資料集的 分類 baseline 都在 99%+了,但是對如 miniimagenet 這種資料集上分類效果還是比較差的。博主以後還會繼續關注,該領域的一些**,及時的整理 最新的 *****。

小樣本學習

眾所周知,深度學習是機器學習發展中乙個非常重要的里程碑,在很多任務上深度學習都取得了巨大的成功。然而,由於深度模型包含的引數很多,通常需要大量的有標籤的資料才能進行模型訓練,這點嚴重地限制了它的應用 在很多場景下,收集大量的有標籤的資料是非常昂貴 困難 甚至不可能的,比如醫療資料 手機上使用者手動標...

小樣本點雲深度學習庫 小樣本學習 二

我對小樣本學習的誤解與困惑 我們的 小樣本 真的很小嗎?我們似乎習慣性的拿深度學習的大量資料集訓練,與人類嬰兒做對比。並藉此來嘲諷ai you are not as good as me,you are loser.但,最近的一些不連貫的思考,使我開始反思,我們人類小樣本真的比機器學習與深度學習小嗎...

小樣本學習 元學習

自深度學習發展起來之後,智慧型化的各種裝置也慢慢變多,但是對於智慧型化的程式來說,需要數以萬計甚至百萬千萬的資料行進訓練,以近年來最為出名的alphago為例,雖然下棋的是一台電腦,但其後台需要龐大的資料支援訓練才能達到這樣的效果。所以這也是深度學習的乙個短板,訓練資料需要太多,但有時一些訓練任務並...