小資料系列二-Metric-based Meta Learning前篇

Shu-Yu Huang
Taiwan AI Academy
Published in
13 min readDec 21, 2021

傳統NN的輸出類似機率分布,例如Fig.1,給予一個人臉圖片,訓練NN去output高興/難過/疑慮的值,這些值透過softmax會加起來等於1,並且可以藉由找出哪個值最大來做預測。

Fig.1 DNN輸出方式類似機率

在適當超參數且經過很多資料的訓練後,預測的準確度會因為神經網路能擷取到每種類別的不同變化而有效的提升。然而在一些情況,有標註的資料有可能不夠多(參考小資料初篇文章)或者有嚴重不平衡的情況,導致最後模型準確度無法提升,形成under-fitting或over-fitting的情況。上回我們簡介了小資料系列,說到在設計角度上分成三種方案解決資料不足的問題:針對資料做擴增、針對訓練目標做簡化、針對訓練過程做優化。而Metric based的方法就是在透過只學習資料比較來簡化訓練目標。

Metric Learning概念

跟傳統預測方法不同,Metric Learning的核心概念是讓神經網路學習比較query資料(待預測資料)與source資料(類別代表資料)之間的異同:拿掉output層而只透過計算query資料與source資料的某種距離或相似度,然後學習讓同類別資料距離近(相似度高)、不同類別資料距離遠(相似度低)。這個計算出來的距離或相似度稱為metric(度量、尺度),所以才叫Metric Learning。可以使用Euclidient Distance, Manhattan distance等等計算幾何距離的方式;或者使用Cosine Similarity, Pearson Correlation 等等計算相似度的方式。唯一要注意的是兩者用法會反過來。以下為簡化表述,我們會統一用距離做範例。

只要這個模型能擷取必要的特徵,並且學會比較樣本,那樣新的資料只要每個類別拿至少一個過來當source對比,就能預測,因此可以適用於小資料的情況。如Fig.2所示,如果我知道一張query照片跟高興表情距離近、跟難過的表情距離較遠,我就可以預測這張照片的表情是高興的。

Fig.2 透過與各一張照片的一維特徵距離推斷屬於兩種情緒哪一種

如Fig.2所示,我們剛剛是在1維空間中計算距離。但是如果有三種表情在這個空間中要擺放時,彼此之間的關係就很容易錯亂。例如Fig.3所示,我們有一個特徵是嘴巴張開程度的大小,一開始只有高興跟難過兩種表情的情況下我可以使用距離完成預測,但是現在要是將懷疑的表情加入選項,卻會有問題。如果懷疑的表情若是放在圖中A處,會代表難過跟懷疑相近;但若是放在圖中B處,會代表懷疑跟高興與難過的距離相等。而且另外這三個表情的距離永遠不可能等距,永遠會有兩者相近,並且最左邊跟最右邊的兩者距離最遠,這樣要是要訓練的多個類別間彼此是獨立的,便會造成錯誤的解讀。

Fig.3 用一維特徵來區分三種情緒

要是有兩個維度便能解決剛剛的問題,如Fig.4 上的query的照片照樣可以透過比較與三者之間距離來推斷是什麼表情,並且三個表情之間的距離是相等的。因此我們也可以知道拿來比較的維度越高,越容易保持更多的類別的獨立性。

Fig.4 用二維特徵來表達表情三種情緒

那神經網路在運算中的hidden layer輸出的channel常常見到都會有32維、64維等等,維度都很高,有D個維度就代表有D種特徵在這層被計算出來。那樣把不同的資料丟進同一個網路中,就可以比較同一層間的距離或相似度進行分類(如Fig.5 所示),例如選擇距離最接近照片的類別為預測類別。

Fig.5 用網路隱藏層間距離預測類別

Latent Space & Embedding Function

剛剛說的神經網路hidden layer的輸出稱為latent vector(隱向量)有時有不同的稱呼,像embedded variable、representation等等,並且若是處理圖像時每層的每個channel變成二維分布,則是我們熟悉的feature map 。latent vector分布的空間叫做latent space(隱空間)。神經網路可以說是在萃取特徵同時進行一種資料壓縮,可以將向圖片、訊號之類的高維輸入資料壓縮成代表數種特徵的值。Metric-based learning這個領域跟variational auto-encoder或GAN的領域一樣常常會用到embedding這個詞來形容神經網路把input data做特徵萃取這件事,那模型中做特徵萃取或者說將輸入資料做編碼的部分就是在做embedding,像是word imbedding, image imbedding之類的。

如Fig.6所示,CNN網路中每一層的特徵值都代表萃取某個特定特徵的量:第一個layers的某個channel值可能代表擷取各種線條的量、第三個layers的某個channel值可能代表萃取車輪或金魚眼的量、第十個layers的某個channel值可能代表萃取鳥喙或電視的量,等等...。越後面的特徵值代表的圖形越複雜,以至於可以做更多類別或更精緻的分類。Latent vector可以embed各種不同特徵的存在量:像是是否出現輪胎、耳朵的大小等等,但每個channel不一定都是獨立的。

Fig.6 CNN特徵張量值代表的圖像特徵

Transfer Learning利用embedding的特性,把model分成embedding model跟output layer兩部分。然後在一個有很多類別、很多資料的database上訓練過超多類別的source task(來源任務)來學習特徵萃取(然後換掉output layer並把這個特徵萃取能力transfer到target task(目標任務)上。像是IMAGENET資料集含有有150,000張共1000類別的圖片,分類IMAGENET圖片就適合被拿來做source task。

例如Fig.7 所示,我們模型中有embedding function ‘f(·)’還有output layer ‘h(·)’這兩個部分,以IMAGENET作為source task來訓練1000類分類任務,在訓練過程中,模型就會學到分類超級多類圖片要萃取的超級多特徵。

Fig.7 以IMAGENET分類訓練作為source task,其中f(·)為embedding function, h(·)為output layer

在學會超級多特徵後,這個模型就可以被transfer到target task上,例如表情辨識,如Fig.8所示,雖然target task中的資料和類別都跟IMAGENET不一樣,但是由於已經在IMAGENET中學到一堆特徵,那這些特徵的擷取就可以沿用到食品辨識上,只要訓練好最後不一樣的輸出層'h1'就可以學好這個任務。不過Transfer Learning就還是要有足夠且平衡資料才能訓練一個新的輸出層。

Fig.8 使用各種表情圖片訓練表情辨識,其中f(·)為embedding function, output layer h1(·)與前述h(·)不同

Metric-based Meta Learning使用Embedding function方式

相對的,Metric-based Meta Learning的作法是把已知類別的照片每個類別取至少一張當supports放進embedding function中做出latent vectors,拿來與要判別類別的query照片做比較作出相似與否或者分類的判別,如Fig.9所示。

Fig.9 Metric Learning使用embedding function f(·)的方式

Metric based使用的Embedding function的大致上分為task-invariant , task-specific, hybrid這三種,見Fig.10

Task-invariant最簡單,就是只透過source tasks訓練,相信自己建立了一個無論何種target task都共用的embedding function。然後如Fig.10-左 所示,這個function被拿來做target task中跟將query跟各種support算metric來預測。這樣不做fine-tune訓練可以節省時間和計算成本,但是要是source tasks跟target task差很多的話預測就不精準。

那task specific model,就是專門為特定target task去fine-tune原本在source tasks訓練好的embedding function,或者重新訓練embedding function。如Fig.10-中 所示可能query跟support也可以用不同的embedding function (g(·)跟g’(·)),但是所產生的latent vector仍處於同一個latent space,可計算metric。順帶一提,這個不同甚至可以是輸入資料型態的不同,例如一個是文字的embedding一個是圖片的embedding,這使得很多跨輸入資料型態的應用可以被發展出來(e.g. 文搜圖、為圖片下標等等)。

最後Hybrid這個類型,如Fig.10-右 所示,就是在support使用預訓練好的embedding function 但是在query是訓練一個新embedding function 來做embedding,並且這個新的embdeeing function還要將support embedding 納為input。這樣每個target task會有一部分task-invariant的embedding function,也有一部分task-specific的embedding function,而且這個task-specific的部分只要稍微fine-tune一下source task跟target task有差別的地方就好了,算是一種殘差學習。

Fig.10 左:任務共通的embedding function f(·);中:只用在特定任務的embedding function g(·), g’(·);右:將source task訓練出的embedding f(support)輸出用於g’(·)的一部分 (變成g’(f(support), query))。圖中綠色部分為需要做fine-tune training的部分,並且g’中的'意思是這個embedding function的input可以跟f不同資料型態

Hybrid的思維可以參考Fig.11,如果hybrid的方式是相加的話(也就是g’(support, query)=g(query)+f(support))今天要做taskB並且要比較classB1跟classB3的話,這個function只需要學好class B1跟class B3之間的殘差g(B1-> B3)就好。

Fig.11 Hybrid的latent space示意圖,其中藍色系的target task A包含三個class,黃色系target task B也包含三個class。預訓練好的embedding function是f(·), hybrid embedding function中包含一個殘差embedding function g(·)

Metric-based的訓練效果與小資料上的優勢

在訓練Metric based model後不管是fine-tuning還是從頭訓練,最後都會導致同一個類別在latent space中的距離拉近、不同類在latent space中距離拉遠,如Fig.12所示。

Fig.12 預設兩個分類class A, Class B,在經過metric based訓練後的結果。

那回到主題,為什麼Metric Learning可以解決小資料問題呢?比較簡單的來講,用classification為例,一般DL解決的問題是多選一的問題,整個model要學好的事情從N選一的選擇題。變成決定兩張圖像不像,兩個聲音是不是屬於同一個人或者同類的,變成了是非題。

另外我們用另一個角度來想。一般訓練會將資料一個個輸入model中,每個類別準備多少訓練資料加起來總共就這些資料丟進Model裡面做訓練(不包含做資料擴增的部分)。那如果是Metric Learning的情況,要學習一個好的特徵萃取就必須一次以資料對或者資料組為單位輸入NN來訓練,這樣才算得出Distance。如Fig.13所示,下面原本我有六個資料點,分數三個類別,共六個。我要把它們湊成資料對拿來訓練Metric Learning,那我可能的配對數就是15個,這樣樣本數突然暴增到兩倍以上。若想訓練模型一次能比較多個類別,那我們把資料組成資料組,例如分三類就有三種對比,我每次每個類別抓一個來比較,這樣就一次需要四個資料(假設資料自己不跟自己比較)。那這樣的組數抓起來最後就會比原本來得多。更何況如果使用一些加雜訊、選轉、拉伸、平移等資料擴增手段,可以讓樣本數更進一步提升。

Fig.13 資料、資料對、資料組示例。

綜上所述,metric learning是一個應對小資料預訓練、預測很好的方式,藉由學習如何比較資料來讓模型能學會萃取資料特徵,或者利用已有的資料萃取模型進行資料比較。那metric learning中有許多實現的方法,下回我們會更深入介紹其中經典的Siamese Networ與Prototypical Networks,敬請期待~

--

--

Shu-Yu Huang
Taiwan AI Academy

AI engineer in Taiwan AI Academy| Former process engineer in TSMC| Former Research Assistance in NYMU| Studying few-shot-learning and GAN