**
Prototypical Networks for Few-shot Learning.(用于少樣本分類的原型網絡)
**
摘要
文章提出了一種用于少樣本分類的原型網絡,其中分類器必須可以推廣(泛化)到在訓練集裡面沒有見過的新的類别,并且每個新的類别隻有很少一部分樣本。原型網絡學習一個度量空間,執行分類隻需要簡單的計算到每個類的原型表示的距離。與其他方法的主要一點不同是原型網絡反映了一種在資料集不足情況下的歸納偏差。最後一點是原型網絡可以用于zero-shot learning(零樣本學習)。
簡單的設計選擇帶來了實質性的改進
本質思想
使用一個神經網絡學習一個 embedding 将輸入映射到一個映射空間裡面,而每個類的原型就是簡單的這個類的 support set 所有樣本(support set 的定義參見後文)的均值。分類的執行:将需要分類的樣本用學習到的映射函數映射到嵌入空間裡面,然後離他最近的原型就是我們的預測類。
介紹
- few-shot learning 問題的本質之一是樣本很少,一般每個類的樣本少于20個。另外一個本質是這些類是全新的類。few-shot learning 問題的分類器必須調整以适應新的類,并且新的類中每個類的樣本很少。傳統的方法是在新的資料上重新訓練新的模型,但是由于樣本太少,往往會導緻過拟合 (overfitting)。但是**我們人類是可以做到 few-shot learning **的,是以邁向普世的人工智能,few-shot leanring 問題是一個重要問題。
- 文章假設:由于樣本有限,我們的分類器會有一個歸納偏差 (inductive bias)。 原型網絡基于這樣的想法:存在一種 embedding,使得其中每個類的點(可能多個)聚集在每個類的單個原型表示周圍。
- 方法概述:使用一個神經網絡學習一個 embedding 将輸入映射到一個映射空間裡面,而每個類的原型就是簡單的這個類的 support set 所有樣本(support set 的定義參見後文)的均值。分類的執行:将需要分類的樣本用學習到的映射函數映射到嵌入空間裡面,然後離他最近的原型就是我們的預測類。zero-shot learning 類似,隻不過每個類沒有标記 (label),而是一個關于類的進階描述 (high-level description of the class)。
方法
- 符号定義:support set 是我們具有的 N N N 個标記的樣本 S = { ( x 1 , y 1 ) , … , ( x N , y N ) } S=\left\{\left(\mathbf{x}_{1}, y_{1}\right), \ldots,\left(\mathbf{x}_{N}, y_{N}\right)\right\} S={(x1,y1),…,(xN,yN)},其中 x i ∈ R D \mathbf{x}_{i} \in \mathbb{R}^{D} xi∈RD 是一個 D D D維的向量, y i ∈ { 1 , … , K } y_{i} \in\{1, \ldots, K\} yi∈{1,…,K} 使對應的類, S k S_{k} Sk 表示類别為 k k k 的樣本的集合。
- 模型:首先一個映射函數 (embedding): f ϕ : R D → R M f_{\phi} : \mathbb{R}^{D} \rightarrow \mathbb{R}^{M} fϕ:RD→RM 參數為 ϕ \phi ϕ,将輸入空間映射到嵌入空間 (嵌入空間的次元為 M M M),然後計算每個類的原型: c k = 1 ∣ S k ∣ ∑ ( x i , y i ) ∈ S k f ϕ ( x i ) \mathbf{c}_{k}=\frac{1}{\left|S_{k}\right|} \sum_{\left(\mathbf{x}_{i}, y_{i}\right) \in S_{k}} f_{\phi}\left(\mathbf{x}_{i}\right) ck=∣Sk∣1∑(xi,yi)∈Skfϕ(xi)。這個公式很簡單,就是嵌入空間中屬于 k k k 類的所有點的 embedding 向量先求和在除以點的個數(就是簡單的均值)。執行分類:距離函數 d : R M × R M → [ 0 , + ∞ ) d : \mathbb{R}^{M} \times \mathbb{R}^{M} \rightarrow[0,+\infty) d:RM×RM→[0,+∞) 根據兩個 M M M 維的向量,使用距離函數 d d d,求出距離。對于一個需要分類的樣本點 x \mathbf{x} x , x \mathbf{x} x 屬于類别 k k k 的機率為: p ϕ ( y = k ∣ x ) = exp ( − d ( f ϕ ( x ) , c k ) ) ∑ k ′ exp ( − d ( f ϕ ( x ) , c k ′ ) ) p_{\phi}(y=k | \mathbf{x})=\frac{\exp \left(-d\left(f_{\phi}(\mathbf{x}), \mathbf{c}_{k}\right)\right)}{\sum_{k^{\prime}} \exp \left(-d\left(f_{\phi}(\mathbf{x}), \mathbf{c}_{k^{\prime}}\right)\right)} pϕ(y=k∣x)=∑k′exp(−d(fϕ(x),ck′))exp(−d(fϕ(x),ck)),即與原型距離的相反數的softmax(歸一化),取相反數的原因是相距最小的原型最有可能使這個樣本點對應的類。
- 學習過程是通過 SGD (Stochastic Gradient Descent, 随機梯度下降) 最小化正确類别 k k k 的負對數機率 J ( ϕ ) = − log p ϕ ( y = k ∣ x ) J(\phi)=-\log p_{\phi}(y=k | \mathbf{x}) J(ϕ)=−logpϕ(y=k∣x)。最小化 J ( ϕ ) = − log p ϕ ( y = k ∣ x ) J(\phi)=-\log p_{\phi}(y=k | \mathbf{x}) J(ϕ)=−logpϕ(y=k∣x) 等價于最大化 log p ϕ ( y = k ∣ x ) \log p_{\phi}(y=k | \mathbf{x}) logpϕ(y=k∣x),等價于最大化 p ϕ ( y = k ∣ x ) p_{\phi}(y=k | \mathbf{x}) pϕ(y=k∣x),其中 x \mathbf{x} x 屬于類 k 。
- 訓練劇集 (training episodes) 的構造,這也是我第一次在論文中看到以算法的形式介紹如何建構 meta-training task。
首先 N N N 是訓練集樣本的數量, K K K是訓練集中樣本的類, N C ≤ K N_{C} \leq K NC≤K 是每次 training episodes 中類别個數, N S N_{S} NS 是 support set 中每個類的的樣本個數, N Q N_{Q} NQ 使 query set 中每個類的的樣本個數。RANDOMSAMPLE ( S , N ) (S, N) (S,N) 表示在 S S S 中随機均勻采樣 N N N 個樣本,沒有替換。
Input:訓練集 D = { ( x 1 , y 1 ) , … , ( x N , y N ) } \mathcal{D}=\left\{\left(\mathbf{x}_{1}, y_{1}\right), \ldots,\left(\mathbf{x}_{N}, y_{N}\right)\right\} D={(x1,y1),…,(xN,yN)},其中 y i ∈ { 1 , … , K } y_{i} \in\{1, \ldots, K\} yi∈{1,…,K}, D k \mathcal{D}_{k} Dk 表示一個包含所有 y i = k y_{i}=k yi=k 的元素 ( x i , y i ) \left(\mathbf{x}_{i}, y_{i}\right) (xi,yi) 集合 D \mathcal{D} D。
Output: training episodes 的損失 J J J 。
過程:
V ← V \leftarrow V← RANDOMSAMPLE ( { 1 , … , K } , N C ) \left(\{1, \ldots, K\}, N_{C}\right) ({1,…,K},NC) 從 K K K 個類中随機取出 N C N_{C} NC 個類作為這個 training episode 的類别。
對其中的每個類别 k k k: S k ← S_{k} \leftarrow Sk← RANDOMSAMPLE ( D V k , N S ) \left(\mathcal{D}_{V_{k}}, N_{S}\right) (DVk,NS),在所有類别為 k k k 的樣本中采樣 N S N_{S} NS個樣本作為這個類的 support。
對其中的每個類别 k k k: Q k ← Q_{k} \leftarrow Qk← RANDOMSAMPLE ( D V k \ S k , N Q ) \left(\mathcal{D}_{V_{k}} \backslash S_{k}, N_{Q}\right) (DVk\Sk,NQ),在所有類别為 k k k 的樣本中采樣 N Q N_{Q} NQ個樣本作為這個類的 query(需要先去掉已經選作 support set 的樣本點)。
使用每個類的 support set 計算每個類的原型: c k ← 1 N C ∑ ( x i , y i ) ∈ S k f ϕ ( x i ) \mathbf{c}_{k} \leftarrow \frac{1}{N_{C}} \sum_{\left(\mathbf{x}_{i}, y_{i}\right) \in S_{k}} f_{\phi}\left(\mathbf{x}_{i}\right) ck←NC1∑(xi,yi)∈Skfϕ(xi)。這裡我覺得原論文有錯:我用紅色标記的地方,分母應該是 ∣ S k ∣ \left|S_{k}\right| ∣Sk∣ 或者 N s N_{s} Ns。
J ← 0 J \leftarrow 0 J←0:初始化 loss 為 0 。
for k k k in { 1 , … , N C } \left\{1, \ldots, N_{C}\right\} {1,…,NC} do: for ( x , y ) (\mathbf{x}, y) (x,y) in Q k Q_{k} Qk do: J ← J + 1 N C N Q [ d ( f ϕ ( x ) , c k ) ) + log ∑ k ′ exp ( − d ( f ϕ ( x ) , c k ) ) ] J \leftarrow J+\frac{1}{N_{C} N_{Q}}\left[d\left(f_{\phi}(\mathbf{x}), \mathbf{c}_{k}\right)\right)+\log \sum_{k^{\prime}} \exp \left(-d\left(f_{\phi}(\mathbf{x}), \mathbf{c}_{k}\right)\right) ] J←J+NCNQ1[d(fϕ(x),ck))+log∑k′exp(−d(fϕ(x),ck))]:疊加每個類的 query set 節點的損失作為損失函數。
進一步分析 (混合密度估計,距離度量的選擇,訓練劇集的構造)以及實驗部分請參考原論文
這裡講一下我對歸納偏差的了解:對于 support set 中每個類的樣本點不止一個的情況下,取任意一點作為這個類的基準都不合适,原型網絡的思想是最簡單的求平均,這樣考慮到了某個類的每個樣本點以及每個樣本點相對于這個類的原型表示的偏差。我們不妨認為其實每個樣本點和這個類的原型表示點都有一點距離(偏差),求平均就是歸納偏差。當然一個想法就是不求平均,用别的方法找這個類的原型表示點,如果效果提升并且可以給出一定的理論證明,這是一個不錯的future work 方向。另外距離歐式度量不一定的最好的選擇,論文在歐氏距離和餘弦距離中做出選擇是根據實驗得到的,至于為什麼并沒有理論證明(準确說有一點證明,但是有點牽強,作者文中也使用的猜測【conjecture】來表達的結論)。另外有沒有一個更好的甚至最好的度量也是未來研究一個方向(後面會介紹的Relation Network就是從這個方向入手的)。
論文: https://arxiv.org/pdf/1703.05175.pdf.