【精品】12條核心知識帶你了解機器學習
作者:James Le
翻譯:BigQuant
機器學習演算法可以通過學習就可以弄清楚如何去執行一些重要的任務。在手動編程不可行的情況下,這種方法通常既可行又經濟有效。隨著可獲取的數據在逐步增多,越來越多更加複雜的問題可以用機器學習來解決。事實上,機器學習已經被廣泛的運用到計算機以及一些其他領域。然而,開發出成功的機器學習應用需要大量的「black art」,這些內容是很難在教科書中找到的。
我最近讀了華盛頓大學的Pedro Domingos教授的一篇十分驚艷的技術論文,題是「A Few Useful Things to Know about Machine Learning」。 它總結了機器學習研究人員和實踐者所學到的12個關鍵的經驗及教訓,包括要避免的陷阱,需要關注的重點問題以及常見問題的答案。我想在本文中分享這些十分寶貴的經驗教訓,因為當你思考解決下一個機器學習問題時,這些經驗會對你十分有用。
1.學習 = 表示 + 評估 + 優化
所有的機器學習演算法通常由3個部分組成:
- 表示:分類器必須用計算機能處理的某種形式語言來表示。 反過來講,為學習器選擇一種表示就等於選擇它可能學習的一組分類器集合。這個集合被稱為學習器的假設空間。如果某個分類器不在假設空間中,那麼就不能被學習到。與此相關的一個問題是如何表示輸入,也就是說要用哪些特徵,本文稍後介紹。
- 評估:需要一個評估函數來區分好的分類器和壞的分類器。機器學習演算法內部使用的評估函數可能與我們希望分類器優化的外部評估函數有所不同,為了更好的優化,接下來會進一步討論。
- 優化:最後,我們需要一種方法可以在假設空間中找到評價函數得分最高的那個分類器。優化技術的選擇對於學習器的效率至關重要,並且當評估函數有多個最優值時,優化技術也有助於確定所產生的分類器。 初學者開始使用現成的優化器是很常見的,之後這些方法會被定製設計的優化器所取代。
2.泛化才是關鍵
機器學習的最終目的是將訓練模型應用在除訓練樣本之外的其他數據中。因為無論我們訓練時有多少數據,在測試的時候我們都不太可能再次遇到與這些訓練時的詳細數據完全相同的情況。在訓練集上獲得好的結果很容易。機器學習初學者中最常見的錯誤就是對訓練數據進行測試並自以為大獲成功。如果選擇的分類器在全新的數據上進行測試,它們通常表現的還不如隨機猜測所得的結果好。所以,如果你要僱傭某人來構建分類器,一定要保留一些數據給你自己,之後再用這些數據來測試他們給你的分類器。反過來講,如果你被雇來構建分類器,從一開始就劃分出一些數據用作之後的測試,在你用全部數據進行訓練並得到您的分類器過後,再用這部分數據來測試你最終選擇的分類器。
3.只有數據是不夠的
將泛化作為目標還有另一個主要的問題:只有數據是不夠的,不管你有多少數據。
這似乎是個相當令人沮喪的消息。那麼我們還怎麼希望學到所有東西呢?幸運的是,在現實世界中我們想學習的函數並不是均勻的來自所有可能函數的!事實上,許多通用的假設往往會起很大的作用 ——像平滑性、相似的示例有相似的分類、有限的相關性、或有限的複雜性等,這也是機器學習會取得成功的很大一部分原因。與演繹法一樣,歸納法是一種知識槓桿:將少量的知識輸入轉化成大量的知識輸出。歸納是一個比演繹更強大的槓桿,需要更少的知識輸入來獲取有用的結果,但是,它終究還是不能在沒有知識輸入的情況下工作。而且,正如槓桿一樣,我們投入的越多,我們可以獲取的知識就越多。
綜上來看,機器學習需要知識這點並不奇怪。機器學習不是魔術, 它並不能做到從無到有。它可以做到的是從少變多。像所有的工程技術一樣,編程有很多工作要做:我們必須從抓取開始構建所有的東西。機器學習更像是種田,讓大自然完成大部分的工作。農民將種子與營養物質結合起來種植莊稼。而機器學習則是將知識與數據結合起來,來構建模型。
4.過擬合有多張面孔
如果我們的知識和數據不足以完全學習出正確的分類器怎麼辦?那麼我們就冒著得到一個幻想中的分類器的風險來構建,這些分類器可能與實際情況相差甚遠,它簡單的將數據中的巧合當做了一般情況。這個問題被稱為「過擬合」,是機器學習中的難題。當你的學習器輸出的分類器在訓練數據上有100%的準確率,但在測試數據上只有50%的準確率的時候,這就是過擬合。在正常情況下,無論在訓練集還是在測試集它的準確率都應該為75%。
在機器學習中,每個人都知道過擬合,但它有很多形式,有些並不會馬上顯現出來。理解過擬合的一種方法是將泛化誤差分解為偏差和方差。偏差是學習器有不斷學習同樣錯誤的傾向。方差是學習器傾向於去學習隨機事物,不考慮真實信號是如何。線性學習器有很高的偏差,因為當兩個類的交界不是一個超平面時,線性學習器就無法進行歸納。決策樹就不存在這個問題,因為它們可以表示任意布爾函數,但在另一方面,決策樹有較大的方差:決策樹在同一現象產生的不同訓練集上學習,所便顯出的結果是完全不同的,但理論上它們的結果應該是相同的。
交叉驗證有助於減弱過擬合,例如通過使用交叉驗證來選擇決策樹的最佳尺寸來學習。但這不是萬能的,因為如果我們使用了過多的參數,那模型本身就已經開始過擬合了。
除了交叉驗證之外,還有很多方法可以預防過擬合的問題。最常用的方法就是給評估函數添加一個正則項。這樣做可以懲罰許多較為複雜的模型,從而有利於產生較為簡單的模型。另一種方法是在添加新的結構之前,通過像卡方檢驗來測試統計顯著性,以確定加入這種結構是否會有幫助。當數據十分稀少時,這些技術特別有用。儘管如此,你還是應該對存在某種技術可以「解決」過擬合問題這樣的說法持懷疑態度,這十分容易就會讓過擬合變為欠擬合。想要同時避免這兩種情況需訓練出一個完美的分類器,根據天下沒有免費的午餐原理,如果事先並沒有足夠的知識,不會有任何一種單一技術可以一直表現最好。
5.高維度下直覺失效
在過擬合之後,機器學習中最大的問題就是維度災難。 這個表達式是由Bellman在1961年提出的,指出了一個事實:當輸入是高維度時,許多在低維度上工作正常的演算法效果變得很差。 但是在機器學習領域,維度災難這個詞還有更多的含義。隨著示例數據的維數(特徵數量)的升高,正確地泛化的難度在以指數增加,因為固定大小的訓練集只覆蓋了輸入空間的一小部分。
高維空間中比較普遍的問題是我們直覺失效,我們來自三維世界的直覺通常不適用於高維空間。在高維空間中,多元高斯分布的大部分質量並不接近平均值,而是在逐漸遠離均值的一層「殼」上;打個比方,一個高維度的橙子的大部分質量都在皮上,而不在瓤里。如果恆定數量的示例在高維超立方體中均勻分布,那麼超出某個維度後,大多數示例將更接近於超立方體的一個面。如果我們在超立方體內內接一個超球面,那麼在高維度下,超立方體的幾乎所有質量都將分布在超球面之外。這對於機器學習來說是個壞消息,因為機器學習經常用一種類型的形狀來近似另一種類型的形狀。
在二維或三維空間內建立分類器是很容易的;我們可以通過肉眼觀察找出不同類別的示例之間合理的分界線。但是在高維度空間中我們很難理解正在發生什麼。反過來說這讓設計一個好的分類器變得很難。人們可能會天真的認為收集更多的特徵並不會有什麼害處,因為在最壞的情況下,它們也只不過不提供關於類別的新信息而已,但在實際情況下,這樣做的好處可能遠小於維度災難所帶來的問題。
6.理論擔保與實際看上去並不一樣
機器學習論文中充滿了理論的擔保。最常見的類型是可以確保良好泛化所需要的示例數據的界限。你應該如何理解這些擔保呢?首先,需要注意它們是否可行。歸納傳統上與演繹是相反的:在演繹中你可以保證結論是正確的;在歸納中這些都不好說。或者說這是許多世紀以來留下的傳統觀點。近幾十年來的一個顯著的提升是,我們認識到在實際情況中我們可以對歸納的結果的正確性有所保證,特別是如果我們願意接受概率擔保。
我們必須小心邊界所包含的意義。例如,邊界並不意味著,如果你的學習器返回了一個與特定訓練集上相一致的假設,那麼這個假設可能泛化的很好。邊界的意思是,給定一個足夠大的訓練集,很有可能你的學習器要麼可以返回一個泛化良好的假設,要麼無法找到一個保持正確的假設。這個邊界也無法告訴我們如何去選擇一個好的假設空間。它只告訴我們,如果假設空間包含了真實的分類器,那麼學習器輸出一個不好的分類器的概率會隨著訓練數據的增加而減少。如果我們縮小假設空間,邊界就會有所改善,但是假設空間包含真實分類器的幾率也會降低。
另一種常用的理論擔保是漸近:給定無限的數據,可以保證學習器輸出正確的分類器。這個保證讓人欣慰,但僅僅因為漸進的保證而確定一個學習器是十分草率的。在實踐中,我們很少處於漸近狀態。而且,由於上文討論的偏差 - 方差的權衡,在無限數據下,如果學習器A比學習器B表現好,則在有限數據中,學習器B往往比學習器A表現的要好。
機器學習中理論保證的主要作用不是作為實踐中決策的標準,而是在演算法設計中作為理解和驅動的來源。在這方面,他們是相當有用的;事實上,理論與實踐的密切配合是機器學習多年來取得如此巨大進步的主要原因之一。但要注意:學習是一個複雜的現象,因為學習器既有理論證實,並且可實際應用,但這並不意味著前者是後者的依據。
7.特徵工程是關鍵
在一天結束時,總有一些機器學習項目會成功,而一些會失敗。是什麼造成了它們之間的差異?顯然最重要的影響因素是特徵的使用。如果你有許多獨立的特徵, 這些特徵類別都有很好的關聯,那麼學習起來就很容易。另一方面,如果這個類別與特徵的關係十分複雜,那麼你可能就無法學習它。通常情況下,原始數據不可直接用來學習,但是可以從中構建特徵。這通常是機器學習項目中主要工作所在。它往往也是機器學習中最有趣的一部分,直覺,創造力和「black art」與技術一樣重要。
初學者常常驚訝於機器學習項目中真正用於學習的時間太少。但是,如果你考慮了在數據收集,整合,清理和預處理上所花費的時間,以及在特徵設計中進行的無數次試驗與失敗,這些就都說得通了。另外,機器學習不是建立數據集和運行學習器的一個一次性過程,而是一個運行學習器,分析結果,修改數據和/或學習器等不斷重複,反覆迭代過程。真正的學習通常是這些內容中最快的一部分,這是因為我們已經非常精通它了!特徵工程更加困難,因為它是一個特定領域的,而學習器在很大程度上是通用的。但是,這兩者之間沒有明確的界限,這也是最有用的學習器往往是那些可以促進知識整合的學習器的另一個原因。
8.更多的數據勝過更聰明的演算法
在大多數計算機科學中,有兩種主要資源是有限的:時間和內存。在機器學習中,還有第三種:訓練數據。其中哪一個資源會成為瓶頸是隨著時間而改變的。在八十年代,瓶頸往往是數據。當今通常是時間。現在大量的可用數據,但並沒有足夠的時間來處理它們,所以這些數據常常被棄用。這就造成了一個悖論:即使原則上更多的數據意味著我們可以學習更複雜的分類器,而實際上我們通常會使用簡單的分類器,因為複雜的分類器需要很長的時間去學習。
使用更聰明的演算法取得的回報要比你預期的更少,一部分原因是,機器學習的工作機制都十分的相似。這個結論也許令你十分吃驚,特別是當你考慮到規則集和神經網路的表示方法差異是很明顯時。但事實上,命題規則可以很容易被編碼為神經網路,並且其他表示之間也存在類似的關係。所有學習器本質上都是通過將附近的示例分到同一類內來工作;關鍵的區別在於對「附近」的定義。對於非均勻分布的數據,不同的學習器可以產生廣泛不同的邊界,同時在重要領域(即具有大量訓練示例,並且測試示例也有很大概率出現的領域)仍能做出相同的預測。這也有助於解釋為什麼強大的學習器雖然不穩定,但仍然準確。
通常,首先嘗試最簡單的學習器是值得的(例如,在邏輯回歸之前先嘗試樸素貝葉斯,在支持向量機之前先嘗試近鄰)。更複雜的學習器固然誘人,但他們通常來說更難使用,因為它們需要調節更多的參數才能獲得好的結果,並且他們的內部機制更不透明)。
學習器可以分為兩大類:一類的表示具有固定大小的,比如線性分類器,另一類的表示可以隨著數據一起增長,如決策樹。固定大小的學習器只能利用有限的數據。原則上可變大小的學習器可以利用給定的充足數據學習任何函數,但實際上由於演算法和計算成本的限制,這些通常是無法做到的。而且,由於維度災難,不存在會被認為充足的數據量。正是因為這些原因,只要你願意付出努力,聰明的演算法(那些充分利用數據和計算資源的演算法)往往最終會得到回報。設計學習器和學習分類器之間沒有明確的界限;相反,任何給定的知識都可以在學習器中編碼或從數據中學習。所以機器學習項目往往會有學習器設計這一重要組成部分,機器學習實踐者需要在這方面具備一定的專業知識。
9.要學習許多模型,不僅僅是一個
在機器學習的早期,每個人都有自己喜歡的學習器,並有一些先入為主的觀念堅信它的優越性。人們付出大量的努力去嘗試它的多種變化,並選擇其中最好的一個。之後,通過系統的實踐比較表明,最好的學習器是隨著應用的改變而有所不同的,因此包含許多不同學習器的系統開始出現。現在,努力嘗試許多學習器的不同變化,仍然是為了選擇最好的那一個。但隨後研究人員注意到,如果不是只選最好的那一個,而是將多種情況進行結合,結果會更好——通常要好得多——而且對用戶來說幾乎不需花費額外的努力。
現在創建這樣的模型集成已經實現標準化。最簡單的集成技術稱為bagging,我們通過重採樣簡單地隨機生成不同的訓練集,每個集合上分別學習一個分類器,並通過投票的方式將結果進行合併。這是有效的,因為它大大降低了方差,而只是稍微增加了偏差。在boosting方法中,每個訓練樣本都有權重,而且這些都是不同的,以至於每個新的分類器都集中在前面那些往往會出錯的例子上。在stacking方法中,單個分類器的輸出會成為「高級」學習器的輸入,這個學習器可以計算出如何最好地組合這些來自「低層」的輸出。
還存在許多其他技術,現在的趨勢是越來越大的集成。在Netflix大獎中,來自世界各地的團隊爭相構建最佳視頻推薦系統。隨著比賽的進行,團隊們發現通過將他們的學習器與其他團隊的學習器進行合併,會取得了最好的結果,並且可以合併為越來越大的團隊。冠軍和亞軍都合併超過了100個學習器,並且這兩者集成後又進一步提升了效果。毫無疑問,我們將來會看到更大的集成學習器。
10.簡單並不意味著準確
著名的奧卡姆剃刀原理稱,如果沒有必要就不要增加實體。在機器學習中,這通常意味著,給定兩個具有相同訓練誤差的分類器,兩者中較簡單的那個可能具有最低的測試誤差。有關這一說法的證明在文獻中經常出現,但實際上有很多反例,並且「沒有免費的午餐」定理也暗示它不可能是真實的。
我們在前一節已經看到一個反例:模型集成。集成模型的泛化誤差會隨著添加分類器而不斷的改進。因此,與直覺相反,一個模型的參數的數量與其過擬合之間並沒有必然的聯繫。
相反,一個更成熟的觀點是將複雜性等同於假設空間的大小,基於以下事實,較小的假設空間允許由較短的代碼表示。像上面的理擔保證那節提到的邊界可能被視為在暗示更短的假設泛化的更好。這還可以通過給有一些先驗偏好空間中的假設分配更短的代碼做進一步改善。但是,如果把這看作準確性和簡單性之間權衡的「證明」,這就是是循環論證了:我們更喜歡簡單的假設,如果它們是準確的,那是因為我們的偏好是準確的,而並不是因為這些假設在我們選擇的表述中是「簡單」。
11.可表示並不意味著可學習
本質上,用於大小可變的學習器的所有表示都具有形式為「每個函數都可以被表示,或者以無限接近的方式近似被表示」的相關定理。正因如此,某種表示方法的忠實使用者經常忽視所有其他的方法。然而,僅僅因為一個函數可以被表示並不意味著它是可以被學習的。例如,標準的決策樹學習器並不能學習出比其訓練樣本更多的葉子節點。 在連續空間中,使用一組固定的基元來表示很簡單的函數通常都需要無限數量的項來表示。
而且,如果假設空間具有許多評價函數的局部最優值,那麼往往是這樣,學習器即使可以表示,也很可能找不到真正的函數。對於有限的數據,時間和內存,標準學習器只能學習所有可能函數的很小一部分子集,這些子集對於學習器來說會隨著表示方法的不同而改變。 因此,關鍵問題不是「它能否被表示」,答案往往是無關緊要的,而是「它能否被學習?」而且這讓我們去嘗試不同的學習器(也可能是把它們結合起來)是值得的。
12.相關並不意味著因果
相關並不意味著因果這一點經常被提起,就不值得在這裡做過多地說明了。但是,儘管我們所討論的那種學習器只能學習相關性,但他們的結果往往被視為代表因果關係。這麼做是錯的嗎?如果是,那麼人們為什麼都這樣做呢?
往往學習預測模型的目標是用它們作為行動的指南。 如果我們發現啤酒和尿布經常在超市中被一起購買,那麼也許把啤酒放在尿布旁邊就會增加銷量。但除非真正的做實驗,否則很難說明這一點。機器學習通常被應用在觀測數據上。 一些學習演算法可以潛在地從觀測數據中提取因果信息,但是它們的適用性相當有限。另一方面,相關性是一個潛在的因果關係的標誌,我們可以用它作為進一步考察的指導。
結論
像任何學科一樣,機器學習有許多「民間智慧」在書本上很難了解到,但這些知識對成功運用機器學習來說至關重要。多明戈斯教授的論文總結了其中幾條最重要的內容。
原文下載鏈接:12條核心知識帶你了解機器學習
本文由BigQuant《量化研究每周精選》原創推出,版權歸BigQuant所有,轉載請註明出處。
《量化研究每周精選》每周一期,為大家提精選研報、前沿研究、熱門文章等優質內容。
查看所有 量化研究每周精選。歡迎投稿 (i@bigquant.com)。- 更多精彩文章歡迎前往 BigQuant社區 查看並參與討論:BigQuant人工智慧量化社區
- 加入 人工智慧量化投資交流群,與大牛共討人工智慧量化話題:微信搜索 bigq100,添加微信群管理員微信,附上姓名、所在機構、部門和職位,審核後管理員會邀請您入群。
- 關注 BigQuant 微信公眾號,及時獲取新鮮資訊:微信搜索 BigQuant, 獲取更多人工智慧、Machine Learning、量化投資相關文章。
推薦閱讀:
※2-1 Model Representation
※如何利用手機遠程調參
※斯坦福機器學習筆記10密度分布估計の混合高斯模型
※2018AI學習清單丨150個最好的機器學習和Python教程