小資料系列初篇-Few-Shot Learning簡介

“小”數據機器學習的生存之道

Shu-Yu Huang
Taiwan AI Academy
18 min readJan 22, 2021

--

何謂小資料?為何要小資料AI?

從2005 年Roger Mougalas首次提出Big data這個詞彙之後,相關的題目一直都很夯。Big data是指企業為了自動化做機器學習所需要的大量資料。其中包含了5個V:資料量(Volume)大、資料種類(Variety)多、資料生產速度(Velocity)快、資料可信度(Veracity)要高、產生的價值(Value)要能回本。在這個5V增長之下,雖然每筆資料花費變少了,但收集、訓練資料的總花費節節攀升。

因此在近年小公司訓練資料量不足、訓練資料不夠多元、資料標註不足的情況下,小資料的機器學習開始興起。其中有很多key words,包含Small data、few shot learning、meta learning等等,都是解決小資料問題的一些技術方向。

圖源:https://www.gartner.com/smarterwithgartner/2-megatrends-dominate-the-gartner-hype-cycle-for-artificial-intelligence-2020/

先來看看small data有什麼應用場景。第一是使用少量資料學習更接近人類學習的方式、第二是用在改善稀有資料的建模、第三是節省收集資料、標註的人力成本。

1. 更接近人類學習的方式
對人類而言,只需要幾個例子便能學習。例如雖然沒看學過梵文,但是能夠在一串不同文字中,辨識相似的梵文。而能夠辨識,是因為之前學過其他的文字,由經驗而來。在有了其他文字學習的經驗後就能因為學習到精隨而舉一反三,或者可以將資訊拆解。因為人類這種學習方式的有效性,學習人類學習的方式便成了小資料AI的一個目標

2. 改善稀有資料的建模
再來,有些資料是真的稀有。例如稀有動物、罕見疾病的資料。或者是新種類的資料,像是新種病毒、新上市產品等,這種資料還很少但是模型應用有時效性。再者,有些情景是不適合重複的,像是意外發生、或者個人疾病預測這種。這些都可能使能夠建模的資料很少。

3. 降低人力成本
最後,隨著機器學習目標越來越複雜,這個資料收集和標記所需要的人力成本越來越高。例如在圖像相關任務中,一開始分類問題只需要標註分類;若有要求學習分辨位置還要標註範圍;到了物件偵測則需要標註不同物件分類和範圍;到了實例切割問題則需要一個一個像素標註所屬分類。那要是圖一萬張怎麼辦? 能不能只標註一部分呢?這時候就需要專門對應小資料的AI技術。

圖源:https://medium.com/zylapp/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852

Few-Shot learning(FSL)長什麼樣子?

首先預習下機器學習。機器學習的任務是希望給予機器資料,機器能從中擷取特徵,並且給出預測。
像是語音辨識任務中,輸入音訊,經過機器判定後,能給出文字;或者在圖像分類中,輸入圖片,經過機器判定後,能給出類別。

(圖源:李弘毅老師講義https://www.slideshare.net/tw_dsconf/ss-62245351)

機器學習的訓練就是給予機器訓練資料,讓它對資料以特定算法(模型)做特徵擷取,得到預測值。這個預測值與標準答案相比後,根據誤差更新模型。

當資料太少的時候會使模型和資料真正特性不符。第一是under fitting,模型太簡單,但資料分布太複雜,很多資料都會被錯估。第二是over fitting,模型太複雜,而只能適用於訓練資料,用於其他資料時會容易錯估。
所以small data要解決的核心問題就是在資料少時也能好好擬合資料。

圖源:https://www.geeksforgeeks.org/underfitting-and-overfitting-in-machine-learning/

在資料少時怎麼才能學得好呢?
對人類學習而言,最基礎的就是善用手上資料,同樣的資料可能有不同的用處,一兼二顧,例如文件夾也可以拿來當手機架。對應到機器學習上就是將手上資料做擴增以模擬資料的變化。

圖源:https://fashion.ettoday.net/news/1243776

再來是轉換思考方向,用其他的角度學習同一件事情,或許可以降低難度,例如要拿磅秤秤大象很難,但是如果用船在承載後的吃水深度找出跟大象等重石頭,就能透過秤這些石頭估出大象的重量。對應到機器學習上就是改便建模目標,選擇比較簡單的目標可能可以使資料需求量變少。

https://medium.com/marketingdatascience/%E6%9B%B9%E6%B2%96%E7%A8%B1%E8%B1%A1-e1f901655817

最後一種就是要能學到核心,學到核心就能舉一反三,在更多的場景使用同樣的核心知識加快學習進程。像是在學習歐系語言過程中,領悟到抓取字根字首字尾,這樣學習更多歐系語言就會變得更加容易。對應到機器學習上就是要學習如何學習,像是學習如何初始化模型、如何更新模型,稱為元學習(Meta learning)。

圖源:https://www.sanmin.com.tw/Product/index/007559308

這些增強學習效果的共通特色是需要利用先前的知識(prior knowledge)。
第一是先前的資料(prior data),用於比較或者組合出新資料
例如,如果今天要學習韓文,而我先前已經學了中文、日文、英文,那樣我只要拿韓文分別跟三種語言做比較,會發現他比較接近中文和日文、跟英文比較遠。

第二是先前的模型(prior model),可以直接用到其他任務中共通的部分,或者透過多種任務的學習,學習到任務共通的核心特徵。
例如已經學會騎腳踏車,那樣騎摩托車時至少雙輪平衡跟側身轉彎就不需要學,只需要學習配合適應按油門驅動就好。

簡而言之FSL模型的目標就是利用source datasets/tasks快速學習、適用於未見過的新task (target dataset/task)

至於多快適應多大的任務,在FSL classification有個術語叫n-way-k-shot。Way是分類的類別數,代表任務的複雜度;而shot是每個類別只提供多少學習用的例子,代表要求的學習速度

圖源: MNIST、ImageNet

在Google meta dataset的論文有對數種FSL方案做不同way和shot數的實驗。結果顯示,ways越多,FSL準確度越低;shots越多FSL分類鑑別度越高。

*Triantafillou, E., Zhu, T., Dumoulin, V., Lamblin, P., Evci, U., Xu, K., … & Larochelle, H. (2019). Meta-dataset: A dataset of datasets for learning to learn from few examples. arXiv preprint arXiv:1903.03096.

擴增訓練資料

擴增訓練資料主要有兩種方式,一種是用固定規則擴增資料,另一種是訓練模型對資料做轉換產生新資料。用固定的規則比較簡單,就是對圖像做不同角度、大小的翻轉、拉伸、縮放等等,而針對物建辨識,近年也有人將物件先建成3D模型在對它做轉換、散布。

圖源: 左-https://www.codesofinterest.com/2018/02/using-data-augmentations-in-keras.html&右-https://blogs.unity3d.com/2020/09/17/training-a-performant-object-detection-ml-model-on-synthetic-data-using-unity-perception-tools/

第二種是訓練模型做新資料,例如Generative Adversarial Netwrok(GAN)。簡單的作法就是利用一個generatro模型生成資料,再用另個discriminator模型判斷它是不是真的資料,輪流訓練genenrator和discriminator,最終使generator生成更真實的資料。

圖源: MNIST

另外還有人利用舊有類別的資料生成新的資料。例如原本有非常多老虎、狗、豹的資料,而現在我想擴增少量的貓的資料。這樣就可以先依相似度訓練老虎到貓(t1)、狗到貓(t2)、豹到貓(t3)的轉換模型,然後接著再拿轉換模型轉換更多資料,像是拿老虎另外不像的照片轉出新的貓(cat4)。

*Gao, H., et al. (2018). Low-shot learning via covariance-preserving adversarial augmentation networks. In Advances in Neural Information Processing Systems (pp. 975–985).

改變建模目標

接著還有另個方案是去改變建模目標。第一種是把分類變成學習如何比較,可以簡化訓練目標;第二種是多工學習,善用TASK之間共通性增加模型的適用範圍;第三種是建構式學習,把學習拆成好幾部分,只要學習怎麼整合各個部份的結果。

學習如何比較的方案最有名的是Siamese Network,Google 的Face Net就是用這個架構。會訓練轉換方程將資料兩筆轉換到高維特徵空間上,再用距離函式去取兩筆資料距離,決定這兩筆資料是否屬於同個類別。

*Bromley, J., et al. (1993). Signature verification using a “siamese” time delay neural network. International Journal of Pattern Recognition and Artificial Intelligence, 7(04), 669–688.

在這個高維空間中,同種類的距離較短、不同種類距離較長。這種network只需要學習比較意思就是可以適用於完全沒看過的task,甚至可以達到zero-shot learning的效果

常見於人臉辨識,例如這邊利用兩兩比較的資料集,就可以訓練判斷右邊照片是本人還是假冒者,沒見過的照片也可以辨識。

圖源: https://reurl.cc/0Djxrl

第二是多工學習,算transfer learning的一種。在舊的任務和新的任務中某些層可以共用,而在多個舊有任務中,我共同訓練部分層,在新的任務中我將共同訓練層凍結,只訓練任務相關的層。像是下圖我在source先用動物辨識1和動物辨識2訓練shared層。這個層也接到target task,而在狗種辨識的task中只訓練task-specific層。

*Wang, Y., Yao, Q., Kwok, J. T., & Ni, L. M. (2020). Generalizing from a few examples: A survey on few-shot learning. ACM Computing Surveys (CSUR), 53(3), 1–34.

最後是建構式學習,範例的method是decomposable component learning。先將source dataset每個圖不同部件拆出來,分成不同class訓練。例如這個代步機,把手柄、支架、輪胎拆開,分成三個class。若我訓練出辨識手柄、支架、輪胎的model,再加上一個這三者如何組合的model,我就可以訓練代步機的辨識。而有了三個component的model以後看到新的東西像是機車、汽車之類的,我就只需要訓練如何組合的model就好。

*Lake, B. M., Salakhutdinov, R., & Tenenbaum, J. B. (2015). Human-level concept learning through probabilistic program induction. Science, 350(6266), 1332–1338.

學習如何學習

在Small data AI的領域中,optimization based methods將目標訂在使機器學習如何學習上,在舊有的任務中做meta training,fit出一個最會learn的model,而不是最能夠fit其中一個任務的model。
回想一下,在任何機器學習方式中,用到梯度下降法的methods都像是爬山一樣,靠一組組data計算估計值與答案誤差(損失、loss),回推修正參數量,不斷的朝一個目標前進,在爬山是往山的最高點,在機器學習是往loss的最低點。

圖源: Google Earth

這個過程,傳統上會從一個亂數的參數起點開始,以一些資料計算loss的梯度,並依此更新參數,經數次訓練後,達到模型平衡。更新的方向與梯度方向相反,且這個梯度若是陡峭,則大量更新;若是已達平穩則不更新(當然對於有些optimizer,梯度只拿來定更新方向)。

在Maching learning中,有很多參數是固定的:θ的初始值是隨機的,頂多使用He-normal或Xavier調整每層的初始值比例;α是固定的,頂多隨著時間線性or exponential遞減;除此之外model的連接也是固定的。

但若是在Few shot learning的情景中,要求model必須只透過幾組資料學習新的task,而不同task所需要的model常常是有差距的,需要model很快的fit不同的domain data。在這情況下使用deep neural network常常導致model對其中一個task的fitting反而使得新資料的學習窒礙難行。

例如下圖,要是fit task1之後直接套用給task2作為初始值則會讓model在fit task2時無法往它的global minimum方向走。

而若是能夠選取兩個task minimum中間點作為參數初始值,則可以使兩個task都train到global minimum。

Optimization based meta learning解決這個問題。其中最有名的流派是Model-agnostic-meta-learning(MAML)系列,學習如何初始化。但這個開山始祖比較複雜我們講它的變形叫做Reptile做為範例。
這個流派想做的事情是這樣:既然每個任務有不同的最佳模型,那樣我讓模型想辦法學習初始化,讓初始值離每個任務需要的ϕ最接近就可以縮短每個任務的訓練時間。

再來除了學習初始化外,還有學習如何gradient descent。這個系列想達到不只學習最佳化初始參數,還學習gradient descent的learning rate,還有gradient descent function,或者訓練其他最佳化這些超參數的模型。

它的點子來自於RNN的recurrent propagation與gradient descent的式子很相似。
RNN的state是由新的input和前一次的state來計算的。
gradient descent時parameter是由新的input和前一次的parameter來更新的。

Learning to learn by gradient descent by gradient descent這篇想的是使用RNN來做為更新的方法,讓每個task跑一次RNN就從頭更新到尾。
其中RNN變成一個動態權重更新值的函式。

另外還有LSTM meta learner、meta-SGD等作品,這邊就不細講,以下附上連結。

Reference

  1. Few-Shot Learning: Wang, Y., Yao, Q., Kwok, J. T., & Ni, L. M. (2020). Generalizing from a few examples: A survey on few-shot learning. ACM Computing Surveys (CSUR), 53(3), 1–34.
  2. Data augmentation GAN: Antreas Antoniou, Amos Storkey, and Harrison Edwards (2017)
  3. CP-AAN: Gao, H., et al. (2018). Low-shot learning via covariance-preserving adversarial augmentation networks. In Advances in Neural Information Processing Systems (pp. 975–985).
  4. Siamese Network: Bromley, J., et al. (1993). Signature verification using a “siamese” time delay neural network. International Journal of Pattern Recognition and Artificial Intelligence, 7(04), 669–688.
  5. Bayesian Program Learning: Lake, B. M., Salakhutdinov, R., & Tenenbaum, J. B. (2015). Human-level concept learning through probabilistic program induction. Science, 350(6266), 1332–1338.
  6. MAML: Finn, C., Abbeel, P., & Levine, S. (2017). Model-agnostic meta-learning for fast adaptation of deep networks. arXiv preprint arXiv:1703.03400.
  7. Reptile: Nichol, A., Achiam, J., & Schulman, J. (2018). On first-order meta-learning algorithms. arXiv preprint arXiv:1803.02999.
  8. Learn to Learn by GD by GD: Andrychowicz, M., Denil, M., Gomez, S., Hoffman, M. W., Pfau, D., Schaul, T., … & De Freitas, N. (2016). Learning to learn by gradient descent by gradient descent. In Advances in neural information processing systems (pp. 3981–3989).
    cite:1025
  9. LSTM Meta-Learner: Ravi, S., & Larochelle, H. (2016). Optimization as a model for few-shot learning.
    cites:1208
  10. Meta-SGD: Li, Z., Zhou, F., Chen, F., & Li, H. (2017). Meta-sgd: Learning to learn quickly for few-shot learning. arXiv preprint arXiv:1707.09835.
    cites:355

--

--

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