機器學(xué)習(xí)算法被認為能夠通過學(xué)習(xí)數(shù)據(jù)來弄清楚如何執(zhí)行重要任務(wù)。
這意味著數(shù)據(jù)量越大,這些算法就可以解決更加復(fù)雜的問題。然而,開發(fā)成功的機器學(xué)習(xí)應(yīng)用程序需要一定的“民間技巧”,這在教科書或機器學(xué)習(xí)入門課程中很難找到。
Pedro Domingos教授的一篇很好的研究論文,該論文匯集了機器學(xué)習(xí)研究人員和從業(yè)者的經(jīng)驗教訓(xùn)。
1.學(xué)習(xí)=表示+評估+優(yōu)化
你有一個應(yīng)用程序,你認為機器學(xué)習(xí)可能是一個很好的選擇?,F(xiàn)在,在機器學(xué)習(xí)領(lǐng)域,每年都會有大量的機器學(xué)習(xí)算法可供選擇,有數(shù)百種機器學(xué)習(xí)算法問世。應(yīng)該使用哪一個?
在這個巨大的空間中不迷失的關(guān)鍵是要明白所有機器學(xué)習(xí)算法的都由三個核心要素組成:
表示:輸入數(shù)據(jù),即要使用的特征,學(xué)習(xí)器和分類器必須以計算機可以理解的語言表示。學(xué)習(xí)器可以學(xué)習(xí)的分類器集稱為學(xué)習(xí)器的假設(shè)空間。如果分類器不在假設(shè)空間中,則無法進行學(xué)習(xí)。
澄清說明:分類器與學(xué)習(xí)器的含義是什么?假設(shè)你有訓(xùn)練數(shù)據(jù),并使用你構(gòu)建另一個程序(模型)的程序處理這些數(shù)據(jù),例如決策樹。學(xué)習(xí)器是從輸入數(shù)據(jù)構(gòu)建決策樹模型的程序,而決策樹模型是分類器(能夠為每個輸入數(shù)據(jù)實例提供預(yù)測輸出的東西)。
評估:需要評估函數(shù)來區(qū)分好的分類和壞的分類。算法內(nèi)部使用的評估函數(shù)可能與我們希望分類器優(yōu)化的外部評估度量不同(為了便于優(yōu)化,并且與后面討論的問題有關(guān))
優(yōu)化:最后,我們需要一種方法來在分類器中進行搜索,以便我們可以選擇最佳的分類器。學(xué)習(xí)器效率的關(guān)鍵是選擇優(yōu)化技術(shù)。通常從使用現(xiàn)成的優(yōu)化器開始。如果需要,以后你可以用自己的設(shè)計替換它們。
下表顯示了這三個組件中每個組件的一些常見示例。
2.泛化才有用
機器學(xué)習(xí)的基本目標(biāo)是概括超出訓(xùn)練集中的例子。因為,無論我們擁有多少數(shù)據(jù),我們都不太可能在測試時再次看到這些確切的示例。在訓(xùn)練集上做得很好很容易。初學(xué)者中最常見的錯誤是測試訓(xùn)練數(shù)據(jù)并得到成功的假象。如果所選分類器隨后在新數(shù)據(jù)上進行測試,則通常不會比隨機猜測更好。因此,從一開始就設(shè)置一些數(shù)據(jù),并且僅使用它來測試最終選擇的分類器,然后在整個數(shù)據(jù)上學(xué)習(xí)最終分類器。
當(dāng)然,保留數(shù)據(jù)會減少可用于訓(xùn)練的樣本數(shù)。這可以通過交叉驗證來緩解:比如,將你的訓(xùn)練數(shù)據(jù)隨機分成十個子集,在訓(xùn)練其余部分時保持每個子集,在其未使用的示例上測試每個學(xué)習(xí)的分類器,并對結(jié)果求平均值,來看特定參數(shù)設(shè)置的效果如何。
3.只有數(shù)據(jù)還不夠
當(dāng)泛化是目標(biāo)時,我們會遇到另一個主要后果:僅憑數(shù)據(jù)是不夠的,無論你擁有多少數(shù)據(jù)。假設(shè)我們想學(xué)習(xí)一百萬個例子中100個變量的布爾函數(shù)(0/1分類)。這意味著2 ^100-10^6個例子,你不知道它們的類。如果手頭沒有更多信息,這怎么能優(yōu)于隨機猜測呢?
似乎我們陷入了困境。幸運的是,我們想要在現(xiàn)實世界中學(xué)習(xí)的特性并不是從所有數(shù)學(xué)上可能的函數(shù)集中統(tǒng)一繪制的!實際上,非常一般的假設(shè)——就像具有相似類的類似示例——是機器學(xué)習(xí)如此成功的一個重要原因。
這意味著專業(yè)知識和對數(shù)據(jù)的理解對于做出正確的假設(shè)非常重要。對學(xué)習(xí)知識的需求應(yīng)該不足為奇。機器學(xué)習(xí)并不神奇,它無法從無到有。它的作用是從更少的東西中獲得更多。與所有工程一樣,編程需要做很多工作:我們必須從頭開始構(gòu)建所有東西。學(xué)習(xí)更像是農(nóng)業(yè),讓大自然完成大部分工作。農(nóng)民將種子與營養(yǎng)物質(zhì)結(jié)合起來種植農(nóng)作物。學(xué)習(xí)者將知識與數(shù)據(jù)相結(jié)合以優(yōu)化程序。
4.過擬合的多面性
過度擬合的問題是機器學(xué)習(xí)的問題。當(dāng)你的學(xué)習(xí)器輸出一個對訓(xùn)練數(shù)據(jù)100%準(zhǔn)確但對測試數(shù)據(jù)只有50%準(zhǔn)確的分類器時,實際上它可以輸出一個對兩者都準(zhǔn)確度為75%的分類器,它已經(jīng)過擬合。
機器學(xué)習(xí)中的每個人都知道過擬合,但它有多種形式,并不是很明顯。理解過擬合的方法之一是將泛化誤差分解為偏差和方差。
偏差是學(xué)習(xí)者一直學(xué)習(xí)同樣錯誤的傾向。與真實信號無關(guān),方差是學(xué)習(xí)隨機事物的傾向。飛鏢圖比可以更好地理解這一點,如下圖所示:
例如,線性學(xué)習(xí)器具有較高的偏差,因為當(dāng)兩個類之間的劃分不是明確的超平面時,學(xué)習(xí)器無法正確地判別關(guān)系。決策樹沒有這個問題,因為它們的學(xué)習(xí)方法很靈活。但另一方面,它們可能有高度差異——在同一任務(wù)的不同訓(xùn)練數(shù)據(jù)集上學(xué)習(xí)的決策樹通常是非常不同的,而實際上它們應(yīng)該是相同的。
現(xiàn)在,如何處理過擬合?
可以在此處使用交叉驗證,例如通過使用它來選擇要學(xué)習(xí)的決策樹的最佳大小。但請注意,這里還有一個問題:如果我們使用它來選擇太多參數(shù),它本身就會開始過擬合,我們又回到了同樣的陷阱。
除了交叉驗證之外,還有許多方法可以處理過擬合。最受歡迎的是在評估函數(shù)中添加正則化項。另一個選擇是執(zhí)行卡方等統(tǒng)計顯著性檢驗,以分析添加更多復(fù)雜性是否會對類分布產(chǎn)生任何影響。這里的一個重點是沒有特定的技術(shù)“解決”過擬合問題。例如,我們可以通過陷入欠擬合(偏差)的相反誤差來避免過度擬合(方差)。同時避免兩者都需要學(xué)習(xí)一個完美的分類器,并沒有一種技術(shù)總能做到最好(沒有免費的午餐)。
5.高維中的直覺失效
過擬合后,機器學(xué)習(xí)中最大的問題是維數(shù)的詛咒。這個表達式意味著當(dāng)輸入是高維的時,許多在低維度下工作正常的算法變得難以處理。
由于固定大小的訓(xùn)練集覆蓋了輸入空間的一小部分(可能的組合變得巨大),因此隨著示例的維度(即特征的數(shù)量)的增長,正確泛化的難度呈指數(shù)級增加。但這就是為什么機器學(xué)習(xí)既有必要又有難度。正如你在下圖所示,即使我們從1維過渡到3維,能夠分辨出不同示例的工作似乎開始變得越來越難——在高維度上,所有示例都開始相似。
這里的一般問題是,我們來自三維世界的直覺使我們在高維度上失敗。例如,高維度橙色的大部分體積都在外部,而不是內(nèi)部!
令人難以置信的是:如果恒定數(shù)量的示例在高維超立方體中均勻分布,并且如果我們通過將其刻在超立方體中來近似超球面,則在高維度中,超立方體的幾乎所有體積都在超球面之外。這是個壞消息。因為在機器學(xué)習(xí)中,一種類型的形狀通常由另一種形狀近似。
澄清注意:如果你對所有“夸大其詞”感到困惑,超立方體內(nèi)部的超球面看起來像是這樣的二維和三維:
因此,你現(xiàn)在可以理解,構(gòu)建2維或3維分類器很容易,但在高維度上,很難理解發(fā)生了什么。反過來,這使得設(shè)計好的分類器變得困難。事實上,我們經(jīng)常陷入這樣的陷阱:認為獲取更多特征不會帶來負面影響,因為在最壞的情況下,它們不會提供關(guān)于類的新信息。但事實上,維度的詛咒可能會超過它們的好處。
啟示:下次當(dāng)你考慮添加更多特征時,請考慮當(dāng)你的維度變得太大時可能出現(xiàn)的潛在問題。
6.特征工程是關(guān)鍵
當(dāng)一天結(jié)束時,所有機器學(xué)習(xí)項目中有成功的,也有失敗的。它們之間有區(qū)別呢?這個不難想到,最重要的因素就是使用的特征。如果有許多獨立的特征,并且每個特征都與類的相關(guān)性很好,那么機器學(xué)習(xí)就很容易。相反,如果類是需要通過復(fù)雜方式處理特征后才能被使用,那么事情就變難了,這也就是特征工程——根據(jù)現(xiàn)在輸入的特征創(chuàng)建新的特征。
通常原始數(shù)據(jù)格式基本不能為建模所用。但你可以從中構(gòu)建可用于學(xué)習(xí)的特征。事實上,這是機器學(xué)習(xí)項目中的最花精力的部分。但這也是最有趣的部分之一,在這里直覺、創(chuàng)造力和“小技巧”與技術(shù)是同樣重要的東西。
經(jīng)常會有初學(xué)者驚訝一個機器學(xué)習(xí)項目中花費在訓(xùn)練上的時間竟如此之少。但是,如果考慮收集數(shù)據(jù),整合數(shù)據(jù),清理數(shù)據(jù)并對其進行預(yù)處理的時間以及在特征選擇上的試錯次數(shù),這個時間就相對合理。
更何況,機器學(xué)習(xí)在構(gòu)建數(shù)據(jù)集和運行學(xué)習(xí)樣例上不是一次性的過程,而是一個迭代的過程,需要運行學(xué)習(xí)樣例,分析結(jié)果,修改數(shù)據(jù)或?qū)W習(xí)樣例,以及重復(fù)上述過程。訓(xùn)練往往是最快的部分,但那是因為我們對這部分相當(dāng)熟練!特征工程很難,因為它是專業(yè)領(lǐng)域的,不過學(xué)習(xí)器在很大程度上是通用的。當(dāng)然,機器學(xué)習(xí)界的夢想之一就是提高特征工程的自動化程度。
7.豐富的數(shù)據(jù)勝過聰明的算法
假設(shè)你已經(jīng)構(gòu)建了一組最好的特征,但是你得到的分類器仍然不夠準(zhǔn)確。你現(xiàn)在還可以做什么?有兩個主流的辦法:
設(shè)計更好的機器學(xué)習(xí)算法或者是收集更多數(shù)據(jù)(更多樣例,可能還有更多原始特征)。機器學(xué)習(xí)研究人員會去改進算法,但在現(xiàn)實中,通往成功的最快途徑往往是獲取更多數(shù)據(jù)。
根據(jù)經(jīng)驗,具有大量數(shù)據(jù)的傻瓜算法勝過一個具有適度數(shù)量的聰明算法。
在計算機科學(xué)中,通常情況下,兩個主要的資源限制是時間和內(nèi)存。但在機器學(xué)習(xí)中,還有第三個約束:訓(xùn)練數(shù)據(jù)。在這三個中,今天的主要瓶頸是時間,因為有大量的可用數(shù)據(jù),但沒有足夠的時間來處理它們,所以數(shù)據(jù)被閑置了。這意味著在實踐中,更簡單的分類器會勝出,因為復(fù)雜的分類器需要很長的學(xué)習(xí)時間。
使用更聰明的算法并不會給出更好的結(jié)果,部分原因是在一天中它們都在做同樣的事情,將所有學(xué)習(xí)樣例基本上都是通過將相鄰的樣例分組到同一個類來工作的。關(guān)鍵的區(qū)別在于對“相鄰”的定義。
當(dāng)我們有非均勻分布的數(shù)據(jù)時,即使復(fù)雜的學(xué)習(xí)樣例也可以產(chǎn)生非常不同的邊界來對結(jié)果進行分類,最終它們?nèi)匀辉谥匾獏^(qū)域做出相同的預(yù)測(具有大量訓(xùn)練樣例的區(qū)域,因此也可能出現(xiàn)大多數(shù)文本樣例)。正如下圖所示,無論是花式曲線,直線還是逐步邊界,我們都可以得到相同的預(yù)測:
通常,首先嘗試最簡單的學(xué)習(xí)器(例如,邏輯回歸前的樸素貝葉斯,支持向量機之前的鄰近算法)。復(fù)雜的學(xué)習(xí)器很吸引人,但它們通常很難使用,因為它們需要控制更多的旋鈕以獲得好的結(jié)果,并且因為它們的內(nèi)部更像是黑箱。
8.組合多個模型,而非只用一個
在機器學(xué)習(xí)的早期階段,努力嘗試使用多種學(xué)習(xí)器的各種變形,并選擇最好的那個。但是研究人員發(fā)現(xiàn),如果不是選擇其中最好的單一模型,而是結(jié)合各種變形會得到更好的結(jié)果,建模者只需稍加努力就可以獲得顯著提升的效果?,F(xiàn)在建這種模型融合非常普遍:
在最簡單的技術(shù)稱為bagging算法,我們使用相同的算法,但在原始數(shù)據(jù)的不同子集上進行訓(xùn)練。最后,我們?nèi)【祷蛲ㄟ^某種投票機制將它們組合起來。
Boosting算法中學(xué)習(xí)器按順序逐一訓(xùn)練。隨后的每一個都將其大部分注意力集中在前一個錯誤預(yù)測的數(shù)據(jù)點上。我們會一直訓(xùn)練到對結(jié)果感到滿意為止。
Stacking算法中,不同獨立分類器的輸出成為新分類器的輸入,該分類器給出最終預(yù)測。
在Netflix算法大賽中,來自世界各地的團隊競相建立最佳的視頻推薦系統(tǒng)。隨著比賽的進行,發(fā)現(xiàn)將學(xué)習(xí)器與其他團隊相結(jié)合可以獲得了最佳成績,并且合并為越來越大的團隊。獲勝者和亞軍都是超過100個學(xué)習(xí)器的疊加集成,兩個集成的結(jié)合進一步改善了結(jié)果。算法組合將更好!
9.理論保證和實際具有差異
機器學(xué)習(xí)論文充滿理論保證。我們應(yīng)該對這些保證做些什么?歸納法傳統(tǒng)上與演繹法形成對比:在演繹法中,你可以保證結(jié)論是正確的,在歸納法中就很難說。最近幾十年的一個重要進展是我們認識到可以做歸納結(jié)果正確性的保證,前提是如果我們愿意接受概率保證。
例如,我們可以保證,給定一個足夠大的訓(xùn)練集,在很大的概率上,學(xué)習(xí)器會返回一個成功泛化的假設(shè)或無法找到一個保持正確的假設(shè)。
另一種常見的理論保證是給定無窮的數(shù)據(jù),學(xué)習(xí)器可以保證輸出正確的分類器。在實踐中,由于我們之前討論過的偏置-方差的權(quán)衡,如果在無窮數(shù)據(jù)情況下,學(xué)習(xí)器A比學(xué)習(xí)器B好,那么在有限數(shù)據(jù)的情況下B通常比A好。
理論保證在機器學(xué)習(xí)中的主要作用不是作為實際決策的標(biāo)準(zhǔn),而是作為理解算法設(shè)計的起點。
10.簡單并不意味著準(zhǔn)確
在機器學(xué)習(xí)中,奧卡姆剃刀原理通常被認為是給定兩個具有相同訓(xùn)練誤差的分類器,兩者中較簡單的可能具有較低的測試誤差。
但事實并非如此,我們之前看到了一個反例:即使在訓(xùn)練誤差達到零之后,通過添加分類器,一個boosted ensemble的泛化誤差也會繼續(xù)改善。與直覺相反,模型的參數(shù)數(shù)量與過擬合之間沒有必要的聯(lián)系。也就是說在機器學(xué)習(xí)中,一個更簡單的假設(shè)仍然應(yīng)該是首選,因為簡單本身就是一種優(yōu)勢,而不是因為它意味著準(zhǔn)確性。
11.可表示不等于可學(xué)習(xí)
僅僅因為可以表示函數(shù)并不意味著可以學(xué)習(xí)它。例如,標(biāo)準(zhǔn)決策樹學(xué)習(xí)器無法學(xué)習(xí)葉子多于訓(xùn)練樣例的樹木。
給定有限的數(shù)據(jù)、時間和內(nèi)存,標(biāo)準(zhǔn)學(xué)習(xí)器只能學(xué)習(xí)所有可能功能的一小部分,并且這些子集對于不同表示的學(xué)習(xí)器是不同的。因此,這里的關(guān)鍵是嘗試不同的學(xué)習(xí)器(并可能將它們結(jié)合起來)是值得的。
12.相關(guān)性不意味著因果性
我們都聽說過相關(guān)性并不意味著因果性,但仍然有人常常傾向于認為相關(guān)性意味著因果關(guān)系。
通常,學(xué)習(xí)預(yù)測模型的目標(biāo)是將它們用作行動指南。如果我們發(fā)現(xiàn)用戶在超市經(jīng)常買了啤酒就會買尿不濕,那么也許把啤酒放在尿不濕部分旁邊會增加銷量。但除非我們進行真實的實驗,否則很難判斷這是否屬實。相關(guān)性標(biāo)志著一個潛在的因果關(guān)系,我們可以將其作為進一步研究的方向,而非我們的最終結(jié)論。
結(jié)論
跟其他學(xué)科一樣,機器學(xué)習(xí)有很多“民間智慧”,很難獲得但對成功至關(guān)重要。
-
機器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8353瀏覽量
132315
原文標(biāo)題:關(guān)于機器學(xué)習(xí)實戰(zhàn),那些教科書里學(xué)不到的12個“民間智慧”
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論