天天看點

Meta-Learning for Semi-Supervised Few-Shot Classification. (用于半監督少樣本分類的元學習)1. 摘要2. 介紹2. 背景3 半監督少樣本學習4. 其他5. 論文連結

1. 摘要

在少樣本分類中,我們關注于學習一個可以用很少的标記資料訓練一個分類器的算法。最近的少樣本分類任務以使用元學習為主要特征。元學習中一個算法對應的一個參數化模型在表示不同分類任務的 episode (劇集,情節) 上面定義和訓練,每一個 episode 中有自己的少量标記樣本的訓練集和對應的測試集。本文中,我們把這種少樣本分類的範式推廣到一種新的場景:每個 episode 中未标記的資料也是可用的。 我們考慮兩種場景:

  1. 每個 episode 中未标記的樣本屬于本 episode 中的類,也就是說在這個 episode 中,雖然這些未标記的樣本的具體 label 未知,但是我們知道它肯定屬于這個 episode 中類别的某一個。(最簡單的示例,這個 episode 我們分類雞鴨魚,這些未标記的樣本具體屬于哪一個不知,但是肯定是雞鴨魚中的某一個)
  2. 一個更具有挑戰性的情況:這個 episode 中的未标記樣本可能根本就不屬于這個 episode 中的任意一類。(最簡單的示例,這個 episode 我們分類雞鴨魚,某個未标記的樣本可能是豬)

為了解決上述兩種場景的問題,我們對原型網絡(Prototypical Networks)進行了擴充,使其在産生原型的時候具有使用未标記樣本的能力。這個模型在 episode 上以端到端的形式進行訓練,成功學習利用未标記的樣本。

本文還有一大貢獻就是對 ImageNet 進行了一種新的切割,包含大量的類别,并且具有層級結構。

本文實際就是對 Meta-Learning 進行了半監督的擴充,正如期望那樣,半監督可以提升少樣本分類的性能。另外上文中的 episode 我個人更喜歡了解為 task,為了與之前論文一緻,後文都使用 task(任務)。元學習的方法很多,作者選擇的是對原型網絡進行擴充,是以而且可以看成屬于 meta-learning 中的度量學習 (Metric Learning)。

(推薦閱讀以下連結,對了解本文很有幫助:

https://blog.csdn.net/weixin_37589575/article/details/92801610

https://blog.csdn.net/weixin_37589575/article/details/92768668)

2. 介紹

大量可用的标記資料使得深度學習方法在很多人工智能相關的任務上取得了巨大的成功,然而這也導緻現在的深度學習模型陷入了一個問題:如果标記樣本太少怎麼辦?具體而言,現在的深度學習模型擅長解決一個具有大量标記資料的單一任務,而可以解決各種具有很少标記樣本的方法很少。另一方面,我們人類卻可以快速學習新的類别,例如當我們參觀一個熱帶國家見到一種新的水果的時候。這一人類智能和機器學習之間的巨大鴻溝為深度學習的發展提供了新的契機。

由于上述原因,最近越來越多的研究關注于少樣本學習,他們考慮設計一種學習算法,專門用于在很少的訓練資料問題上快速泛化。這裡我們主要關注于少樣本分類問題,分類問題假設每個類中僅僅包含很少的有标記樣本。一種解決少樣本問題的方法稱為元學習 (Meta-Learning),元學習通過執行在由大量可用的标記資料上産生的大量各種分類任務上的遷移學習來對一個在訓練時前所未見的類别分類任務上進行泛化。

已有大量的元學習方法提出,并且取得了很大的進步。然而,這些工作中對每個少樣本學習任務進行了限制,本文從兩個方法進行了推廣:

  1. 每個任務中的訓練集中有未标記的樣本。這符合标準的半監督學習方式,但是正常的半監督沒有 few-shot 以及推廣到新的類這一限制。
  2. 一個更具有挑戰性的情況:這個任務中的未标記樣本可能根本就不屬于這個任務中的任意一類。
Meta-Learning for Semi-Supervised Few-Shot Classification. (用于半監督少樣本分類的元學習)1. 摘要2. 介紹2. 背景3 半監督少樣本學習4. 其他5. 論文連結

如圖所示,這個圖所示的就是一個 2-way 1-shot 的分類任務,但是和以前的任務有一些不同,我們加一些未标記的資料,這裡雖然不再隻有 2*1 = 2 個樣本,但是我們标記的樣本隻有兩個,未标記資料雖然在 support 集中,但是不計入我們 shot 數中。兩種情況分别對應:

  1. 紅色虛線中的金魚和鲨魚加入到我們的 support 中去,這 4 張圖檔雖然沒有标記,但是如以前的半監督學習一樣,可以提升性能。簡單說,就是我們可以先預測這 4 張圖檔的類(雖然不一定準确),但是本質上可以增加我們的 support 樣本,也就可以增加我們的 shot 數,顯然 shot 越多,效果越好。
  2. 上一種情況太過于理想化,我們考慮另外一種更接近現實的情況,比如我們在所有的未标記集合中任意選 4 張。顯而易見,我們可能選到獅子之類的圖檔,把他們放在 support 集中。問題出現了,我們如果先預測這個圖檔,然後使用它來訓練我們的模型,有可能使準确率反而下降,因為這根本就是錯誤的資訊。這種具有誤導資訊的樣本我們稱為幹擾項(distractor)。

本文的貢獻:(1)第一篇在少樣本學習任務上研究半監督的論文。(2)在正常的資料集 Omniglot 和 miniImageNet 進行實驗,提供了問題定義和基準方法。(3)在具有幹擾項和不具有幹擾項的情況下進行了大量的實驗,并且驗證了半監督學習方式可以提升少樣本分類任務的性能,擴充的原型網絡比單純的原型網絡在此問題上表現更佳。

2. 背景

2.1 少樣本學習:

本文的少樣本學習方式是标準的方式。Meta-training classes: C train \mathcal{C}_{\text{train}} Ctrain​,其中具有大量标記資料。但是我們的最終任務實在全新的類 Meta-testing classes: C test \mathcal{C}_{\text {test}} Ctest​ 上進行分類任務,并且 C test \mathcal{C}_{\text {test}} Ctest​ 中每個類隻有很少的有标記樣本。基于 episode 的範式就是使用 meta-training classes 中的大量樣本模拟 meta-testing classes 上的少樣本學習任務。具體而言,比如我們模拟 N N N-Way K K K-Shot 的任務。步驟如下:

  1. 在 C train \mathcal{C}_{\text{train}} Ctrain​ 中随機抽取 N N N 個類
  2. 每個類采樣 K K K 個樣本,也就是一共 N ∗ K N*K N∗K 個樣本作為我們的 support set: S = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N × K , y N × K ) } \mathcal{S}=\left\{\left(\boldsymbol{x}_{1}, y_{1}\right),\left(\boldsymbol{x}_{2}, y_{2}\right), \ldots,\left(\boldsymbol{x}_{N \times K}, y_{N \times K}\right)\right\} S={(x1​,y1​),(x2​,y2​),…,(xN×K​,yN×K​)}
  3. 再随機采樣另外 T T T 個樣本作為我們的 query set: Q = { ( x 1 ∗ , y 1 ∗ ) , ( x 2 ∗ , y 2 ∗ ) , … , ( x T ∗ , y T ∗ ) } \mathcal{Q}=\left\{\left(\boldsymbol{x}_{1}^{*}, y_{1}^{*}\right),\left(\boldsymbol{x}_{2}^{*}, y_{2}^{*}\right), \ldots,\left(\boldsymbol{x}_{T}^{*}, y_{T}^{*}\right)\right\} Q={(x1∗​,y1∗​),(x2∗​,y2∗​),…,(xT∗​,yT∗​)}

本質上來說,這就是一個 task,也就是一個 episode。我們常見的範式是在這個任務的 support set 上面進行訓練,然後在 query 上進行測試。但是元學習不一樣,元學習把這一整個任務看成一個 meta-training task,然後在大量類似的任務上學習,最後測試是在一個新的任務上面。新的任務之是以新,是因為裡面的類是全新的,和所有的 meta-training 中的類别都不同。

問題設定參考上面提到的部落格:

Meta-Learning for Semi-Supervised Few-Shot Classification. (用于半監督少樣本分類的元學習)1. 摘要2. 介紹2. 背景3 半監督少樣本學習4. 其他5. 論文連結

簡單畫了一個示意圖,前面三個是三個 meta-training task (當然實際需要很多這樣的 meta-training tasks 才能學到我們需要的先驗知識),最後一個就是 meta-testing task。我們最後評價我們的 meta-learning 方法的好壞就是在紅色标記部分上的 performance。

2.2 原型網絡

原型網絡簡單且效果好。原型網絡使用 support set 為每個類别提取原型,然後根據 query 中樣本相對于各個原型的距離進行分類。具體而言,原型網絡目的是學習一個 embedding 函數 h ( x ) h(\boldsymbol{x}) h(x),也就是一個參數化的神經網絡,将樣本映射到一個度量空間裡面,其中相同類的距離近,不同類的距離遠。原型網絡的所有參數都在這個 embedding 函數中。

首先計算每個類的原型:直覺的說,support set 中某個類所有樣本的均值就是這個類的原型:例如類别 c c c 的原型 p c \boldsymbol{p}_{c} pc​ 計算如下:

p c = ∑ i h ( x i ) z i , c ∑ i z i , c , \boldsymbol{p}_{c}=\frac{\sum_{i} h\left(\boldsymbol{x}_{i}\right) z_{i, c}}{\sum_{i} z_{i, c}}, pc​=∑i​zi,c​∑i​h(xi​)zi,c​​, where z i , c = 1 [ y i = c ] z_{i, c}=\mathbb{1}\left[y_{i}=c\right] zi,c​=1[yi​=c]

然後對 query 中某個新的樣本 x ∗ x^{*} x∗ 進行類别預測:直覺的說,用相同的 h ( x ) h(\boldsymbol{x}) h(x) 映射到這個度量空間,離哪一個原型近,那麼預測為該原型對應的類:例如 x ∗ x^{*} x∗ 屬于類别 c c c 的機率定義如下:

p ( c ∣ x ∗ , { p c } ) = exp ⁡ ( − ∥ h ( x ∗ ) − p c ∥ 2 2 ) ∑ c ′ exp ⁡ ( − ∥ h ( x ∗ ) − p c ′ ∥ 2 2 ) p\left(c | \boldsymbol{x}^{*},\left\{\boldsymbol{p}_{c}\right\}\right)=\frac{\exp \left(-\left\|h\left(\boldsymbol{x}^{*}\right)-\boldsymbol{p}_{c}\right\|_{2}^{2}\right)}{\sum_{c^{\prime}} \exp \left(-\left\|h\left(\boldsymbol{x}^{*}\right)-\boldsymbol{p}_{c^{\prime}}\right\|_{2}^{2}\right)} p(c∣x∗,{pc​})=∑c′​exp(−∥h(x∗)−pc′​∥22​)exp(−∥h(x∗)−pc​∥22​)​

原型網絡的訓練政策是優化一個損失函數,這個損失函數是平均正确分類的負對數機率,如下:

− 1 T ∑ i log ⁡ p ( y i ∗ ∣ x i ∗ , { p c } ) -\frac{1}{T} \sum_{i} \log p\left(y_{i}^{*} | \boldsymbol{x}_{i}^{*},\left\{\boldsymbol{p}_{c}\right\}\right) −T1​∑i​logp(yi∗​∣xi∗​,{pc​})

訓練過程就是疊代大量的 meta-training 任務,使用梯度下降更新參數。

最後的測試過程如下:對于新的任務新的類别 C test \mathcal{C}_{\text {test}} Ctest​ ,我們用 support 集中的少量樣本産生原型,然後将 query 中的樣本使用 h ( x ) h(\boldsymbol{x}) h(x) 映射過來,最後根據距離分類。預測類為最大機率其實就是最近距離:

y ^ = arg ⁡ max ⁡ c p ( c ∣ x ∗ , { p c } ) \hat{y}=\arg \max _{c} p\left(c | \boldsymbol{x}^{*},\left\{\boldsymbol{p}_{c}\right\}\right) y^​=argmaxc​p(c∣x∗,{pc​})

3 半監督少樣本學習

現在我們半監督一個任務中的 support 集合不僅包含之前的 S \mathcal{S} S 還有未标記的樣本 R \mathcal{R} R。 R = { x ~ 1 , x ~ 2 , … , x ~ M } \mathcal{R}=\left\{\tilde{\boldsymbol{x}}_{1}, \tilde{\boldsymbol{x}}_{2}, \ldots, \tilde{\boldsymbol{x}}_{M}\right\} R={x~1​,x~2​,…,x~M​}

Meta-Learning for Semi-Supervised Few-Shot Classification. (用于半監督少樣本分類的元學習)1. 摘要2. 介紹2. 背景3 半監督少樣本學習4. 其他5. 論文連結

文中給除了一個圖示,其中左邊的 Training 和 Testing 建議了解為 Meta-training 和 Meta-testing。這個任務其實是一個 3-way 1-shot 的任務。每個任務中虛線左邊是這個任務訓練的樣本,不僅包含 S \mathcal{S} S,還有 R \mathcal{R} R。其中 + 号代表這個圖檔的類别是這個任務中的類别,而 - 号則不是,也就是前文中的幹擾項 (是否為幹擾項是未知的)。虛線右邊就是每個任務的 query 。 我們期望在很多 Meta-training 任務上進行訓練,最後在新的任務新的類别上,隻給出虛線左邊的示例,可以對右邊示例進行好的分類。

3.1 半監督原型網絡:

原本的原型網絡并沒有特别指明某一種方法來利用無标簽資料。是以我們提出了多種擴充。首先給出原型 p c \boldsymbol{p}_{c} pc​ 的基本定義,然後在給出如果使用為标記資料 R \mathcal{R} R 産生提煉的原型 p ~ c \tilde{\boldsymbol{p}}_{c} p~​c​ 的過程。一旦提煉的原型得到,我們的訓練過程和測試過程就類似了,訓練過程中的損失函數中的 p c \boldsymbol{p}_{c} pc​ 改為 p ~ c \tilde{\boldsymbol{p}}_{c} p~​c​。分類的時候找到也是最近的 p ~ c \tilde{\boldsymbol{p}}_{c} p~​c​ 而不是最近的 p c \boldsymbol{p}_{c} pc​。

Meta-Learning for Semi-Supervised Few-Shot Classification. (用于半監督少樣本分類的元學習)1. 摘要2. 介紹2. 背景3 半監督少樣本學習4. 其他5. 論文連結

左邊是未利用未标記資料之前的原型,有色實線邊框是 S \mathcal{S} S,虛線邊框是 R \mathcal{R} R,而白色實線邊框是 Q \mathcal{Q} Q。利用未标記資料提煉新的原型,也就是黑色實心點位置變化。

3.1.1 soft k-means 原型網絡:

p ~ c = ∑ i h ( x i ) z i , c + ∑ j h ( x ~ j ) z ~ j , c ∑ i z i , c + ∑ j z ~ j , c , \tilde{\boldsymbol{p}}_{c}=\frac{\sum_{i} h\left(\boldsymbol{x}_{i}\right) z_{i, c}+\sum_{j} h\left(\tilde{\boldsymbol{x}}_{j}\right) \tilde{z}_{j, c}}{\sum_{i} z_{i, c}+\sum_{j} \tilde{z}_{j, c}}, p~​c​=∑i​zi,c​+∑j​z~j,c​∑i​h(xi​)zi,c​+∑j​h(x~j​)z~j,c​​, where z ~ j , c = exp ⁡ ( − ∥ h ( x ~ j ) − p c ∥ 2 2 ) ∑ c ′ exp ⁡ ( − ∥ h ( x ~ j ) − p c ′ ∥ 2 2 ) \tilde{z}_{j, c}=\frac{\exp \left(-\left\|h\left(\tilde{\boldsymbol{x}}_{j}\right)-\boldsymbol{p}_{c}\right\|_{2}^{2}\right)}{\sum_{c^{\prime}} \exp \left(-\left\|h\left(\tilde{\boldsymbol{x}}_{j}\right)-\boldsymbol{p}_{c^{\prime}}\right\|_{2}^{2}\right)} z~j,c​=∑c′​exp(−∥h(x~j​)−pc′​∥22​)exp(−∥h(x~j​)−pc​∥22​)​

首先利用原先的原型為每個無标記資料配置設定一個屬于各個類别的機率。然後在計算提煉後的新的原型的時候把這一機率考慮進去。

3.1.2 soft k-means 和幹擾項簇的原型網絡:

3.1.1 的方法具有一個隐含假設,就是所有的無标記資料屬于這個任務中的某一個類别,但這與我們考慮的第二種問題不符合。因為幹擾項會嚴重損害後面的預測推斷過程以及提煉過程。是以我們需要排除這些幹擾項的影響。我們假設幹擾項的簇以原點為中心:

p c = { ∑ i h ( x i ) z i , c ∑ i z i , c  for  c = 1 … N 0  for  c = N + 1 \boldsymbol{p}_{c}=\left\{\begin{array}{ll}{\frac{\sum_{i} h\left(\boldsymbol{x}_{i}\right) z_{i, c}}{\sum_{i} z_{i, c}}} & {\text { for } c=1 \ldots N} \\ {\mathbf{0}} & {\text { for } c=N+1}\end{array}\right. pc​={∑i​zi,c​∑i​h(xi​)zi,c​​0​ for c=1…N for c=N+1​

N 個類别原型的計算不變,幹擾項原型在原點。

z ~ j , c = exp ⁡ ( − 1 r c 2 ∥ x ~ j − p c ∥ 2 2 − A ( r c ) ) ∑ c ′ exp ⁡ ( − 1 r c 2 ∥ x ~ j − p c ′ ∥ 2 2 − A ( r c ′ ) ) , \tilde{z}_{j, c}=\frac{\exp \left(-\frac{1}{r_{c}^{2}}\left\|\tilde{\boldsymbol{x}}_{j}-\boldsymbol{p}_{c}\right\|_{2}^{2}-A\left(r_{c}\right)\right)}{\sum_{c^{\prime}} \exp \left(-\frac{1}{r_{c}^{2}}\left\|\tilde{\boldsymbol{x}}_{j}-\boldsymbol{p}_{c^{\prime}}\right\|_{2}^{2}-A\left(r_{c^{\prime}}\right)\right)}, z~j,c​=∑c′​exp(−rc2​1​∥x~j​−pc′​∥22​−A(rc′​))exp(−rc2​1​∥x~j​−pc​∥22​−A(rc​))​, where A ( r ) = 1 2 log ⁡ ( 2 π ) + log ⁡ ( r ) A(r)=\frac{1}{2} \log (2 \pi)+\log (r) A(r)=21​log(2π)+log(r)

其中 r c r_{c} rc​ 是我們引入的長度尺量來表示簇内距離的變化,特别是對于幹擾簇。

3.1.3 soft k-means 和 masking 的原型網絡:

首先計算樣本 x ~ j \tilde{\boldsymbol{x}}_{j} x~j​ 與 p c \boldsymbol{p}_{c} pc​ 之間的正則化距離 d ~ j , c \tilde{d}_{j, c} d~j,c​ :

d ~ j , c = d j , c 1 M ∑ j d j , c , \tilde{d}_{j, c}=\frac{d_{j, c}}{\frac{1}{M} \sum_{j} d_{j, c}}, d~j,c​=M1​∑j​dj,c​dj,c​​, where d j , c = ∥ h ( x ~ j ) − p c ∥ 2 2 d_{j, c}=\left\|h\left(\tilde{\boldsymbol{x}}_{j}\right)-\boldsymbol{p}_{c}\right\|_{2}^{2} dj,c​=∥h(x~j​)−pc​∥22​

然後為每個原型估計自己的 thresholds 和 slopes,估計的過程是通過送到一個小的神經網絡中得到的:

[ β c , γ c ] = MLP ⁡ ( [ min ⁡ j ( d ~ j , c ) , max ⁡ j ( d ~ j , c ) , var ⁡ j ( d ~ j , c ) , skew ⁡ ( d ~ j , c ) , kurt ⁡ j ( d ~ j , c ) ] ) \left[\beta_{c}, \gamma_{c}\right]=\operatorname{MLP}\left(\left[\min _{j}\left(\tilde{d}_{j, c}\right), \max _{j}\left(\tilde{d}_{j, c}\right), \operatorname{var}_{j}\left(\tilde{d}_{j, c}\right), \operatorname{skew}\left(\tilde{d}_{j, c}\right), \operatorname{kurt}_{j}\left(\tilde{d}_{j, c}\right)\right]\right) [βc​,γc​]=MLP([minj​(d~j,c​),maxj​(d~j,c​),varj​(d~j,c​),skew(d~j,c​),kurtj​(d~j,c​)])

masks m j , c m_{j, c} mj,c​ 計算如下:

p ~ c = ∑ i h ( x i ) z i , c + ∑ j h ( x ~ j ) z ~ j , c m j , c ∑ i z i , c + ∑ j z ~ j , c m j , c , \tilde{\boldsymbol{p}}_{c}=\frac{\sum_{i} h\left(\boldsymbol{x}_{i}\right) z_{i, c}+\sum_{j} h\left(\tilde{\boldsymbol{x}}_{j}\right) \tilde{z}_{j, c} m_{j, c}}{\sum_{i} z_{i, c}+\sum_{j} \tilde{z}_{j, c} m_{j, c}}, p~​c​=∑i​zi,c​+∑j​z~j,c​mj,c​∑i​h(xi​)zi,c​+∑j​h(x~j​)z~j,c​mj,c​​, where m j , c = σ ( − γ c ( d ~ j , c − β c ) ) m_{j, c}=\sigma\left(-\gamma_{c}\left(\tilde{d}_{j, c}-\beta_{c}\right)\right) mj,c​=σ(−γc​(d~j,c​−βc​))

4. 其他

實驗,結論,相關工作以及 ImageNet 的新的劃分等請參考原論文。

5. 論文連結

《Meta-Learning for Semi-Supervised Few-Shot Classification》:https://arxiv.org/pdf/1803.00676.pdf

繼續閱讀