「特徵工程」與「表示學習」

「特徵工程」與「表示學習」

來自專欄數據說131 人贊了文章

1. 表示學習

當我們學習一個複雜概念時,總想有一條捷徑可以化繁為簡。機器學習模型也不例外,如果有經過提煉的對於原始數據的更好表達,往往可以使得後續任務事倍功半。這也是表示學習的基本思路,即找到對於原始數據更好的表達,以方便後續任務(比如分類)

舉個簡單的例子,假設我們有 {{x,y}} ,想要尋找xy之間的關係。

[ x= egin{bmatrix} 1 & 2 & 1 & 0 \ 2 & 3 & 2 & 1 \ 1 & 6 & 1 & 4 \ 0 & 0 & 0 & 1 \ 1 & 1 & 1 & 17 end{bmatrix} ][ y= egin{bmatrix} 6 \ 10 \ 14 \ 18 \ 22 end{bmatrix} ]

如果單用肉眼看的話,x這個矩陣其實還是比較複雜的,無法直接發現與y間的關係。但如果我們非常幸運,發現x每行相加後的結果 [4,8,12,16,20]^T ,就可以直接看出xy之間的關係是 y=x+2 。這個例子是為了說明:同樣的數據的不同表達,會直接決定後續任務的難易程度,因此找到好的數據表示往往是機器學習的核心任務。值得注意的是,在現實情況中我們所提煉的到表示往往是很複雜的,往往對於高維矩陣提取到特徵也是高維矩陣。這個例子僅供拋磚引玉之用,表示學習不等於維度壓縮或者特徵選擇。

2. 特徵工程與表示學習:人工 vs. 自動

正因為數據表示的重要性,機器學習一般有兩種思路來提升原始數據的表達:

  1. 特徵學習(feature learning),又叫表示學習(representation learning)或者表徵學習,一般指的是自動學習有用的數據特徵
  2. 特徵工程(feature engineering),主要指對於數據的人為處理提取,有時候也代指「洗數據」

不難看出,兩者的主要區別在於前者是「學習的過程」,而後者被認為是一門「人為的工程」。用更加白話的方式來說,特徵學習是從數據中自動抽取特徵或者表示的方法,這個學習過程是模型自主的。而特征工程的過程是人為的對數據進行處理,得到我們認為的、適合後續模型使用的樣式。根據這個思路,機器學習模型對於數據的處理可以被大致歸類到兩個方向:

1. 表示學習:模型自動對輸入數據進行學習,得到更有利於使用的特徵(*可能同時做出了預測)。代表的演算法大致包括:

    • 深度學習,包括大部分常見的模型如CNN/RNN/DBN等
    • 某些無監督學習演算法,如主成分分析(PCA)及自編碼器(autoencoder)通過對數據轉化而使得輸入數據更有意義
    • 某些樹模型可以自動的學習到數據中的特徵並同時作出預測

2. 特徵工程:模型依賴人為處理的數據特徵,而模型的主要任務是預測,比如簡單的線性回歸期待良好的輸入數據(如離散化後的數據)

至於更加深入的對於數據表示學習的科普,可以參考:微調:人工智慧(AI)是如何處理數據的?

3. 模型選擇

回歸到問題的本質,就要談談什麼時候用「手工提取」什麼時候用「表示學習」。一種簡單的看法是,要想自動學習到數據的良好表達,就需要大量的數據。這個現象也解釋了為什麼「特徵工程」往往在中小數據集上表現良好,而「表示學習」在大量複雜數據上更有用武之地。

而一切的根本,其實在於假設。比如我們會假設數據分布,會假設映射函數的性質,也會假設預測值與輸入值間的關係。這一切假設其實並非憑空猜想,而是基於我們對於問題的理解,從某種角度來看,這是一種先驗,是貝葉斯模型。在中小數據集上的機器學習往往使用的就是強假設模型(人類知識先驗)+一個簡單線性分類器。當數據愈發複雜,數據量逐漸加大後,我們對於數據的理解越來越膚淺,做出的假設也越來越傾向於隨機,那麼此時人工特徵工程往往是有害的,而需要使用擺脫了人類先驗的模型,比如深度學習或者集成模型。

換句話說,模型選擇的過程其實也是在衡量我們對於問題及數據的理解是否深刻,是在人類先驗與數據量之間的一場博弈。從這個角度來看,深度學習首先革的是傳統機器學習模型的命:最先被淘汰的不是工人,而是特定場景下的傳統機器學習模型。

但話說回來,在很多領域數據依然是稀缺的,我們依然需要人工的手段來提煉數據。而這樣的嘗試其實並不罕見,我也寫過一篇「Stacking」與「神經網路」介紹如何模擬神經網路在中小數據集上無監督的抽取特徵,並最終提升數據的表示。另一個相關的問題是,到底多少數據才算多?可以參考這篇文章:「機器學習」到底需要多少數據?。

4. 總結

從這個方向推廣出去可以聯想到很多熱門的話題,比如在問題A上學到的數據表達可以在問題B上使用(遷移學習),拋棄和合併冗餘特徵(維度壓縮與特徵選擇等)。從本質上來看,這些都是在挖掘數據中的核,即最關鍵的濃縮信息。

然而,相同的數據對於不同的任務也要求不同的數據表達,最優的數據表示並非是絕對的。類比來看,人類是由細胞組成的,器官也是由細胞組成的。在器官層面來看,細胞是很好的表達。而從人類角度來看,器官是比較好的表達,因為我們可以通過身高體重來區分人,而無法直觀地通過細胞來區分人。然而再往前看一步,每個人的細胞攜帶不同的遺傳信息,因此也可以被認為是一種很強的數據表達。講這個故事的目的是說明,什麼是好的數據表達,其實是非常模稜兩可的問題,在不同語境下可能大不相同

推薦閱讀:

如何在語義分割中使用弱監督方法
10分鐘機器學會打牌——21點
【ML專欄】【2018Q1】(4)眾包vs有監督學習
深度學習實踐 & 自然場景下的文本檢測與識別(2)

TAG:機器學習 | 數據挖掘 | 人工智慧 |