當前位置:
首頁 > 新聞 > 概念深奧看不懂?一文讀懂元學習原理

概念深奧看不懂?一文讀懂元學習原理

選自fastforwardlabs

作者:Shioulin and Nisha

參與:一鳴、思源


據說元學習是一種學習如何學習的方法,那麼它到底和一般的機器學習有什麼不同呢?從學習某個任務到學習一大堆任務,本文將解答你想知道的元學習原理。

從手機應用的內容推薦,到尋找暗物質,機器學習演算法已經改變了人們的生活和工作方式。但是,傳統機器學習演算法很大程度上依賴標於特定的標註數據,這一定程度上限制了在某些場景下的應用。

近來,一些研究提出了解決方法,如使用預訓練模型的遷移學習。但是在一些場景中,缺乏可提供預訓練的原始數據,場景中的數據可能和預訓練使用的數據不盡相同,單類別的樣本也可能太少,例如罕見疾病的診斷或稀有物種的歸類等。因此,很多研究者開始關注元學習(Meta-Learning)演算法,它可以解決極少樣本情況下的模型訓練問題。這種新方法被認為是通向一般人工智慧的重要一步。

本文是一篇元學習的原理掃盲博客,作者通過一個簡單的圖像分類案例,介紹了元學習背後的邏輯,感興趣的朋友可以通過這篇文章,從概念上理解元學習和傳統機器學習演算法的不同。

元學習是什麼?

主動學習可以幫助我們更聰明地對特定數據創建標籤。如果恰當得應用這一技巧,與一般的模型相比可以使用更少的數據進行訓練。而在元學習的領域,我們不再關注獲取標籤。與之相反,我們嘗試讓機器從少量的數據中更快的學習。

概念深奧看不懂?一文讀懂元學習原理

圖 1:元學習的概念框架。元學習從大量任務訓練模型,並通過少量數據在新任務中更快地學習。

訓練元學習器需要一個學習器和一個訓練器。學習器(模型)的目標是快速利用少量數據學習新任務。因此,學習器有時也被稱為快速學習器(fast learner)。「任務」在這裡是指任何

監督學習

問題,比如預測少量樣本的類別。這個學習器可以用元學習器訓練,從而能從大量其他類型的任務中學習。學習過程主要即元學習器不斷向學習器展示成百上千種任務,最終學習器就會學得眾多任務的知識。學習後,需要經過兩個階段:第一個階段關注從每個任務中快速獲取知識;在第二階段(學習器)緩慢將信息從所有任務中取出並消化。

我們用一個實例來說明一下。例如,我們的目標是訓練一個將圖片分類到 4 個類別(貓、熊、魚和鳥)的分類器,但是每個類別只有少量的帶標籤數據。為了實現這一目標,我們首先定義一個學習器,這個學習器的目標即預測二分類問題,且每個類別只有三個樣本。我們然後定義一個元學習器,元學習器的工作是向學習器展示任意兩個類別的樣本組合,且每個類別只有三個樣本。

和一般的深度學習將大量標註數據分為不同的 Batch 不一樣,元學習的訓練數據表現為集合(set)的形式。首先,我們需要一組樣本,或者被稱為「支持集」(support set),它由一些屬於樣本子集的圖片構成。例如,在我們的例子中,支持集應該由三張貓和三張熊的圖片組成。我們同時需要指定被分類圖片,它們組成了一個「目標集」(target set)。在我們的例子中,目標集應該是一些貓或者熊的圖片。支持集和目標集共同構成了一個訓練 episode。元學習器學習各種各樣的訓練集,並將它們一個訓練集一個訓練集的展示給學習器。學習器的工作則是嘗試將每一個訓練集中的目標集圖片正確的分類。

概念深奧看不懂?一文讀懂元學習原理

圖 2:元學習的訓練集。在例子中,需要對貓、熊、魚和鳥一共 4 類圖片進行分類,但每次構建訓練集時,只使用這些分類的子集,並將訓練集分為支持集和目標集。第一個訓練集的支持集是貓和魚的圖片(3 張),目標集是魚和貓各 1 張圖片,它們都需要進行分類。第二個訓練集中,使用貓和熊的圖片作為支持集,目標集同樣是貓和熊的圖片。多種類的訓練集組合(貓+魚,貓+熊,熊+魚)不僅可以使快速學習器學習每一個子集的分類,還可以使它抽取類別之間的共性和特性。

元學習領域的論文經常使用 k 和 N,k 代表了快速學習器學習的機會,N 代表了快速學習器被要求分類的數量。在我們的例子中,N = 2,k = 3,說明這是一個「兩步三次」(two-way three-shot)的元學習設置。

聰明的讀者可能已經意識到,雖然我們的目標是訓練一個可以區分四個類別的分類器(貓,熊,魚和鳥),但是每個訓練集只有兩種類別,這是元學習的一個特點。元學習的訓練過程,最初是由 Oriol Vinyals 在他的匹配網路(matching networks)論文(鏈接:https://arxiv.org/abs/1606.04080)中提出的,其基於的原則是訓練和測試條件必須匹配。

我們不向快速學習器一次性展示所有類別的原因是因為,當我們在少數幾個類別中只展示一些圖片時,我們希望模型能夠正確的預測結果(在推斷時)。另外,並不是所有的類別都會被用於訓練集。在我們的例子中,我們可能只使用三類,並希望模型能夠準確預測最後一個類別。元學習器可以實現這一點,因為它可以訓練並泛化到其他數據集上。每次只給快速學習器展示一個訓練集的數據,它只能獲得所有類別中一個小子集。元學習器通過多次循環訓練集,每次給快速學習器一個不同的子集。最後,快速學習器不僅可以快速給每個小子集分類,它也可以從所有類別中抽取他們的共性和各自的特性。

分類中的相似性

如果我們有一些圖片樣本,並需要對新圖像進行分類,我們本能的會對比新圖片和樣本,尋找和新圖片最相似的樣本,並將這個樣本的類別作為新圖片的類別。為了對新的(目標)圖片進行分類,基於已有的樣本(支持集),首先尋找和新圖片最相似的樣本,然後使用這個樣本的類別進行預測。

在匹配網路中,圖片被轉換為嵌入向量,它可以被認為是一組特徵(線和邊)或圖片的密集型表示。匹配網路的目標是,對轉換為嵌入向量的圖片,尋找與其最相似的支持集合圖片標籤。

當一個目標集合的圖片被分類到一個未見過的類別,匹配網路將其視為和其他圖片一樣的樣本。新圖片將和最相似圖片歸於一個支持集,並使用這個類別用於預測。

概念深奧看不懂?一文讀懂元學習原理

圖 3:匹配網路的工作原理。支持集合中有獅子、大象和狗三類,而待分類的圖片類別未知。通過嵌入函數將每一個類別(獅子、大象、狗和未知圖片)轉換為嵌入向量,並使用關係函數(如 Softmax)計算已知分類和未知分類的相似度。圖片來自 Hands on Meta Learning with Python,chapter 4。

內部表示

實際上,之前的方法利用了基於嵌入的距離向量,去對比新圖片和支持集中的樣本圖片。這個模型可以使我們從概率的角度,建立新圖片和已有樣本圖片的聯繫。訓練後,我們獲得了一個可以生成捕捉了圖片中的特性和共性的圖片表示(通過嵌入向量)。這說明了另一種根據少量訓練數據就可以快速訓練機器的方法。

我們首先要尋找可以很容易適應新任務的內部表示,因此模型可以根據少量的數據點快速適應新任務。在深度學習的背景下,內部表示可以被視為神經網路的一組參數。一個好的內部表示可以廣泛適應多種任務。對表示的微調可以使模型在新任務中工作良好,這些調整經常出現在遷移學習中。在使用遷移學習的特徵抽取例子中,訓練網路只需要使用少量的新數據點,並只調整網路的最後一層的權重。使用新數據點對整個模型(或參數)進行重新訓練也是可能的,這一過程也被稱作微調(fine-tuning)。

但是這種神奇的內部表示從何而來?在遷移學習中,這種表示是預訓練神經網路在大量數據中訓練得到。初始化後,新的小數據集會重新訓練神經網路,既可以是整體的,可能是局部的(只有最後一層)。獲得這種表示的另一種方法是採用一組初始的神經網路參數(參考鏈接:https://arxiv.org/abs/1703.03400)。當這個網路由正確的參數進行初始化,它就可以快而簡單地使用少量新數據進行調整。這說明,初始的一組神經網路參數可能對新任務非常敏感,小的參數變化會極大提高損失函數在任何任務上的表現。

概念深奧看不懂?一文讀懂元學習原理

圖 4:損失函數在不同任務上的梯度。當初始化一個理想的神經網路後,損失函數的梯度會根據新任務發生變化。

這一方法的基本思路是:我們首先訓練一個具有初始參數的模型,即在新任務中使用一個 eposide 的數據進行訓練。在訓練中,初始的參數被更新。模型的目標是尋找一組初始的參數,在新任務的評價中,可以使損失在使用新參數的時候很小。

這一思路是由遷移學習啟發而來,但是遷移學習需要一定數量的數據集,所以在數據集非常小或在和預訓練數據非常不同的數據集上效果不佳。元學習中的優化策略則是:優化一組初始參數,或優化一個可以快速在每個任務上表現良好的模型,嘗試用系統性的方法去學習一種在各種任務中都非常優秀的初始化參數。

元學習現狀總結

元學習被認為是可行的,因為它研究了如何從有限帶標籤數據中學習的問題,儘管元學習需要不同的數據組合模式。在傳統的機器學習問題中,我們關注獲取一個類別中大量的樣本。在元學習中,我們的關注點轉向收集許多種類的任務。間接的,這說明我們需要收集許多不同類別的數據。

在我們的例子中,我們使用了四個分類(貓、熊、魚和鳥)並定義了一個在每一類只提供三個樣本的情況下,做二分類的情況。這提供了 6 個(從 4 個樣本中選擇 2 個)不同的任務,而且這些顯然是不夠的。因此,在元學習中,儘管我們不需要很多貓的樣本,我們確實需要很多不同種類動物的樣本。進一步的,在推斷中,也需要構建支持集合和目標集合,這是一種不同的數據需求(或限制)。

很多情況下這種成本是比較高的,甚至在研究中,數據集只能被限制在 Omniglot 和 miniImagenet 中。Omniglot 數據集有一共 1623 個手寫字母,每個字母有 20 個樣本。在 miniImagenet 數據集中,則有 100 個來自 ImageNet 的數據集,每個有 600 個樣本。

元學習是一個快速發展的領域,但是它不會被單一的演算法主宰。目前最可行的一類演算法似乎是基於優化的方法:這些方法來自遷移學習,並且可能會被快速採用。我們希望在相關演算法變得成熟後,元學習能夠(在領域內)更加的重要,尤其是在商品分類或罕見疾病的分類任務上。在這些任務中,數據分布在多個類別下,但是每一個類別可能只有一些樣本。

參考資料

  • 原文地址:https://blog.fastforwardlabs.com/2019/05/22/metalearners-learning-how-to-learn.html
  • 從零開始,了解元學習(附 Pytorch 代碼):https://www.jiqizhixin.com/articles/meta-learning-intro
  • Hands on Meta Learning with Python:https://github.com/sudharsan13296/Hands-On-Meta-Learning-With-Python
  • 這是一本正在 Github 上更新的元學習 Python 教程書,介紹了包括 Siamese、Prototype Network、Matching Network、Model Agnostic Meta Learning 等的原理和 Kears 或 Tensroflow 的具體實現。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

百行代碼變十行,蘋果SwiftUI可視化編程讓開發者驚呼完美
「決戰紫禁之巔」之深度學習框架篇:Keras VS PyTorch

TAG:機器之心 |