影象樣本不夠用?元學習幫你解決
在大多數時候,你是沒有足夠的影象來訓練深度神經網路的。本文將教你如何從小樣本資料快速學習你的模型。
為什麼我們關心小樣本學習?
1980年, Kunihiko Fukushima 提出了第一個 卷積神經網路。從那時起,由於計算能力的不斷提高和機器學習社群的巨大努力,深度學習演算法在與計算機視覺相關的任務上從未停止過提高它們的效能。2015年,何凱明和他在微軟的團隊報告說,他們的模型在對來自 ImageNet 的影象進行分類時表現優於人類。在那時候,有人可能會說,計算機在利用數十億影象來解決特定任務方面變得比我們更強。歡呼!
然而,如果你不是 Google 或者 Facebook,你就不可能總是能夠用這麼多的影象來構建一個資料集。當您從事計算機視覺工作時,有時您必須對每個標籤只有一個或兩個樣本的影象進行分類。在這場比賽中,人類仍將被打敗。給嬰兒看一張大象的照片,從現在起他們永遠不會認不出大象。如果你對 Resnet50 做同樣的事情,你可能會對結果感到失望。從少數的樣本中學習的這個問題,被稱為小樣本學習(few-shot learning)。
近幾年來,小樣本學習的問題引起了研究界的廣泛關注,並形成了許多優雅的解決方案。目前最流行的解決方案是使用元學習(meta-learning),又稱為:learning to learn。如果你想知道它是什麼,以及它是如何用於小樣本影象分類,請繼續閱讀。
極少樣本的分類任務
首先,我們需要定義N個類別,K張圖片(譯者注:針對每個類別)的分類任務。假設以下的場景:
1. 一個支援資料集,包含N個分類標籤,針對每個標籤有K個已分類的圖片。
2. 一個查詢資料集,包含Q張查詢圖片。
任務是利用支援資料集中的N*K個圖片,將查詢資料集中的圖片分類為N個類別(譯者注:可以理解為訓練集有N*K個圖片,將測試集在N個類別進行分類)。當K值很小時(通常K<10),我們稱這種分類任務為極少樣本分類任務(當K=1時,變成單樣本分類任務)
極少樣本分類任務的一個例子:在支援集中,給定N=3(3類),每類K=2,即每種類別兩張圖片,我們希望將查詢集中(查詢集Q=4,即4張查詢圖片)的狗標註為拉普拉多狗,聖伯納德狗或哈巴狗。即使你從未見過任何的哈巴狗、聖伯納德狗或拉普拉多狗,這項任務對你來說也不困難。但使用AI來解決這個問題,我們需要進行一些元學習。
元學習範例
1998年,Thrun和Pratt指出,對於一個指定的任務,一個演算法“ 如果隨著經驗的增長,在該任務上的表現得到改進”,則認為該演算法能夠學習。與此同時,與此同時,對於一族待解決的多個任務,一個演算法“如果隨著經驗和任務數量的增長,在每個任務上的表現得到改進”,則認為該演算法能夠學習如何學習,我們將後者稱為元學習演算法。它不學習如何解決一個特定的問題,但可以成功學習如何解決多個任務。每當它學會解決一個新的任務,它就越有能力解決其他新的任務:它學會如何學習。
如果我們希望解決一項任務T,會在一批訓練任務{Ti}上訓練元學習演算法。演算法在被訓練解決這些任務的過程中得到的經驗將被用於解決最終的任務T。
比如,考慮上個影象中提到的任務T。它的目標是通過使用3x2=6張已標記的同品種狗的圖片,來識別(新的)圖片是屬於拉普拉多狗,聖伯納德狗或哈巴狗。訓練任務{Ti}中的某一項任務Ti可以是通過使用3x2=6的已標記的同品種狗圖片中獲取資訊,將新圖片標記為拳師狗、聖伯納德狗或洛特維勒牧狗。元學習過程就是由一系列這樣的每一次針對不同品種的狗的訓練任務Ti所組成的。我們希望元學習模型“隨著經驗和任務數量的增長”得到不斷地改進。最終,我們在T任務上評估模型。
我們評估了拉布拉多犬、聖伯納德犬和八哥的元學習模型,但我們只是在其他所有品種上進行訓練。
現在我們該怎麼做?假設你想解決任務T(裡面有拉布拉多,聖伯納德和 八哥),那麼你需要一個元訓練資料集,裡面有很多不同品種的狗。 你可以使用 Stanford Dogs 資料集(http://vision.stanford.edu/aditya86/ImageNetDogs),其中包含從ImageNet中提取的超過20k 只狗。我們將把這個資料集命名為D。注意,這個過程不需要包含任何拉布拉多、聖伯納德或八哥。
我們從D中取樣了一批(如下),每集對應於一個 N-way K-shot 分類任務 Tᵢ 類似T(通常我們使用相同的N和K)。 模型解決了每一集(即標記了每一個查詢集的影象)後,它的引數會更新,這通常是通過對查詢集的分類不準確造成的損失進行反向跟蹤來實現的。
這樣,模型就可以跨任務學習準確地解決一個新的、不可見的少鏡頭分類任務。 標準的學習分類演算法學習對映影象→標籤,元學習演算法通常學習對映支援集→c(.),其中c是對映查詢→標籤。
元學習演算法
既然我們知道了演算法元訓練的含義,那麼還有一個謎團:元學習模型是如何解決一個少鏡頭分類任務的?當然,解決方案不止一個。在這裡,我們將關注最受歡迎的方案。
度量學習
度量學習的基本思想是學習資料點(如影象)之間的距離函式。事實證明,它對於解決少樣本分類任務非常有用:度量學習演算法不必在支援集(少量的帶標籤影象)上進行微調,而是通過將查詢影象與帶標籤影象進行比較來對其進行分類。
將查詢影象(在右側)與支援集的每個影象進行比較,它的標籤取決於與其最接近的影象。當然,你不能逐個畫素地比較影象,你要做的是在相關的特徵空間中比較影象。為了清楚起見,讓我們詳細說明度量學習演算法是如何解決少樣本分類任務的(上面定義為帶標籤樣本的支援集,以及我們要分類的查詢影象集):
-
我們從支援集和查詢集的所有影象中提取特徵(通常使用卷積神經網路)。現在,我們在少樣本分類任務中必須考慮的每個影象都由一個一維向量表示。
-
每個查詢影象根據其與支援集影象的距離進行分類。對於距離函式和分類策略,可以有許多可能的設計選擇。例如,歐氏距離和k-最近鄰分類。
-
在元訓練期間,在每一場景(episode)結束時,對由查詢集的分類錯誤產生的損失值(通常是交叉熵損失)進行反向傳播,從而更新CNN的引數。
每年都會提出幾種度量學習演算法來解決少樣本影象分類問題,這其中的兩個原因是:
-
他們憑經驗可以做得很好;
-
唯一的限制就是你的想象力。有很多方法可以提取特性,甚至還有更多方法可以比較這些特性。我們現在將介紹一些現有的解決方案。
匹配網路演算法。對於支援集影象(左)和查詢影象(底部),特徵提取器是不同的。使用餘弦相似性,將查詢的嵌入特徵與支援集中的每個影象進行比較。然後用softmax進行分類。上圖來自 Oriol等。
匹配網路 (見上文)是第一個使用元學習的度量學習演算法。在這個方法中,我們不會以同樣的方式提取支援影象和查詢影象的特徵。來自 Google DeepMind 的Oriol Vinyals和他的團隊有一個想法,即在特徵提取過程中使用 LSTM網路使所有影象互動。他們稱之為完全上下文嵌入,因為你允許網路找到最合適的嵌入,這不僅知道要嵌入的影象,還知道支援集中的所有其他影象。這使得他們的模型比所有的影象都通過一個簡單的CNN時表現得更好,但它也需要更多的時間和更大的GPU。
在最近的工作中,我們不會將查詢影象與支援集中的每個影象進行比較。多倫多大學的研究人員提出了 原型網路。在他們的度量學習演算法中,從影象中提取特徵後,我們為每個類計算一個原型。為此,他們使用類中每個影象嵌入的平均值。(但是你可以想出成千上萬的方法來計算這些嵌入。為了反向傳播,函式只需要是可微的。)一旦計算出原型,就可以計算查詢影象到原型的歐式距離,從而對查詢影象進行分類(見下圖)。
在原型網路中,我們將查詢X標記為與其最接近的原型的標籤。
儘管簡單,但原型網路仍然可以產生最好的結果。更復雜的度量學習架構後來被開發出來,比如 用神經網路來表示距離函式(而不是歐幾里得距離)。這略微提高了準確性,但我相信到目前為止,原型理念在少樣本影象分類的度量學習演算法領域是最有價值的想法(如果你不同意,請留下評論)。
模型無關的元學習
我們將以模型無關的元學習(MAML)結束這篇綜述,MAML是目前最優雅和最有潛力的元學習演算法之一。它基本上是最純粹的元學習形式,通過神經網路進行兩級反向傳播。
該演算法的核心思想是訓練一個神經網路,使其能夠僅用少量樣本就能快速適應新的分類任務。下圖將展示MAML如何在元訓練的一個場景(即,從資料集D中取樣得到的少樣本分類任務Tᵢ)中工作的。假設你有一個用?引數化的神經網路M:
用?引數化的MAML模型的元訓練步驟:
-
建立M的副本(此處命名為f),並用?對其進行初始化(在圖中,?₀=?)。
-
快速微調支援集上的f(只有少量梯度下降)。
-
在查詢集上應用微調過的f。
-
在整個過程中,對分類錯誤造成的損失進行反向傳播,並更新?。
然後,在下一場景中,我們建立一個更新後模型M的副本,我們在新的少樣本分類任務上執行該過程,依此類推。
在元訓練期間,MAML學習初始化引數,這些引數允許模型快速有效地適應新的少樣本任務,其中這個任務有著新的、未知的類別。
公平地說,MAML目前在流行的少樣本影象分類基準測試中的效果不如度量學習演算法。由於訓練分為兩個層次,模型的訓練難度很大,因此超引數搜尋更為複雜。此外,元的反向傳播意味著需要計算梯度的梯度,因此你必須使用近似值來在標準GPU上進行訓練。出於這些原因,你可能更願意在家裡或工作中為你的專案使用度量學習演算法。
但是,模型無關的元學習之所以如此令人興奮,是因為它的模型是不可知的。這意味著它幾乎可以應用於任何神經網路,適用於任何任務。掌握MAML意味著只需少量樣本就能夠訓練任何神經網路以快速適應新的任務。MAML的作者Chelsea Finn和Sergey Levine將其應用於有監督的少樣本分類,監督迴歸和強化學習。但是通過想象和努力研究,你可以用它把任何一個神經網路轉換成少樣本有效的神經網路!
這就是這次在元學習這個令人興奮的世界裡的旅行。少樣本學習最近引起了計算機視覺研究的廣泛關注,因此該領域的發展非常迅速(如果你在2020年閱讀這篇文章,我建議你尋找更新的資訊來源)。誰知道未來幾年,神經網路會變得有多好,是否能一眼就學習到視覺概念?
via https://blog.sicara.com/meta-learning-for-few-shot-computer-vision-1a2655ac0f3a
https://www.leiphone.com/news/201908/CcxzrhOPMEJn4cud.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2654367/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Excel不夠用? Smartbi NLA對話式分析來幫你Excel
- SoundSource5幫你解決音量問題
- 用shell幫助解決ORA問題
- 或許這樣能幫你瞭解 OSI 七層模型模型
- 去中心化預言機ADAMoracle幫你解決?中心化Oracle
- 學習身份證影象識別
- 深度學習之影象簡史深度學習
- ERP系統能夠幫助企業解決什麼問題
- 學習的學習之七—如何應用元知識
- Markdown 怎麼便捷插入圖片?uPic 幫你解決
- PHP遇見Serverless,幫你解決這些痛點PHPServer
- PHP 遇見 Serverless,幫你解決這些痛點!PHPServer
- 影象邊緣檢測—sobel運算元(灰度影象,彩色影象)
- 影象拼接基礎學習筆記筆記
- 【OpenCV學習】影象卷積濾波OpenCV卷積
- 神奇解決NoClassDefFoundError版本不同的問題Error
- 【小白學AI】八種應對樣本不均衡的策略AI
- 通用連線池幫你解決資源管理難題
- 學習分析函式LAG以後,馬上學以致用 幫一網友解決問題.函式
- 重學前端學習筆記(四)--div和span不是夠用嗎?前端筆記
- 想幫助使用者做決定?你的APP可以這樣設計!APP
- python版本不相容怎麼解決Python
- centos7 boot空間不夠用的解決方案CentOSboot
- 解決Few-shot問題的兩大方法:元學習與微調
- SQL 語句寫的爛怎麼辦?我幫你解決?SQL
- 6大自媒體網站,幫你解決靈感枯竭網站
- 企業雲盤幫你解決資料被盜問題
- 你真的瞭解深度學習嗎?深度學習
- [譯] 想幫助使用者做決定?你的APP可以這樣設計!APP
- python學習筆記 - 設定Excel單元格樣式Python筆記Excel
- 深度學習影象演算法在內容安全領域的應用深度學習演算法
- 【數字影象處理】三.MFC實現影象灰度、取樣和量化功能詳解
- 騎驢找馬面試難,你可以這樣解決!面試
- 深度學習之影象超分辨重建技術深度學習
- html5 canvas學習--操作與使用影象HTMLCanvas
- 深度學習影象視訊壓縮技術深度學習
- 同學你的單例,夠面試嗎?單例面試
- 用深度學習解決競爭性編碼問題 | DeepMind深度學習