您的位置:首頁>文化>正文

經典重譯|來自華盛頓大學教授的機器學習“內功心法”

本文最初發表在 《ACM通訊》2012年第10輯。 作者是華盛頓大學教授, 著名的機器學習專家 Pedro Domingos。 作者2016年憑藉暢銷書《終極演算法》而名聲大噪, 成為全球機器學習領域代表人物之一。

而5年前 Domingos 教授發表的這篇“內功心法”, 也是整個國外機器學習領域幾乎人人必讀的一篇文章。 在很多大學的機器學習課程以及優達學城等線上培訓體系中, 都推薦學生精讀此文。

這篇文章高屋建瓴的介紹了機器學習實踐當中若干需要關注、而又不見於一般教科書的問題, 堪稱經驗之談, 非常寶貴。 國內的機器學習愛好者多次翻譯過這篇文章, 但是翻譯品質良莠不齊。 為此小編委託高手重譯此文, 再次發表以饗各位小夥伴, 強烈建議大家收藏, 有時間的話多讀幾遍。

經典”, 即可獲得原始PDF檔。

作者 | Pedro Domingos

導讀 | 孟岩

翻譯 | AI科技大本營(rgznai100)

機器學習系統可以自動從資料中學習程式。 這種方法比起手工程式設計更具吸引力。

近10年, 機器學習發展勢頭迅猛, 已不僅限於電腦科學, 還被用於網路搜索, 垃圾郵件篩檢程式、推薦系統、廣告植入、信用評分、欺詐檢測、股票交易、藥物設計以及其他應用上。

麥肯錫全球研究院近日發佈了一篇報告, 斷言機器學習(即資料採擷和預測分析)將會驅動下一次革新浪潮。 市面上有好些不錯的教科書適合感興趣的從業人員和研究人員(比如, Mitchell and Witten etal.)。 但是, 很多在實踐當中極其重要的“內功心法”, 教科書裡是沒有的, 結果就導致很多機器學習項目浪費了大量的時間, 或最後沒有得到想要的結果。 然而, 大部分的內功心法並不難講清楚, 本文試圖做一個解說。

機器學習種類很多, 但為了方便說明,

我主要就集中在最成熟、使用範圍最廣的一個類型:分類。 但我要討論的問題適用於所有類型的機器學習。

分類器是輸入(一般來說)一個離散向量以及/或者連續特徵值, 然後輸出一個單一的離散值, 即類別。 比如, 垃圾郵件篩檢程式把郵件分為“垃圾郵件”和“非垃圾郵件”, 輸入值可能是一個布林向量x = (x1,…,xj,…,xd), 如果字典裡以j開頭的單詞出現在郵件裡, 那麼xj = 1, 若沒出現, 則xj = 0。 學習器輸入一組訓練樣本 (xi, yi), 其中xi = (xi,1, . . . , xi, d)為可觀察輸入, yi為對應的輸出, 輸出的是一個分類器。 學習器就是要測試這個分類器以後輸入樣本xt時, 是否還能得出正確的輸出值yt(例如, 垃圾郵件篩檢程式是否能把之前未見過的郵件正確分類)。

機器學習=表示+評價+優化

假如你有一款應用,

你覺得機器學習能夠對其有所幫助。 那麼擺在你面前的第一個大難題就是可供選擇的學習演算法種類繁多, 讓人眼花繚亂, 到底選哪一個呢?現有的演算法就有數千種, 而每年又有數百種演算法相關著作出版。 在這樣繁多的演算法中不致迷失的關鍵, 就是明白演算法的三大組成部分:

表示:一個分類器一定要用電腦能夠處理的形式化語言來表示。 反之, 選擇一個學習器的表示就等價於選擇一個可能具有學習能力的分類器集。 這個集被稱為學習器的假設空間(hypothesis space)。 如果一個分類器沒有在假設空間內, 那麼學習器就無法學習。 之後我會講一個相關問題, 就是如何表示輸入值, 換言之, 就是要用什麼特徵。

評價:評價函數(也叫做目標函數或者打分函數)用於區分分類器的好壞。 為了便於優化, 通過演算法生成用於內部的評價函數和優化分類器的外部評估函數並不相同。

優化:最後, 我們需要一個方法來找到分數最高的分類器。 優化技術對於提升學習器效率至關重要, 如果評價函數得出了多個分類器, 那麼就由優化來決定最終的去留。 通常來說, 新的學習器開始都用現成的優化器, 之後會換成定制的優化器。 附表為三大成分的範例。

例如,K近鄰演算法通過確定K個最相似訓練樣本,將出現最多的類別定為測試樣本的類別。基於超平面的演算法形成每個類別特徵的線性組合,並將得分最高的線性組合作為預測結果。決策樹在每個內部節點測試一個特徵,一個分支代表一個特徵值,枝葉是分類預測結果。

演算法1 決策樹歸納

演算法1就是布林域決策樹學習器的基本框架,使用了資訊增益和貪婪搜索。資訊增益(xj, y)是特徵xj和類別y之間的互資訊。節點製造(x,c0,c1)得出測試特徵X 的節點值,把c0 作為x = 0的子類, c1 作為 x = 1的子類。當然,不是表格中一個成分的所有組合都有相同意義。比如,離散表示通常用組合優化,而連續表示就用連續優化。然而,很多學習器既有離散成分也有連續成分,事實上,也許不久後在一些學習器上就會有所有可能的組合了!很多教材都是按照表示來安排的,這樣容易忽略其他重要的部分。選擇這些沒什麼捷徑,但落實到機器學習專案上,有些部分會更重要一些。

泛化才是關鍵

機器學習的根本目標就是訓練出超越樣本的泛化模型,這是因為無論我們有多少資料,我們都不太可能在測試中再次看到這些具體的樣本。(請注意,如果字典裡有100,000個單詞,垃圾郵件篩檢程式要就可能要描述2^100,000 多不同輸入)。訓練集表現得好很容易(只要記住所有的樣本就行了)。

機器學習初學者們普遍犯的一個錯誤就是用訓練資料進行測試,結果很理想,就以為自己成功了。當用該分類器測試新資料的時候,結果比隨機猜測好不了多少。所以,如果你雇別人來創建分類器,記得要自己私藏一點資料,他們把分類器給你的時候,自己測一下。

如果你被聘請去創建一個分類器,一開始就保留些資料,等到最後完成的時候用來測試,最後基於所有的資料結果,你就知道自己的分類器怎麼樣了。測試資料可能會以一些潛在方式對分類器造成污染,比如,如果我們用測試資料調超參。(機器學習演算法有大量的超參,超參的調整關乎成敗,所以要重點關注)。當然,留出資料會減少訓練量,但交叉驗證法可以緩解這個問題:隨機把你的訓練資料分成10個子集,每次選一個子集做訓練,該子集的並集留下,作為測試集,測試結果的均值就可以讓我們知道參數集表現如何。

在機器學習早期,人們對於將訓練資料和測試資料分開的意義認識不深。這其中部分原因是,如果學習器的表示有限(比如,超平面),那麼訓練集和測試集的誤差就不明顯。但是,隨著分類器靈活性增加(比如,決策樹),或者有大量特徵值的線性分類器,則訓練與測試集的隔離是絕對必要的。

把泛化作為關鍵會給機器學習帶來一個有趣的結果。不像其他優化問題,我們沒法訪問我們想優化的函數!我們只能用訓練錯誤代替測試錯誤,這樣會有很大的問題(之後會談到如何解決)。但好的一方面是,因為目標函數只是最終目標的代理,我們不用完全優化它:實際上,通過簡單的貪婪搜索得到的局部優化可能會比全域最優更好。

光有資料還不夠

把泛化作為關鍵還會帶來另一個重要的後果:不管你有多少資料,光有這些資料是不夠的。比如從100萬個樣本中得到了100個變數的布耳函數,還有2^100 – 10^6個樣本的類別是你不知道,那要怎麼把這些類別弄清楚呢?在沒有其他資訊的情況下,不就只能靠扔硬幣隨機決定了。

早在200多年前,著名的哲學家大衛·休謨就提出人的認識是有限的,但直到今天,很多機器學習犯錯的根源就是沒有意識到這件事。每個學習器一定要包含資料沒有提供的知識和假設,這樣才能將資料泛化。Wolpert在他著名的“沒有免費午餐”理論中確定了這一概念。根據這個概念,隨機猜測會打敗學習了所有函數的學習器。

這聽上去讓人很沮喪。那我們怎樣才能學習呢?幸運的是,我們在現實世界中學的函數並非均勻的來自所有可能的數學函數!實際上,一些泛泛的假設——像平滑,樣本相似則類別相似,依賴性有限、複雜度有限等等——就足夠了,這就是機器學習能夠成功的很大一部分原因。和推理一樣,歸納(學習器要做的)就是一個知識杠杆:輸入少量知識輸出大量知識。歸納比推理更強大,輸入知識更少,卻得到有用的結果。

當然,和所有的杠杆一樣,輸入的越多,得到的就越多。選擇表示的關鍵是看哪種知識更容易表達。比如,如果我們懂得大量使樣本相似的知識,那麼例子導向方法是一個不錯的選擇。如果我們有概率相關性的知識,那麼就用圖形模型。如果我們知道每個類別要用那種預測,那麼“如果……那麼……”規則會是個最好的選擇。好的學習器僅僅固化假設是不夠的,還要允許我們能夠明確表述它們,任意改變它們,並且能夠自動把它們用於學習中(比如,用一階邏輯或者程式)。

綜上,在機器學習中需要知識沒什麼可驚訝的。機器學習不是魔術,不能無中生有,而是由少變多。程式設計需要我們一切都從零做起。機器學習更像是種地,讓大自然來做大部分工作。農民把肥料和種子混在一起長出莊稼。而學習器和資料知識合在一起就長出了程式。

過擬合有好幾副面孔

要是我們的知識和資料不足以讓我們得到一個好的分類器呢?那麼我們很可能就臆造一個分類器,把資料中的各種隨機抖動都當真了。這個問題就叫做過擬合,是機器學習中常出現的問題。當你的學習器輸出的分類器在訓練集上準確率達100%,而測試集僅50%,而事實上兩者的準確率都應為75%,這個時候就發生了過擬合。

每個瞭解機器學習的人都知道過擬合,但其表現方式不盡相同。發現過擬合的辦法之一就是把泛化誤差分解為偏差和方差。偏差是學習器持續學習一種錯誤東西,而方差是指學習器做出的決斷與輸入信號無關,是隨機的。

圖1. 飛鏢的偏差和方差

如圖1所示,用飛鏢做類比。一個線性學習器偏差很高,因為兩個類別之間的交界不是超平面時,學習器就不能進行歸納。決策樹不會發生這個問題,因為它們可以表示任何布耳函數,但是它們會出現很高的方差,由同樣的現象引出的問題,在不同的資料集上訓練,決策樹模型會得到完全不同的結果,而理論上來說,它們應該是一樣的。

相同的問題也出現在優化方式的選擇上:在選擇優化演算法時,束搜索比貪婪搜索有更低的偏置,但有更高的方差,因為它用到了更多的假設。因此,與我們的直覺相反,真正優秀的分類器不一定要比差的分類器表現更好。

圖2. 那怕真分類器是規則集,樸素貝葉斯也比決策樹學習器要好

如圖2所示,即使真正的分類器是規則集,在訓練樣本不到1000個的時候,樸素貝葉斯分類器比決策樹分類器精確度更高。哪怕貝葉斯假設錯誤,介面是線性,準確率還是很高!這樣的情況在機器學習中很常見:較強的錯誤假設會比較弱的正確假設表現更好,這是因為後者需要更多的資料來避免過擬合。

交叉驗證可以避免過擬合,比如,通過它來選擇合適大小的決策樹進行學習。但這也不是萬能的,如果我們用來製造過多的參數選擇,交叉驗證就會自行開始過擬合。

除了交叉驗證之外,還有其他各種方式來預防過擬合。

其中最常用的方法是在評價函數中加入正則項。這樣可以對於過於複雜的模型進行處罰,因而系統更容易產生結構簡單的模型。

另外一種方式是在加入新的結構之前通過卡方驗證來檢驗統計顯著性,以此來判斷加入此結構是否有助於提升效果。當資料不足時,這些方法非常有用。然而,如果有誰生成某種方法可以完全“解決”過擬合問題,你應當持懷疑態度。因為很容易就從過擬合變成欠擬合。想要同時做到避免過擬合和欠擬合需要設計出完美的分類器,然而根據“天下沒有免費的午餐”原理,在沒有足夠知識的前提下,沒有任何一個分類器能夠在各種情況下都表現最好。

一個關於過擬合的誤解是,認為它是雜訊造成的,比如說訓練樣本的標籤標錯了。這確實會讓過擬合加重,因為這會讓學習器產生出變換反復的決策面,以滿足這些樣本的標定。但是在沒有雜訊的情況下, 也可能發生嚴重的過擬合。例如,假設我們有一個布林型分類器需要把訓練集中的正樣本找出來(換句話說,分類器以析取範式的方式,將訓練集中樣本的特徵結合起來)。這個分類器將訓練集中的樣本正確分類,而將測試集中的正樣本全部錯誤分類,無論訓練集中有沒有雜訊。

多重假設檢驗與過擬合十分相關。標準的統計檢驗一次只能檢驗一種假設,而學習器可以同時檢驗百萬種。結果是,看上去很重要的假設也許實際上並沒有多重要。例如,如果有一家信託基金公司連續十年業績領先於業內,你會覺得它很厲害,但是如果仔細一想,如果每年任何一家公司都會有50%的概率領先,那麼它就有可能很幸運地連續十年領先。這個問題可以通過加入一系列的假設,做顯著性測試來判斷,但同樣會帶來欠擬合的問題。一種更加有效的方式是控制錯誤接受的比例,也稱為錯誤發現率。

高維度直覺失誤

除了過擬合之外,機器學習最大的問題就是維度災難了,這個說法是1961年Bellman提出來的,很多演算法在低維度表現不錯,但是一旦輸入值為高維度就應付不了了。但在機器學習中,這個說法還有更多含義。隨著樣本的維度(特徵值)增加,泛化的難度也按指數遞增,因為大小固定的訓練集在輸入空間只占很少一部分。那怕1萬億個樣本,維度為100的訓練集也只占了輸入空間10^-18的部分。這就是為什麼機器學習如此必要而複雜。

更嚴重的是,機器學習演算法依賴(顯式或者隱式)的相似性推理在高維度會崩潰。想像一個K近鄰分類器把漢明距離作為相似性度量,假設類別就只是x1 ∧ x2,沒有其他特徵,這很簡單。但如果還有98個不相關的特徵x3,..., x100,那麼它們的噪音就會淹沒x1和x2之間的信號,最近鄰分類會有效地做出隨機預測。

更令人困擾的是,如果100個特徵都相關,那麼近鄰演算法也會出現問題,這是因為在高維度所有樣本都很相似。假如,所有的樣本都分佈在規則網格內,有個測試樣本Xt,如果網格是d維度,Xt的2d鄰近樣本和它距離都相同,所以隨著維度增加,越來越多的樣本成為了xt的近鄰樣本,近鄰樣本的選擇就變得隨機了。

這僅僅是高維度帶來的一個問題:我們的本能來自三維世界,沒法應用于高維度世界。在高維度世界,多元高斯分佈大部分的品質不是靠近均值,而是在其周圍距離不斷增加的“殼”裡。高維度的橘子的品質主要就集中在果皮上,而不是果肉裡。如果一個數量恒定的樣本均勻地分佈在一個高維度超立方體中,大部分樣本應該靠近超立方體的表面而不是近鄰。如果我們把超球體刻進超立方體中來近似超球體,在高維度中,幾乎超立方體所有的量都在超球體的外面。這對機器學習來說是個壞消息,因為一種類別的形態常常靠其他形態來近似。

在一維和二維建分類器很容易,我們通過肉眼觀察就可以在不同類別樣本之間找到合理介面。(如果人能看到高維度那機器學習也沒什麼必要了。)但是一到高維度,我們就很難理解發生了什麼。這也給設計分類器帶來了難度。有人會覺得特徵越多越好,大不了就是沒什麼新資訊嘛。

但實際上,因為維度災難,弊會大於利。不過好在有種效應叫做“非均勻性祝福”會部分消除這種詛咒。在大部分應用中,樣本不是均勻分佈在示例空間內,而是集中或者靠近低維流形。比如,K近鄰演算法特別適用於手寫數位識別,那怕數位圖像每圖元上就有一個維度。因為數位圖像的空間比圖像空間小很多。學習器可以隱式地利用這種較低的有效維度,或演算法來顯式地減少使用的維度(比如,Tenenbaum)。

理論保證不一定有用

機器學習論文裡滿是各種理論保證,最常見的一種就是限制樣本數量來保證泛化成功。你怎麼看呢?首先,它們有可能是真的。歸納一般來說和推理是對立的:在推理中,你可以保證所有結論是正確的,但在歸納就正好相反。這是幾個世紀以來的一個老觀念了。近十多年來的一個重大進步就是我們意識到可以保證歸納的結果,尤其是如果我們想解決概率保證。

論證方式很簡單。如果真錯誤率大於ε,我們就認為這是個壞分類器。所以壞分類器的可能性是和n 隨機一致,獨立訓練樣本小於(1 − ε)n。把b作為壞分類器在學習器假設空間H中的數量。通過一致限,使得它們中至少一個的可能性持續低於b(1 − ε)n。假設學習器總是會得到一個一致的分類器,而壞分類器出現的概率就小於|H|(1 − ε)n 而我們默認b ≤ |H|。所以如果我們希望可能性小於δ,讓n > ln(δ/|H|)/ ln(1 − ε) ≥ 1/ε (ln |H| + ln 1/δ)就夠了。

但不幸的是,我們對這種保證要持保留態度,因為通過這種方式得到的邊界會非常鬆散。上述邊界一個非常棒的特徵就是樣本需求數量以|H| 和 1/δ的對數增長。大部分假設空間都是按多個d特徵值呈雙指數的,這樣我們就還需要一些d的指數樣本。例如,有一個布林變數的布耳函數。如果這裡有e個不同樣本,那麼就有2e不同的函數。那麼有2d 個不同的函數,那麼函數總量就為22d。就算假設空間只有指數的,邊界還是非常鬆散,因為一致限很悲觀。例如,有100個布林特徵,而假設空間是決策樹,有10層,為了保證上述邊界δ = ε = 1%,我們需要50萬個樣本。但實際上只要一小部分就可以滿足學習了。

另外,我們還要警惕這樣的邊界意味著什麼。它不是說,如果你的學習器得到一個與訓練集一致的假設,就意味著假設成功,而是說明訓練集夠大的話,你的學習器要麼得到一個好的假設,要麼就是沒法找到一個一致的假設。這個邊界也沒有告訴我們怎麼選擇一個好的假設空間,只告訴了我們,如果一個假設空間包含了真分類器,那麼學習器輸出壞分類器的概率就會隨訓練集的減少而下降。如果我們壓縮假設空間,那麼邊界會提高,前提是其包含的真分類器也壓縮了(有些情況真分類器不在假設空間內,但該理論同樣適用。)

另外一種理論保證是漸近:給無窮的資料,保證學習器輸出正確的分類器。這是一種確認,但可能會導致我們輕率地下決定去選擇某一種分類器。事實上,我們很少會遇到漸近區。是因為之前我所討論的偏差-方差權衡問題,如果學習器A 在無限資料上比B 好,那麼B在有限資料上一定比A好。

理論保證不是實際操作的準則,而是演算法設計理解和驅動的源泉。

就這方面來看,理論保證還是很有用的;實際上,理論和實踐之間密切的相互作用是機器學習這些年能取得巨大成就的主要原因。但機器學習是一個複雜的現象,不能因為學習器有了理論證明,在現實中運作,就說著前者是後者的原因。

特徵工程是關鍵

有的機器學習項目成功了,有的沒有,是什麼原因呢?最重要的原因就是其使用的特徵。如果你有多個獨立特徵且每個都和類別相關,那麼你的機器學習就很容易成功。另一方面,如果類別都是複雜的特徵函數,那麼就不容易學習。

通常,原始資料不是很好學習,但是你可以從資料中建構特徵。這常常是機器學習項目中最費功夫的地方,也是最有趣的部分,在這部分直覺、創造力、“歪門邪道”和技術的東西同樣重要。

初學者往往會很驚訝,在一個機器學習項目中,真正用在做機器學習這部分的時間很少,大部分都花在了資料收集、整合、清理和預處理,以及反復的特徵設計。另外,機器學習不是建完資料庫,運行學習器,一次就搞定的事情,而是要不斷地運行學習器,分析結果,調整資料或者學習器,然後反復的一個反覆運算的過程。學習通常是這裡面花時間最少的一部分。特徵工程很複雜因為它是域特定的,而學習器則很大程度上是通用的。然而,這兩者之間沒有沒有明顯分界。這也就是為什麼好的學習器是和知識相結合的。

當然,機器學習的聖杯之一就是使越來越多的特徵工程過程自動化。現在常用的一種方法就是自動生成大量的候選特徵,然後通過資訊增益來選擇最好的。但是要記住單獨特徵互相也許無關,但合併在一起就會關係了。例如,如果這個分類是輸入特徵為k的XOR,每個特徵都沒有類別相關資訊,另一方面,運行大量特徵的學習器來尋找哪些在合併時有用會花費大量的時間,導致過擬合。所以,說到底在特徵工程上,還得靠人的能力。

資料多比演算法聰明更好

假設你建了最好的特徵集,但是你拿到的分類器並不完全準確。你要怎麼辦呢?

有兩種選擇:設計一個更好的演算法,或者收集更多的資料(更多樣本、更多原始特徵,受制于高維詛咒)機器學習研究者常常更關心前者,但實際上收集資料這個辦法更容易成功。根據經驗,一個一般的演算法,如果資料多,會優於資料較少的高深演算法。(畢竟,機器學習就是讓資料來幹活的。)

但這就會帶來另一個問題:可擴展性。

在大部分電腦科學中,兩大受限資源是時間和記憶體。而在機器學習中,還有第三個:訓練數據。不同時期的技術瓶頸就在這三大限制中變換。20世紀80年代,資料是瓶頸,而今天,是時間。大量的資料是有的,但是沒有足夠的時間去處理。這就會導致一個悖論:理論上資料越多意味著可以學習更複雜的分類器,但實際上,最後還是用的更簡單的分類器,因為複雜分類器學習時間更長。一個解決方法是想出更快的方式來學習複雜的分類器,在這方面也的確有顯著的成果(比如,Hulten and Domingos)。

使用高深的演算法沒有預期那麼理想的原因是,大部分演算法都差不多。如果你認為規則集神經網不同的話,你可能會對此感到很驚訝。但實際上,命題規則很容易編為神經網路,其他表示之間也有類似關係。所有學習器都是把近鄰樣本放進一個類別,而關鍵是什麼叫“近鄰”。在資料分佈不均時,學習器儘管產生不同介面,卻依然可以做出相同預測(訓練樣本多的,通常測試樣本也會大量出現)。這也能解釋為什麼好的學習器不穩定,但還是很準確。圖3為二維展示,在高維度效果越明顯。

圖3所示,不同邊界會產生相同預測(+和-是兩個類別的訓練樣本)

所以規則就是首先使用簡單的學習器(比如,先用貝葉斯而非羅輯回歸,先用K近鄰演算法而不是支援向量機)。越複雜的學習器越吸引人,但用起來卻很難,因為它們需要調節的按鈕太多才能得到想要的結果,也因為它們的內部不夠透明。

學習器可以分成兩大類:一是表示有固定大小的,比如線性分類器,還有表示隨資料增加的,比如決策樹(後者有時被稱做非參數學習器。但很不幸,它們常常比參數學習器學的參數更多。)大小固定的學習器只能從大量資料中獲益(注意一下圖2中貝葉斯演算法的漸近線約在70%左右)。

大小變化的學習器理論上只要資料足夠,可以學習任何函數,但實際上不行,因為演算法有限(比如,貪婪搜索會陷入局部最優)或者計算開銷不足。而且,因為高維詛咒,現有資料可能不夠。基於這些原因,高深演算法—充分利用資料和計算資源的—最後常常會成功。設計學習器和學習分類器之間沒有太大差別,任何知識可以在編碼進學習器中或從資料中學習。所以機器學習項目的學習器設計最後成為最重要的部分,從業者們需要具備一定的專業知識。

到最後,最大的瓶頸不再是資料或者CPU週期,而是人。很多論 文中,學習器基本都在精准度和計算預算方面做比較。人為努力和洞察力很難測量,但往往更重要。這會幫助學習器創建人們可以理解的輸出(比如,規則集)。充分利用機器學習的機構已經準備好基礎設施使用各種學習器、資料資源和簡單有效的學習問題來進行實驗,並且在那些機構中機器學習專家和應用領域專家合作密切。

學習更多的模型

在機器學習的早期,每個人都有自己喜歡的學習器,相信它的優越性。我們花了大量的時間來嘗試其變體,然後選擇最好的一個。後來系統實證比較發現學習器的好壞是隨應用不同而改變的,所以搭載不同學習器的系統就開始出現了。人們就開始努力嘗試多個學習器的變體,然後還是選擇最好的那個。但後來研究者們發現,如果把多個學習器合在一起,結果會更好,使用者也不費什麼功夫。

現在創建這樣的集成模型已經成為一種標準了。最簡單的一種技術,叫做bagging.我們通過重採樣的方式生成隨機訓練集,每個訓練集學習一個分類器,最後通過投票合成結果。這樣的方式能成功的原因在於其大大減少方差的同時,只稍提高了偏差。在boosting中,訓練樣本有權重,而這些權重各不相同,所以每個新的分類器都會關注之前分類器分錯的樣本。在stacking中,獨立分類器輸出變成了“更高級”學習器的輸入,並且stacking在想辦法進行最優組合.

現存的技術有很多,集成越做越大已經成為了一種趨勢。

在Netflix prize大賽上,來自全世界的團隊互相競爭,創建最好的視頻推薦系統(http://netflixprize.com)。隨著比賽的進程,團隊發現通過合併其他團隊的學習器可以得到最好的結果,然後團隊之間互相合併,越來越大。冠、亞軍都是上百個學習器的集成。當然,我們在未來還會看到更大的集成。

模型集合不應和貝葉斯模型平均(BMA)—理論上最優的學習方法—相混淆。在BMA中,新樣本的預測是通過在假設空間中取所有分類器各個預測的平均值,由分類器解釋訓練資料的表現,和我們對其的期待來權衡。除了表面相似,其實集成和BMA非常不同。集成改變了假設空間(比如,從單個決策樹變成了所有決策樹的線性集合),可以呈現出各種形式。BMA根據固定公式將權重分配給原始空間的假設。BMA權重和bagging或者boosting產生的權重完全不同:後者非常平均,而前者非常傾斜,直到某單一最高權重分類器占主導地位使得BMA選擇它。這樣產生的結果就是,集成模型是機器學習包中關鍵的一部分,而BMA卻沒人選擇。

簡單不意味著準確

奧卡姆剃刀原理說:如無必要,勿增實體。在機器學習中,這常常意味著,如果兩個分類器有同樣的訓練錯誤,簡單的那個訓練器測試錯誤率會更低。這種說法常常在文學中很常見,但實際上有很多反例,“免費午餐”定理就可以對此進行反駁。

我們在前面就看到了一個反例:模型集合。即使訓練誤差達到0之後,通過增加分類器也可以提升增強集成的泛化誤差。另一個反例就是支援向量機,可以有效地擁有無限量的參數而不會過度擬合。相反,函數符號(sin(ax))可以區分任意大的,任意標記的x軸上的點,即使它只有一個參數。因此,和直覺相反,模型的參數量和過度擬合之間沒有必然聯繫。

更複雜的視圖反而使複雜度與假設空間的大小相等,因為較小的空間允許用更短的代碼表示假設。理論保證部分的界限可能被視為表明較短的假設泛化得更好。這可以通過將更短的代碼分配給我們有一些先驗偏好的空間中的假設來進一步改進。但是將其視為在準確性與簡單性之間權衡的“證明”是迴圈推理:我們假設我們更傾向於設計簡單,如果它們是準確的,那是因為我們的偏好是準確的,而不是因為我們選擇的表示中的假設是“簡單”的。

這還會產生的另一個複雜情況是沒有學習器會徹底搜索假設空間。假設空間更大的學習器如較少的假設比從較小空間中嘗試更多假設的學習器過擬合的可能性低。正如Pearl所指出,真正影響訓練和測試誤差的是選擇假設的過程,而假設空間的大小只是對此的一個粗略指導。Domingos調查了奧卡姆剃刀在機器學習問題上的主要論點和證據。結論是,更簡單的假設應該是首選的,因為簡單本身就是一種美德,而不是因為與準確性的假設聯繫。這也可能是奧卡姆的本意。

可表示不意味著可學習

基本上所有學習器的表示都和“所有函數都可以被表示,或者以無限接近的方式近似表示。”這樣的理論相關。為了證明這個定理,表示的擁護者們常常會忽視其他東西。然而,函數可以被表示並不意味著可以被學習。比如,決策樹學習器不能學習超過訓練集的葉子節點。

在連續空間中,即使用固定基元集表示那怕最簡單的函數也常常需要無窮的部分。如果假設空間有評價函數的局部最優,實際上也常常出現,那麼即使可以被表示,學習器也許也找不到真正的函數。有了有限的資料、時間和記憶體,標準學習器只能學習所有函數的小部分子集,而這些子集對表示不同的學習器是不同的。所以關鍵問題不是“能不能被表示?”因為答案常常不重要,而是“能不能被學習?”這個問題值得去嘗試不同的學習器(或者合併它們)。

對於某些函數,有些表示在會比其他函數指數上更緊湊。結果就是,它們可以需要成指數減少的資料來學習函數。有些學習器是通過簡單基本函數的線性合成形成的。比如,支援向量機圍繞一些訓練樣本(支援向量)形成內核合成。通過這種方式形成n位元的同位性需要2n的基本函數,但是使用一個表示需要多層(就是在輸入和輸出之間有好幾步),同位性可以編碼在線性大小的分類器裡。尋找這種深度表示是現在機器學習的重要前沿。

相關並非因果

相關性不是因果性這個觀點可能常常被提到,不太值得在這裡贅述。但是,只能用來學習相關性的學習器產生的結果常常被用來表示因果關係,這樣錯了嗎?如果錯了,為什麼人們這麼做呢?

學習預測模型就是用它們作為行動導向。如果我們發現啤酒和尿布常常是一併購買,那麼也許把啤酒放在尿布旁邊會增加銷量。(這是資料採擷世界的一個著名例子。)但沒有實驗,也很難判定是否正確。機器學習常常用來觀測資料,預測變數常常不受學習器的控制,而實驗資料受控。有些學習演算法可以從觀察資料中提取資訊,但是這樣的應用還是非常有限。另一方面,相關性是潛在因果聯繫的標誌,所以我們把相關性作為進一步調查的導向(比如,嘗試想弄清楚因果鏈是什麼)。

很多研究者認為因果性是一種虛設。例如,在物理定律中就沒有因果概念。因果性是不是真的存在是一個很深奧的哲學問題,眼下也沒有答案。但在機器學習上還是有兩點很實在,首先,不管我們是不是把它們稱作“因果”,我們是要為行為做預測,而不是僅僅將觀測變數相聯繫。第二,如果你可以獲得實驗資料(比如,隨機將遊客分到了一個網站的不同版本中),那麼要一定竭盡全力。

結論

和所有的學科一樣,機器學習很大量的“內功心法”難以獲得.但是對成功很重要。本文總結了一些突出項目。當然,這也只是傳統機器學習的補充。點擊http://www. cs.washington.edu/homes/pedrod/class觀看完整的線上機器學習課程。在http://www.videolectures.net 你會找到機器學習課程的寶藏,還有,Weka是一個很棒的開源機器學習包。

最後,祝你學的開心!

例如,K近鄰演算法通過確定K個最相似訓練樣本,將出現最多的類別定為測試樣本的類別。基於超平面的演算法形成每個類別特徵的線性組合,並將得分最高的線性組合作為預測結果。決策樹在每個內部節點測試一個特徵,一個分支代表一個特徵值,枝葉是分類預測結果。

演算法1 決策樹歸納

演算法1就是布林域決策樹學習器的基本框架,使用了資訊增益和貪婪搜索。資訊增益(xj, y)是特徵xj和類別y之間的互資訊。節點製造(x,c0,c1)得出測試特徵X 的節點值,把c0 作為x = 0的子類, c1 作為 x = 1的子類。當然,不是表格中一個成分的所有組合都有相同意義。比如,離散表示通常用組合優化,而連續表示就用連續優化。然而,很多學習器既有離散成分也有連續成分,事實上,也許不久後在一些學習器上就會有所有可能的組合了!很多教材都是按照表示來安排的,這樣容易忽略其他重要的部分。選擇這些沒什麼捷徑,但落實到機器學習專案上,有些部分會更重要一些。

泛化才是關鍵

機器學習的根本目標就是訓練出超越樣本的泛化模型,這是因為無論我們有多少資料,我們都不太可能在測試中再次看到這些具體的樣本。(請注意,如果字典裡有100,000個單詞,垃圾郵件篩檢程式要就可能要描述2^100,000 多不同輸入)。訓練集表現得好很容易(只要記住所有的樣本就行了)。

機器學習初學者們普遍犯的一個錯誤就是用訓練資料進行測試,結果很理想,就以為自己成功了。當用該分類器測試新資料的時候,結果比隨機猜測好不了多少。所以,如果你雇別人來創建分類器,記得要自己私藏一點資料,他們把分類器給你的時候,自己測一下。

如果你被聘請去創建一個分類器,一開始就保留些資料,等到最後完成的時候用來測試,最後基於所有的資料結果,你就知道自己的分類器怎麼樣了。測試資料可能會以一些潛在方式對分類器造成污染,比如,如果我們用測試資料調超參。(機器學習演算法有大量的超參,超參的調整關乎成敗,所以要重點關注)。當然,留出資料會減少訓練量,但交叉驗證法可以緩解這個問題:隨機把你的訓練資料分成10個子集,每次選一個子集做訓練,該子集的並集留下,作為測試集,測試結果的均值就可以讓我們知道參數集表現如何。

在機器學習早期,人們對於將訓練資料和測試資料分開的意義認識不深。這其中部分原因是,如果學習器的表示有限(比如,超平面),那麼訓練集和測試集的誤差就不明顯。但是,隨著分類器靈活性增加(比如,決策樹),或者有大量特徵值的線性分類器,則訓練與測試集的隔離是絕對必要的。

把泛化作為關鍵會給機器學習帶來一個有趣的結果。不像其他優化問題,我們沒法訪問我們想優化的函數!我們只能用訓練錯誤代替測試錯誤,這樣會有很大的問題(之後會談到如何解決)。但好的一方面是,因為目標函數只是最終目標的代理,我們不用完全優化它:實際上,通過簡單的貪婪搜索得到的局部優化可能會比全域最優更好。

光有資料還不夠

把泛化作為關鍵還會帶來另一個重要的後果:不管你有多少資料,光有這些資料是不夠的。比如從100萬個樣本中得到了100個變數的布耳函數,還有2^100 – 10^6個樣本的類別是你不知道,那要怎麼把這些類別弄清楚呢?在沒有其他資訊的情況下,不就只能靠扔硬幣隨機決定了。

早在200多年前,著名的哲學家大衛·休謨就提出人的認識是有限的,但直到今天,很多機器學習犯錯的根源就是沒有意識到這件事。每個學習器一定要包含資料沒有提供的知識和假設,這樣才能將資料泛化。Wolpert在他著名的“沒有免費午餐”理論中確定了這一概念。根據這個概念,隨機猜測會打敗學習了所有函數的學習器。

這聽上去讓人很沮喪。那我們怎樣才能學習呢?幸運的是,我們在現實世界中學的函數並非均勻的來自所有可能的數學函數!實際上,一些泛泛的假設——像平滑,樣本相似則類別相似,依賴性有限、複雜度有限等等——就足夠了,這就是機器學習能夠成功的很大一部分原因。和推理一樣,歸納(學習器要做的)就是一個知識杠杆:輸入少量知識輸出大量知識。歸納比推理更強大,輸入知識更少,卻得到有用的結果。

當然,和所有的杠杆一樣,輸入的越多,得到的就越多。選擇表示的關鍵是看哪種知識更容易表達。比如,如果我們懂得大量使樣本相似的知識,那麼例子導向方法是一個不錯的選擇。如果我們有概率相關性的知識,那麼就用圖形模型。如果我們知道每個類別要用那種預測,那麼“如果……那麼……”規則會是個最好的選擇。好的學習器僅僅固化假設是不夠的,還要允許我們能夠明確表述它們,任意改變它們,並且能夠自動把它們用於學習中(比如,用一階邏輯或者程式)。

綜上,在機器學習中需要知識沒什麼可驚訝的。機器學習不是魔術,不能無中生有,而是由少變多。程式設計需要我們一切都從零做起。機器學習更像是種地,讓大自然來做大部分工作。農民把肥料和種子混在一起長出莊稼。而學習器和資料知識合在一起就長出了程式。

過擬合有好幾副面孔

要是我們的知識和資料不足以讓我們得到一個好的分類器呢?那麼我們很可能就臆造一個分類器,把資料中的各種隨機抖動都當真了。這個問題就叫做過擬合,是機器學習中常出現的問題。當你的學習器輸出的分類器在訓練集上準確率達100%,而測試集僅50%,而事實上兩者的準確率都應為75%,這個時候就發生了過擬合。

每個瞭解機器學習的人都知道過擬合,但其表現方式不盡相同。發現過擬合的辦法之一就是把泛化誤差分解為偏差和方差。偏差是學習器持續學習一種錯誤東西,而方差是指學習器做出的決斷與輸入信號無關,是隨機的。

圖1. 飛鏢的偏差和方差

如圖1所示,用飛鏢做類比。一個線性學習器偏差很高,因為兩個類別之間的交界不是超平面時,學習器就不能進行歸納。決策樹不會發生這個問題,因為它們可以表示任何布耳函數,但是它們會出現很高的方差,由同樣的現象引出的問題,在不同的資料集上訓練,決策樹模型會得到完全不同的結果,而理論上來說,它們應該是一樣的。

相同的問題也出現在優化方式的選擇上:在選擇優化演算法時,束搜索比貪婪搜索有更低的偏置,但有更高的方差,因為它用到了更多的假設。因此,與我們的直覺相反,真正優秀的分類器不一定要比差的分類器表現更好。

圖2. 那怕真分類器是規則集,樸素貝葉斯也比決策樹學習器要好

如圖2所示,即使真正的分類器是規則集,在訓練樣本不到1000個的時候,樸素貝葉斯分類器比決策樹分類器精確度更高。哪怕貝葉斯假設錯誤,介面是線性,準確率還是很高!這樣的情況在機器學習中很常見:較強的錯誤假設會比較弱的正確假設表現更好,這是因為後者需要更多的資料來避免過擬合。

交叉驗證可以避免過擬合,比如,通過它來選擇合適大小的決策樹進行學習。但這也不是萬能的,如果我們用來製造過多的參數選擇,交叉驗證就會自行開始過擬合。

除了交叉驗證之外,還有其他各種方式來預防過擬合。

其中最常用的方法是在評價函數中加入正則項。這樣可以對於過於複雜的模型進行處罰,因而系統更容易產生結構簡單的模型。

另外一種方式是在加入新的結構之前通過卡方驗證來檢驗統計顯著性,以此來判斷加入此結構是否有助於提升效果。當資料不足時,這些方法非常有用。然而,如果有誰生成某種方法可以完全“解決”過擬合問題,你應當持懷疑態度。因為很容易就從過擬合變成欠擬合。想要同時做到避免過擬合和欠擬合需要設計出完美的分類器,然而根據“天下沒有免費的午餐”原理,在沒有足夠知識的前提下,沒有任何一個分類器能夠在各種情況下都表現最好。

一個關於過擬合的誤解是,認為它是雜訊造成的,比如說訓練樣本的標籤標錯了。這確實會讓過擬合加重,因為這會讓學習器產生出變換反復的決策面,以滿足這些樣本的標定。但是在沒有雜訊的情況下, 也可能發生嚴重的過擬合。例如,假設我們有一個布林型分類器需要把訓練集中的正樣本找出來(換句話說,分類器以析取範式的方式,將訓練集中樣本的特徵結合起來)。這個分類器將訓練集中的樣本正確分類,而將測試集中的正樣本全部錯誤分類,無論訓練集中有沒有雜訊。

多重假設檢驗與過擬合十分相關。標準的統計檢驗一次只能檢驗一種假設,而學習器可以同時檢驗百萬種。結果是,看上去很重要的假設也許實際上並沒有多重要。例如,如果有一家信託基金公司連續十年業績領先於業內,你會覺得它很厲害,但是如果仔細一想,如果每年任何一家公司都會有50%的概率領先,那麼它就有可能很幸運地連續十年領先。這個問題可以通過加入一系列的假設,做顯著性測試來判斷,但同樣會帶來欠擬合的問題。一種更加有效的方式是控制錯誤接受的比例,也稱為錯誤發現率。

高維度直覺失誤

除了過擬合之外,機器學習最大的問題就是維度災難了,這個說法是1961年Bellman提出來的,很多演算法在低維度表現不錯,但是一旦輸入值為高維度就應付不了了。但在機器學習中,這個說法還有更多含義。隨著樣本的維度(特徵值)增加,泛化的難度也按指數遞增,因為大小固定的訓練集在輸入空間只占很少一部分。那怕1萬億個樣本,維度為100的訓練集也只占了輸入空間10^-18的部分。這就是為什麼機器學習如此必要而複雜。

更嚴重的是,機器學習演算法依賴(顯式或者隱式)的相似性推理在高維度會崩潰。想像一個K近鄰分類器把漢明距離作為相似性度量,假設類別就只是x1 ∧ x2,沒有其他特徵,這很簡單。但如果還有98個不相關的特徵x3,..., x100,那麼它們的噪音就會淹沒x1和x2之間的信號,最近鄰分類會有效地做出隨機預測。

更令人困擾的是,如果100個特徵都相關,那麼近鄰演算法也會出現問題,這是因為在高維度所有樣本都很相似。假如,所有的樣本都分佈在規則網格內,有個測試樣本Xt,如果網格是d維度,Xt的2d鄰近樣本和它距離都相同,所以隨著維度增加,越來越多的樣本成為了xt的近鄰樣本,近鄰樣本的選擇就變得隨機了。

這僅僅是高維度帶來的一個問題:我們的本能來自三維世界,沒法應用于高維度世界。在高維度世界,多元高斯分佈大部分的品質不是靠近均值,而是在其周圍距離不斷增加的“殼”裡。高維度的橘子的品質主要就集中在果皮上,而不是果肉裡。如果一個數量恒定的樣本均勻地分佈在一個高維度超立方體中,大部分樣本應該靠近超立方體的表面而不是近鄰。如果我們把超球體刻進超立方體中來近似超球體,在高維度中,幾乎超立方體所有的量都在超球體的外面。這對機器學習來說是個壞消息,因為一種類別的形態常常靠其他形態來近似。

在一維和二維建分類器很容易,我們通過肉眼觀察就可以在不同類別樣本之間找到合理介面。(如果人能看到高維度那機器學習也沒什麼必要了。)但是一到高維度,我們就很難理解發生了什麼。這也給設計分類器帶來了難度。有人會覺得特徵越多越好,大不了就是沒什麼新資訊嘛。

但實際上,因為維度災難,弊會大於利。不過好在有種效應叫做“非均勻性祝福”會部分消除這種詛咒。在大部分應用中,樣本不是均勻分佈在示例空間內,而是集中或者靠近低維流形。比如,K近鄰演算法特別適用於手寫數位識別,那怕數位圖像每圖元上就有一個維度。因為數位圖像的空間比圖像空間小很多。學習器可以隱式地利用這種較低的有效維度,或演算法來顯式地減少使用的維度(比如,Tenenbaum)。

理論保證不一定有用

機器學習論文裡滿是各種理論保證,最常見的一種就是限制樣本數量來保證泛化成功。你怎麼看呢?首先,它們有可能是真的。歸納一般來說和推理是對立的:在推理中,你可以保證所有結論是正確的,但在歸納就正好相反。這是幾個世紀以來的一個老觀念了。近十多年來的一個重大進步就是我們意識到可以保證歸納的結果,尤其是如果我們想解決概率保證。

論證方式很簡單。如果真錯誤率大於ε,我們就認為這是個壞分類器。所以壞分類器的可能性是和n 隨機一致,獨立訓練樣本小於(1 − ε)n。把b作為壞分類器在學習器假設空間H中的數量。通過一致限,使得它們中至少一個的可能性持續低於b(1 − ε)n。假設學習器總是會得到一個一致的分類器,而壞分類器出現的概率就小於|H|(1 − ε)n 而我們默認b ≤ |H|。所以如果我們希望可能性小於δ,讓n > ln(δ/|H|)/ ln(1 − ε) ≥ 1/ε (ln |H| + ln 1/δ)就夠了。

但不幸的是,我們對這種保證要持保留態度,因為通過這種方式得到的邊界會非常鬆散。上述邊界一個非常棒的特徵就是樣本需求數量以|H| 和 1/δ的對數增長。大部分假設空間都是按多個d特徵值呈雙指數的,這樣我們就還需要一些d的指數樣本。例如,有一個布林變數的布耳函數。如果這裡有e個不同樣本,那麼就有2e不同的函數。那麼有2d 個不同的函數,那麼函數總量就為22d。就算假設空間只有指數的,邊界還是非常鬆散,因為一致限很悲觀。例如,有100個布林特徵,而假設空間是決策樹,有10層,為了保證上述邊界δ = ε = 1%,我們需要50萬個樣本。但實際上只要一小部分就可以滿足學習了。

另外,我們還要警惕這樣的邊界意味著什麼。它不是說,如果你的學習器得到一個與訓練集一致的假設,就意味著假設成功,而是說明訓練集夠大的話,你的學習器要麼得到一個好的假設,要麼就是沒法找到一個一致的假設。這個邊界也沒有告訴我們怎麼選擇一個好的假設空間,只告訴了我們,如果一個假設空間包含了真分類器,那麼學習器輸出壞分類器的概率就會隨訓練集的減少而下降。如果我們壓縮假設空間,那麼邊界會提高,前提是其包含的真分類器也壓縮了(有些情況真分類器不在假設空間內,但該理論同樣適用。)

另外一種理論保證是漸近:給無窮的資料,保證學習器輸出正確的分類器。這是一種確認,但可能會導致我們輕率地下決定去選擇某一種分類器。事實上,我們很少會遇到漸近區。是因為之前我所討論的偏差-方差權衡問題,如果學習器A 在無限資料上比B 好,那麼B在有限資料上一定比A好。

理論保證不是實際操作的準則,而是演算法設計理解和驅動的源泉。

就這方面來看,理論保證還是很有用的;實際上,理論和實踐之間密切的相互作用是機器學習這些年能取得巨大成就的主要原因。但機器學習是一個複雜的現象,不能因為學習器有了理論證明,在現實中運作,就說著前者是後者的原因。

特徵工程是關鍵

有的機器學習項目成功了,有的沒有,是什麼原因呢?最重要的原因就是其使用的特徵。如果你有多個獨立特徵且每個都和類別相關,那麼你的機器學習就很容易成功。另一方面,如果類別都是複雜的特徵函數,那麼就不容易學習。

通常,原始資料不是很好學習,但是你可以從資料中建構特徵。這常常是機器學習項目中最費功夫的地方,也是最有趣的部分,在這部分直覺、創造力、“歪門邪道”和技術的東西同樣重要。

初學者往往會很驚訝,在一個機器學習項目中,真正用在做機器學習這部分的時間很少,大部分都花在了資料收集、整合、清理和預處理,以及反復的特徵設計。另外,機器學習不是建完資料庫,運行學習器,一次就搞定的事情,而是要不斷地運行學習器,分析結果,調整資料或者學習器,然後反復的一個反覆運算的過程。學習通常是這裡面花時間最少的一部分。特徵工程很複雜因為它是域特定的,而學習器則很大程度上是通用的。然而,這兩者之間沒有沒有明顯分界。這也就是為什麼好的學習器是和知識相結合的。

當然,機器學習的聖杯之一就是使越來越多的特徵工程過程自動化。現在常用的一種方法就是自動生成大量的候選特徵,然後通過資訊增益來選擇最好的。但是要記住單獨特徵互相也許無關,但合併在一起就會關係了。例如,如果這個分類是輸入特徵為k的XOR,每個特徵都沒有類別相關資訊,另一方面,運行大量特徵的學習器來尋找哪些在合併時有用會花費大量的時間,導致過擬合。所以,說到底在特徵工程上,還得靠人的能力。

資料多比演算法聰明更好

假設你建了最好的特徵集,但是你拿到的分類器並不完全準確。你要怎麼辦呢?

有兩種選擇:設計一個更好的演算法,或者收集更多的資料(更多樣本、更多原始特徵,受制于高維詛咒)機器學習研究者常常更關心前者,但實際上收集資料這個辦法更容易成功。根據經驗,一個一般的演算法,如果資料多,會優於資料較少的高深演算法。(畢竟,機器學習就是讓資料來幹活的。)

但這就會帶來另一個問題:可擴展性。

在大部分電腦科學中,兩大受限資源是時間和記憶體。而在機器學習中,還有第三個:訓練數據。不同時期的技術瓶頸就在這三大限制中變換。20世紀80年代,資料是瓶頸,而今天,是時間。大量的資料是有的,但是沒有足夠的時間去處理。這就會導致一個悖論:理論上資料越多意味著可以學習更複雜的分類器,但實際上,最後還是用的更簡單的分類器,因為複雜分類器學習時間更長。一個解決方法是想出更快的方式來學習複雜的分類器,在這方面也的確有顯著的成果(比如,Hulten and Domingos)。

使用高深的演算法沒有預期那麼理想的原因是,大部分演算法都差不多。如果你認為規則集神經網不同的話,你可能會對此感到很驚訝。但實際上,命題規則很容易編為神經網路,其他表示之間也有類似關係。所有學習器都是把近鄰樣本放進一個類別,而關鍵是什麼叫“近鄰”。在資料分佈不均時,學習器儘管產生不同介面,卻依然可以做出相同預測(訓練樣本多的,通常測試樣本也會大量出現)。這也能解釋為什麼好的學習器不穩定,但還是很準確。圖3為二維展示,在高維度效果越明顯。

圖3所示,不同邊界會產生相同預測(+和-是兩個類別的訓練樣本)

所以規則就是首先使用簡單的學習器(比如,先用貝葉斯而非羅輯回歸,先用K近鄰演算法而不是支援向量機)。越複雜的學習器越吸引人,但用起來卻很難,因為它們需要調節的按鈕太多才能得到想要的結果,也因為它們的內部不夠透明。

學習器可以分成兩大類:一是表示有固定大小的,比如線性分類器,還有表示隨資料增加的,比如決策樹(後者有時被稱做非參數學習器。但很不幸,它們常常比參數學習器學的參數更多。)大小固定的學習器只能從大量資料中獲益(注意一下圖2中貝葉斯演算法的漸近線約在70%左右)。

大小變化的學習器理論上只要資料足夠,可以學習任何函數,但實際上不行,因為演算法有限(比如,貪婪搜索會陷入局部最優)或者計算開銷不足。而且,因為高維詛咒,現有資料可能不夠。基於這些原因,高深演算法—充分利用資料和計算資源的—最後常常會成功。設計學習器和學習分類器之間沒有太大差別,任何知識可以在編碼進學習器中或從資料中學習。所以機器學習項目的學習器設計最後成為最重要的部分,從業者們需要具備一定的專業知識。

到最後,最大的瓶頸不再是資料或者CPU週期,而是人。很多論 文中,學習器基本都在精准度和計算預算方面做比較。人為努力和洞察力很難測量,但往往更重要。這會幫助學習器創建人們可以理解的輸出(比如,規則集)。充分利用機器學習的機構已經準備好基礎設施使用各種學習器、資料資源和簡單有效的學習問題來進行實驗,並且在那些機構中機器學習專家和應用領域專家合作密切。

學習更多的模型

在機器學習的早期,每個人都有自己喜歡的學習器,相信它的優越性。我們花了大量的時間來嘗試其變體,然後選擇最好的一個。後來系統實證比較發現學習器的好壞是隨應用不同而改變的,所以搭載不同學習器的系統就開始出現了。人們就開始努力嘗試多個學習器的變體,然後還是選擇最好的那個。但後來研究者們發現,如果把多個學習器合在一起,結果會更好,使用者也不費什麼功夫。

現在創建這樣的集成模型已經成為一種標準了。最簡單的一種技術,叫做bagging.我們通過重採樣的方式生成隨機訓練集,每個訓練集學習一個分類器,最後通過投票合成結果。這樣的方式能成功的原因在於其大大減少方差的同時,只稍提高了偏差。在boosting中,訓練樣本有權重,而這些權重各不相同,所以每個新的分類器都會關注之前分類器分錯的樣本。在stacking中,獨立分類器輸出變成了“更高級”學習器的輸入,並且stacking在想辦法進行最優組合.

現存的技術有很多,集成越做越大已經成為了一種趨勢。

在Netflix prize大賽上,來自全世界的團隊互相競爭,創建最好的視頻推薦系統(http://netflixprize.com)。隨著比賽的進程,團隊發現通過合併其他團隊的學習器可以得到最好的結果,然後團隊之間互相合併,越來越大。冠、亞軍都是上百個學習器的集成。當然,我們在未來還會看到更大的集成。

模型集合不應和貝葉斯模型平均(BMA)—理論上最優的學習方法—相混淆。在BMA中,新樣本的預測是通過在假設空間中取所有分類器各個預測的平均值,由分類器解釋訓練資料的表現,和我們對其的期待來權衡。除了表面相似,其實集成和BMA非常不同。集成改變了假設空間(比如,從單個決策樹變成了所有決策樹的線性集合),可以呈現出各種形式。BMA根據固定公式將權重分配給原始空間的假設。BMA權重和bagging或者boosting產生的權重完全不同:後者非常平均,而前者非常傾斜,直到某單一最高權重分類器占主導地位使得BMA選擇它。這樣產生的結果就是,集成模型是機器學習包中關鍵的一部分,而BMA卻沒人選擇。

簡單不意味著準確

奧卡姆剃刀原理說:如無必要,勿增實體。在機器學習中,這常常意味著,如果兩個分類器有同樣的訓練錯誤,簡單的那個訓練器測試錯誤率會更低。這種說法常常在文學中很常見,但實際上有很多反例,“免費午餐”定理就可以對此進行反駁。

我們在前面就看到了一個反例:模型集合。即使訓練誤差達到0之後,通過增加分類器也可以提升增強集成的泛化誤差。另一個反例就是支援向量機,可以有效地擁有無限量的參數而不會過度擬合。相反,函數符號(sin(ax))可以區分任意大的,任意標記的x軸上的點,即使它只有一個參數。因此,和直覺相反,模型的參數量和過度擬合之間沒有必然聯繫。

更複雜的視圖反而使複雜度與假設空間的大小相等,因為較小的空間允許用更短的代碼表示假設。理論保證部分的界限可能被視為表明較短的假設泛化得更好。這可以通過將更短的代碼分配給我們有一些先驗偏好的空間中的假設來進一步改進。但是將其視為在準確性與簡單性之間權衡的“證明”是迴圈推理:我們假設我們更傾向於設計簡單,如果它們是準確的,那是因為我們的偏好是準確的,而不是因為我們選擇的表示中的假設是“簡單”的。

這還會產生的另一個複雜情況是沒有學習器會徹底搜索假設空間。假設空間更大的學習器如較少的假設比從較小空間中嘗試更多假設的學習器過擬合的可能性低。正如Pearl所指出,真正影響訓練和測試誤差的是選擇假設的過程,而假設空間的大小只是對此的一個粗略指導。Domingos調查了奧卡姆剃刀在機器學習問題上的主要論點和證據。結論是,更簡單的假設應該是首選的,因為簡單本身就是一種美德,而不是因為與準確性的假設聯繫。這也可能是奧卡姆的本意。

可表示不意味著可學習

基本上所有學習器的表示都和“所有函數都可以被表示,或者以無限接近的方式近似表示。”這樣的理論相關。為了證明這個定理,表示的擁護者們常常會忽視其他東西。然而,函數可以被表示並不意味著可以被學習。比如,決策樹學習器不能學習超過訓練集的葉子節點。

在連續空間中,即使用固定基元集表示那怕最簡單的函數也常常需要無窮的部分。如果假設空間有評價函數的局部最優,實際上也常常出現,那麼即使可以被表示,學習器也許也找不到真正的函數。有了有限的資料、時間和記憶體,標準學習器只能學習所有函數的小部分子集,而這些子集對表示不同的學習器是不同的。所以關鍵問題不是“能不能被表示?”因為答案常常不重要,而是“能不能被學習?”這個問題值得去嘗試不同的學習器(或者合併它們)。

對於某些函數,有些表示在會比其他函數指數上更緊湊。結果就是,它們可以需要成指數減少的資料來學習函數。有些學習器是通過簡單基本函數的線性合成形成的。比如,支援向量機圍繞一些訓練樣本(支援向量)形成內核合成。通過這種方式形成n位元的同位性需要2n的基本函數,但是使用一個表示需要多層(就是在輸入和輸出之間有好幾步),同位性可以編碼在線性大小的分類器裡。尋找這種深度表示是現在機器學習的重要前沿。

相關並非因果

相關性不是因果性這個觀點可能常常被提到,不太值得在這裡贅述。但是,只能用來學習相關性的學習器產生的結果常常被用來表示因果關係,這樣錯了嗎?如果錯了,為什麼人們這麼做呢?

學習預測模型就是用它們作為行動導向。如果我們發現啤酒和尿布常常是一併購買,那麼也許把啤酒放在尿布旁邊會增加銷量。(這是資料採擷世界的一個著名例子。)但沒有實驗,也很難判定是否正確。機器學習常常用來觀測資料,預測變數常常不受學習器的控制,而實驗資料受控。有些學習演算法可以從觀察資料中提取資訊,但是這樣的應用還是非常有限。另一方面,相關性是潛在因果聯繫的標誌,所以我們把相關性作為進一步調查的導向(比如,嘗試想弄清楚因果鏈是什麼)。

很多研究者認為因果性是一種虛設。例如,在物理定律中就沒有因果概念。因果性是不是真的存在是一個很深奧的哲學問題,眼下也沒有答案。但在機器學習上還是有兩點很實在,首先,不管我們是不是把它們稱作“因果”,我們是要為行為做預測,而不是僅僅將觀測變數相聯繫。第二,如果你可以獲得實驗資料(比如,隨機將遊客分到了一個網站的不同版本中),那麼要一定竭盡全力。

結論

和所有的學科一樣,機器學習很大量的“內功心法”難以獲得.但是對成功很重要。本文總結了一些突出項目。當然,這也只是傳統機器學習的補充。點擊http://www. cs.washington.edu/homes/pedrod/class觀看完整的線上機器學習課程。在http://www.videolectures.net 你會找到機器學習課程的寶藏,還有,Weka是一個很棒的開源機器學習包。

最後,祝你學的開心!

Next Article
喜欢就按个赞吧!!!
点击关闭提示