使用場景:
原型網路是一種用於小樣本學習(few-shot learning)的方法,訓練場景是在只有很少訓練數據的類別。
相關用語:
5 way 5 shot
- 5 way: 五種類別。
- 5 shot: 每個類別有五筆資料。
- 支持集(support set):在每個 N-way K-shot 任務中,支持集包含從每個類別選擇的 K 個樣本。支持集用於訓練模型,並計算每個類別的原型。
- 查詢集(query samples):查詢樣本會從N個類別中選擇,查詢集的主要目的是用來測試模型對於未知樣本的歸類能力。和支持集相同類別沒關係,重點是不能和支持集使用相同的「樣本」。
因此5 way 5 shot: 訓練資料,需要25筆資料。當然還要需要其他的驗證集跟測試集。下面會有更詳細的說明。
精神:
量化並比較「輸入樣本」和「各類別原型」之間的距離
原型的話,可以想成是一個空間中的vector會比較好理解(下面有圖可以參考)
訓練流程:
- 將原始資料轉換成電腦看得懂的向量格式。
- 收集少量資料。
- 假設我的資料共有5種類別,
— 每一個類別有幾個參考點(以下面的範例來看會有五個vector,因為是5-shot)。
— 計算每一種類別裡面「向量的平均值」,也就是把5個vector相加起來再除以五,計算平均值的概念。
— 最後將計算出來的平均vector當作該類別的中心點,即是途中的c1, c2, c3。
4. 先將查詢樣本map到跟原型相同的空間中。
5. 計算「原型」(平均vector)和查詢樣本之間的距離。(Euclidean distance),目的是要去評估目前模型對於新樣本的泛化能力如何。
6. 將查詢樣本歸類到某一個類別。
7. 歸類正確,太棒了!
— 歸類錯誤,模型會得到較高的loss值,並且調整模型更新力度。
8. 不斷重複,值得得到比較低的loss值。
9. 模型訓練完成!
不知道大家會不會有個疑問是,請問要取多少個查詢樣本?
一般來說比query samples會比support set要來得多。例如,你可以從每個類別中選擇15個不同的樣本,總共75個樣本作為查詢集。
應用:
論文中使用了兩個資料及來進行驗證,而我們這邊就只用他所提到的miniImageNet資料集來做說明。資料包含 60,000 張 84×84 像素的彩色圖像,圖像又被劃分成 100 個類別,每個類別有 600 張圖片。
資料集的分割方式:
訓練資料:64 個類別
驗證資料:16 個類別
測試資料:20 個類別
如果之前有訓練過相關的模型,應該還會覺得哪邊怪怪的,訓練使用到5個類別,那驗證跟測試呢?以下會說明到底什麼是5-way 1-shot的訓練方法。
其實主要的想法就是5-way 1-shot不侷限在在訓練資料集裡面,而是同樣包含「驗證」跟「測試」資料集。因此,用上面的範例,我們可以知道在
訓練階段中,5-way會從64個類別裡面,隨機取得5個類別。1-shot則是從每個類別中取出一張圖片。
而在驗證階段,也會從16個驗證類別中,隨機取五個類別,從每個類別中取出一張圖片。來進行測試,並調整模型。
最後的測試階段,也是從20個類別中,隨機取5個類別來進行測試,從每個類別中取出一張圖片。
可能在這邊也會有疑問說:那query sample跟驗證集之間的關係是什麼?
- 查詢樣本(Query Samples):
主要用來評估模型目前的泛化能力如何,直接餐數模型參數的調整。
- 驗證集(Validation Set):
主要用來評估模型在訓練過程中的進展,並沒有直接訓練模型參數,可以幫助的部分是調整「超參數」和避免模型過擬合。
結語:
希望以上短短的介紹可以讓大家更加了解prototypical Network的概念~~