每一個(gè)深鉆機器學(xué)習的人都會(huì )遇到這七大經(jīng)典問(wèn)題
如果希望了解機器學(xué)習,或者已經(jīng)決定投身機器學(xué)習,你會(huì )第一時(shí)間找到各種教材進(jìn)行充電,同時(shí)在心中默認:書(shū)里講的是牛人大神的畢生智慧,是正確無(wú)誤的行動(dòng)指南,認真學(xué)習就能獲得快速提升。但實(shí)際情況是,你很可能已經(jīng)在走彎路。
本文引用地址:http://dyxdggzs.com/article/201709/364416.htm科技發(fā)展很快,數據在指數級增長(cháng),環(huán)境也在指數級改變,因此很多時(shí)候教科書(shū)會(huì )跟不上時(shí)代的發(fā)展。有時(shí),即便是寫(xiě)教科書(shū)的人,也不見(jiàn)得都明白結論背后的“所以然”,因此有些結論就會(huì )落后于時(shí)代。針對這個(gè)問(wèn)題,第四范式創(chuàng )始人、首席執行官戴文淵近日就在第四范式內部分享上,向大家介紹了機器學(xué)習教材中的七個(gè)經(jīng)典問(wèn)題。本文根據演講實(shí)錄整理,略有刪減。
有時(shí)我們會(huì )發(fā)現,在實(shí)際工作中,應該怎么做和教科書(shū)講的結論相矛盾,這時(shí)候要怎么辦呢?難道教科書(shū)中的結論出錯了?事實(shí)上,有時(shí)確實(shí)如此。所以今天我就想和大家分享一下機器學(xué)習教材中的一些經(jīng)典問(wèn)題,希望對大家今后的工作和學(xué)習有所幫助。
神經(jīng)網(wǎng)絡(luò )不宜超過(guò)三層

那為什么之前的教科書(shū)上會(huì )寫(xiě)神經(jīng)網(wǎng)絡(luò )不能超過(guò)三層,這就要從神經(jīng)網(wǎng)絡(luò )的歷史說(shuō)起。五十年代有位科學(xué)家叫Marvin Minksy,他是一位生物學(xué)家,數學(xué)又很好,所以他在研究神經(jīng)元的時(shí)候就在想能不能用數學(xué)模型去刻畫(huà)生物的神經(jīng)元,因此就設計了感知機。感知機就像一個(gè)神經(jīng)細胞,它能像神經(jīng)細胞一樣連起來(lái),形成神經(jīng)網(wǎng)絡(luò ),就像大腦的神經(jīng)網(wǎng)絡(luò )。其實(shí)在60年代開(kāi)始的時(shí)候,是有很深的神經(jīng)網(wǎng)絡(luò ),但當時(shí)經(jīng)過(guò)大量實(shí)驗發(fā)現,不超過(guò)三層的神經(jīng)網(wǎng)絡(luò )效果不錯,于是大概到80年代時(shí)就得出結論:神經(jīng)網(wǎng)絡(luò )不宜超過(guò)三層。

那為什么現在這條結論又被推翻了呢?實(shí)際上這條結論是有前提條件的,即在數據量不大的情況下,神經(jīng)網(wǎng)絡(luò )不宜超過(guò)三層。而從2005年開(kāi)始,大家發(fā)現隨著(zhù)數據增加,深度神經(jīng)網(wǎng)絡(luò )的表現良好,所以慢慢走向深度學(xué)習。其實(shí)這里真正正確的原理是Valiant引理,它可以理解為“模型復雜度(例如專(zhuān)家系統的規則數量)要和數據量成正比”。數據量越大,模型就越復雜。上個(gè)世紀因為數據量小,所以神經(jīng)網(wǎng)絡(luò )的層數不能太深,現在數據量大,所以神經(jīng)網(wǎng)絡(luò )的層數就要做深。這也解釋了為什么當時(shí)教科書(shū)會(huì )有這樣的結論,而現在隨著(zhù)深度學(xué)習的流行,大家已經(jīng)不再會(huì )認為這句話(huà)是對的。
決策樹(shù)不能超過(guò)五層
如果有同學(xué)看教科書(shū)上介紹決策樹(shù),會(huì )有一個(gè)說(shuō)法就是決策樹(shù)要減枝,決策樹(shù)如果不減枝效果不好。還有教科書(shū)會(huì )告訴決策樹(shù)不能超過(guò)五層,超過(guò)五層的決策樹(shù)效果不好。這個(gè)結論和神經(jīng)網(wǎng)絡(luò )結論一樣,神經(jīng)網(wǎng)絡(luò )不能超過(guò)三層也是因為當時(shí)數據量不大,決策樹(shù)不能超過(guò)五層也是因為上個(gè)世紀數據量不夠大,二叉樹(shù)決策樹(shù)如果深度是N的話(huà),復雜度大概是2的N次方,所以不超過(guò)五層復雜度也就是三十多。如果數據量達到一百萬(wàn)的時(shí)候,決策樹(shù)能達到十幾二十層的規模,如果數據量到了一百億的時(shí)候決策樹(shù)可能要到三十幾層。

現在,我們強調更深的決策樹(shù),這可能和教科書(shū)講的相矛盾。矛盾的原因是現在整個(gè)場(chǎng)景下數據量變大,所以要做更深的決策樹(shù)。當然,我們也不一定在所有的場(chǎng)景里都有很大數據量,如果遇到了數據量小的場(chǎng)景,我們也要知道決策樹(shù)是要做淺的。最根本來(lái)說(shuō),就是看有多少數據,能寫(xiě)出多復雜的模型。
特征選擇不能超過(guò)一千個(gè)
有些教科書(shū)會(huì )單獨開(kāi)個(gè)章節來(lái)講特征選擇,告訴我們在拿到數據后,要先刪除一些不重要的特征,甚至有的教科書(shū)注明,特征數不能超過(guò)一千,否則模型效果不好。但其實(shí)這個(gè)結論也是有前提條件的,如果數據量少,是不能夠充分支撐很多特征,但如果數據量大,結論就會(huì )不一樣。這也就是為什么我們做LogisticRegression會(huì )有幾十億個(gè)特征,而不是限制在幾百個(gè)特征。

過(guò)去傳統數據分析軟件,如SAS,之所以只有幾百個(gè)特征,是因為它誕生于上世紀七十年代,它面臨的問(wèn)題是在具體場(chǎng)景下沒(méi)有太多可用數據,可能只有幾百上千個(gè)樣本。因此,在設計系統時(shí),就只需要針對幾百個(gè)特征設計,不需要幾十億個(gè)特征,因為上千個(gè)樣本無(wú)法支撐幾十億特征。但現在,隨著(zhù)數據量增加,特征量也需要增加。所以我認為,在大數據環(huán)境下,整個(gè)機器學(xué)習教科書(shū)里關(guān)于特征選擇的章節已經(jīng)落后于時(shí)代,需要根據新的形式重新撰寫(xiě);當然在小數據場(chǎng)景下,它仍然具有價(jià)值。
集成學(xué)習獲得最好學(xué)習效果
第四個(gè)叫做集成學(xué)習,這個(gè)技術(shù)在各種數據挖掘比賽中特別有用,比如近些年KDD CUP的冠軍幾乎都是采用集成學(xué)習。什么是集成學(xué)習?它不是做一個(gè)模型,而是做很多(例如一千個(gè))不一樣的模型,讓每個(gè)模型投票,投票的結果就是最終的結果。如果不考慮資源限制情況,這種模式是效果最好的。這也是為什么KDDCUP選手們都選擇集成學(xué)習的方式,為了追求最后效果,不在乎投入多少,在這種條件下,集成學(xué)習就是最好的方式。

但在現實(shí)中,企業(yè)做機器學(xué)習追求的不是用無(wú)限的資源做盡可能好的效果,而是如何充分利用有限資源,獲得最好效果。假設企業(yè)只有兩臺機器,如何用這兩臺機器獲得最好的效果呢?如果采用集成學(xué)習,用兩臺機器跑五個(gè)模型,就要把兩臺機器分成五份,每個(gè)模型只能用0.4臺機器去跑,因此跑的數據量就有限。那如果換種方式,不用集成學(xué)習,就用一個(gè)模型去跑,就能跑5倍的數據。通常5倍的數據量能比集成學(xué)習有更好的效果。在工業(yè)界比較少會(huì )應用集成學(xué)習,主要是因為工業(yè)界絕大多數的場(chǎng)景都是資源受限,資源受限時(shí)最好的方式是想辦法放進(jìn)去更多的數據。集成學(xué)習因為跑更多的模型導致只能放更少的數據,通常這種效果都會(huì )變差。
正樣本和負樣本均采樣到1:1
第五個(gè)叫做均衡采樣,絕大多數的教科書(shū)都會(huì )講到。它是指如果我們訓練一個(gè)模型,正樣本和負樣本很不平均,比如在正樣本和負樣本1:100的情況下,就需要對正、負樣本做均衡采樣,把它變成1:1的比例,這樣才是最好的。但其實(shí)這個(gè)結論不一定對,因為統計學(xué)習里最根本的一條原理就是訓練場(chǎng)景和測試場(chǎng)景的分布要一樣,所以這個(gè)結論只在一個(gè)場(chǎng)景下成立,那就是使用模型的場(chǎng)景中正、負樣本是1:1,那這個(gè)結論就是對的。

正確的做法是,應用場(chǎng)景是1:100,那訓練集合最好也是1:100。均衡采樣不一定都是對的,多數情況下不采樣反而才是正確的。因為大多時(shí)候,我們直接把訓練集合和測試集合做隨機拆分,或者按照時(shí)間拆分,二者的分布就是一致的,那個(gè)時(shí)候不采樣是最好的。當然有時(shí)候,我們也會(huì )發(fā)現做負樣本采樣會(huì )有更好的效果,比如范式在為某股份制銀行卡中心做交易反欺詐時(shí),就做了負樣本采樣,那是因為當我們把所有樣本都放進(jìn)去后,發(fā)現計算資源不夠,所以只能做采樣。正樣本與負樣本大概是1:1000或者1:10000,如果對正樣本做采樣,損失信息量會(huì )比較大,所以我們選擇對負樣本采樣,比如做1:1000的采樣,再把負樣本以1000的加權加回去。在資源受限時(shí)這么做,會(huì )盡可能降低信息量的損失。但如果僅僅是為了把它做均衡而做負樣本采樣,通常是不對的。和前面幾個(gè)問(wèn)題不同,負樣本采樣并不是因環(huán)境改變而結論變化,事實(shí)上就不應該做負樣本采樣。
交叉驗證是最好的測試方法
下一個(gè)問(wèn)題叫做交叉驗證,是指假設要將一份數據拆分成訓練集和測試集,這個(gè)時(shí)候怎么評估出它的誤差?交叉驗證是把集合拆成五份,取四份做訓練集、一份做測試集,并且每次選擇不同的那一份做測試級,最后測出五個(gè)結果再做平均,這被認為是最好的測試方法。

交叉驗證確實(shí)是一個(gè)還不錯的驗證的方法,但在現實(shí)應用場(chǎng)景下,它往往不是最合適的一種方式。因為通常來(lái)說(shuō),我們用機器學(xué)習做的事情是預測,絕大多數情況下我們是用現在或者過(guò)去的數據做一個(gè)模型來(lái)預測未來(lái)。而拿過(guò)去的訓練預測未來(lái)的最好測試方法不是交叉驗證,因為交叉驗證是按照交易或者按人拆分的。最合適的是方法其實(shí)是按照時(shí)間拆分,比如評估的時(shí)候選取一個(gè)時(shí)間點(diǎn),用在這個(gè)時(shí)間點(diǎn)之前的數據做訓練,預測在這個(gè)時(shí)間點(diǎn)之后的,這是最接近真實(shí)應用場(chǎng)景的評估結果。
交叉驗證可能只適用于和時(shí)間屬性不相關(guān)的場(chǎng)景,比如人臉識別,但我們面臨更多的應用場(chǎng)景,無(wú)論是風(fēng)險、營(yíng)銷(xiāo)或者反欺詐,都是在用過(guò)去的數據訓練后預測未來(lái),最合適這樣場(chǎng)景的評估方法不是交叉驗證,而是按照時(shí)間去拆分。
過(guò)擬合一定不好
最后一個(gè)叫過(guò)擬合,這也是一個(gè)討論特別多的話(huà)題。以前,通常我們會(huì )說(shuō)如果模型做的太復雜了就會(huì )過(guò)擬合,如PPT右邊所示,而最好的方式應該是圖中中間的狀態(tài)——擬合的剛剛好,圖中左邊的模型underfitting,沒(méi)有訓練完全。但現在來(lái)看,大多數的實(shí)際場(chǎng)景都是在拿過(guò)去預測未來(lái),過(guò)擬合不一定是不好的,還是要看具體場(chǎng)景。如果這個(gè)場(chǎng)景是過(guò)去見(jiàn)過(guò)的情況比較多,新的情況比較少的時(shí)候,過(guò)擬合反倒是好的。

打個(gè)比方,如果期末考試題就是平時(shí)的作業(yè),那我們把平時(shí)的作業(yè)都背一遍就是最好的方式,而這就是過(guò)擬合。如果期末考試不考平時(shí)作業(yè),全是新題,那么這個(gè)時(shí)候就不能只背平時(shí)的作業(yè),還要充分理解這門(mén)課的知識,掌握如何推理解題的技巧。所以過(guò)擬合好壞與否,完全取決于場(chǎng)景。如果應用場(chǎng)景依靠死記硬背就能搞定,那過(guò)擬合反倒是好的。實(shí)際上在我們的設計里面,很多時(shí)候我們會(huì )傾向于往過(guò)擬合靠一點(diǎn),可能做新題會(huì )差一點(diǎn),但是對于死記硬背的送分題會(huì )做的非常好。在拿過(guò)去預測未來(lái)的應用場(chǎng)景下,有的時(shí)候過(guò)擬合不一定不好,要根據實(shí)際情況來(lái)看。
今天與大家分享了教科書(shū)中的幾個(gè)經(jīng)典問(wèn)題。其實(shí)在實(shí)際工業(yè)應用中,我們不會(huì )完全按照教科書(shū)中的方式去實(shí)踐。我們也會(huì )設計很深的模型、很深的決策樹(shù)、很多的特征、會(huì )過(guò)擬合一點(diǎn),我們更強調按時(shí)間拆分,不強調均衡采樣。面對教科書(shū)中的結論,我們需要學(xué)會(huì )的是根據實(shí)際場(chǎng)景做出相應靈活判斷。
評論