機器學習教材中的 7 大經典問題
一、神經網路不宜超過三層
這是最有名錯誤判斷,現在的教科書幾乎已經不再有這樣的結論,但如果看15年、20年前的機器學習教科書,會有一個很有趣的結論:神經網路不能超過三層。這和我們現在說的深度學習是矛盾的,深度學習現在大家比拼的不是神經網路能不能超過三層,而是能不能做出一百層、一千層或者更多。
那為什麼之前的教科書上會寫神經網路不能超過三層,這就要從神經網路的歷史說起。五十年代有位科學家叫Marvin Minksy,他是一位生物學家,數學又很好,所以他在研究神經元的時候就在想能不能用數學模型去刻畫生物的神經元,因此就設計了感知機。感知機就像一個神經細胞,它能像神經細胞一樣連起來,形成神經網路,就像大腦的神經網路。其實在60年代開始的時候,是有很深的神經網路,但當時經過大量實驗發現,不超過三層的神經網路效果不錯,於是大概到80年代時就得出結論:神經網路不宜超過三層。
那為什麼現在這條結論又被推翻了呢?實際上這條結論是有前提條件的,即在資料量不大的情況下,神經網路不宜超過三層。而從2005年開始,大家發現隨著資料增加,深度神經網路的表現良好,所以慢慢走向深度學習。其實這裡真正正確的原理是Valiant引理,它可以理解為“模型複雜度(例如專家系統的規則數量)要和資料量成正比”。資料量越大,模型就越複雜。上個世紀因為資料量小,所以神經網路的層數不能太深,現在資料量大,所以神經網路的層數就要做深。這也解釋了為什麼當時教科書會有這樣的結論,而現在隨著深度學習的流行,大家已經不再會認為這句話是對的。
二、決策樹不能超過五層
如果有同學看教科書上介紹決策樹,會有一個說法就是決策樹要減枝,決策樹如果不減枝效果不好。還有教科書會告訴決策樹不能超過五層,超過五層的決策樹效果不好。這個結論和神經網路結論一樣,神經網路不能超過三層也是因為當時資料量不大,決策樹不能超過五層也是因為上個世紀資料量不夠大,二叉樹決策樹如果深度是N的話,複雜度大概是2的N次方,所以不超過五層複雜度也就是三十多。如果資料量達到一百萬的時候,決策樹能達到十幾二十層的規模,如果資料量到了一百億的時候決策樹可能要到三十幾層。
現在,我們強調更深的決策樹,這可能和教科書講的相矛盾。矛盾的原因是現在整個場景下資料量變大,所以要做更深的決策樹。當然,我們也不一定在所有的場景裡都有很大資料量,如果遇到了資料量小的場景,我們也要知道決策樹是要做淺的。最根本來說,就是看有多少資料,能寫出多複雜的模型。
三、特徵選擇不能超過一千個
有些教科書會單獨開個章節來講特徵選擇,告訴我們在拿到資料後,要先刪除一些不重要的特徵,甚至有的教科書註明,特徵數不能超過一千,否則模型效果不好。但其實這個結論也是有前提條件的,如果資料量少,是不能夠充分支撐很多特徵,但如果資料量大,結論就會不一樣。這也就是為什麼我們做LogisticRegression會有幾十億個特徵,而不是限制在幾百個特徵。
過去傳統資料分析軟體,如SAS,之所以只有幾百個特徵,是因為它誕生於上世紀七十年代,它面臨的問題是在具體場景下沒有太多可用資料,可能只有幾百上千個樣本。因此,在設計系統時,就只需要針對幾百個特徵設計,不需要幾十億個特徵,因為上千個樣本無法支撐幾十億特徵。但現在,隨著資料量增加,特徵量也需要增加。所以我認為,在大資料環境下,整個機器學習教科書裡關於特徵選擇的章節已經落後於時代,需要根據新的形式重新撰寫;當然在小資料場景下,它仍然具有價值。
四、整合學習獲得最好學習效果
第四個叫做整合學習,這個技術在各種資料探勘比賽中特別有用,比如近些年KDD CUP的冠軍幾乎都是採用整合學習。什麼是整合學習?它不是做一個模型,而是做很多(例如一千個)不一樣的模型,讓每個模型投票,投票的結果就是最終的結果。如果不考慮資源限制情況,這種模式是效果最好的。這也是為什麼KDDCUP選手們都選擇整合學習的方式,為了追求最後效果,不在乎投入多少,在這種條件下,整合學習就是最好的方式。
但在現實中,企業做機器學習追求的不是用無限的資源做盡可能好的效果,而是如何充分利用有限資源,獲得最好效果。假設企業只有兩臺機器,如何用這兩臺機器獲得最好的效果呢?如果採用整合學習,用兩臺機器跑五個模型,就要把兩臺機器分成五份,每個模型只能用0.4臺機器去跑,因此跑的資料量就有限。那如果換種方式,不用整合學習,就用一個模型去跑,就能跑5倍的資料。通常5倍的資料量能比整合學習有更好的效果。在工業界比較少會應用整合學習,主要是因為工業界絕大多數的場景都是資源受限,資源受限時最好的方式是想辦法放進去更多的資料。整合學習因為跑更多的模型導致只能放更少的資料,通常這種效果都會變差。
五、正樣本和負樣本均取樣到1:1
第五個叫做均衡取樣,絕大多數的教科書都會講到。它是指如果我們訓練一個模型,正樣本和負樣本很不平均,比如在正樣本和負樣本1:100的情況下,就需要對正、負樣本做均衡取樣,把它變成1:1的比例,這樣才是最好的。但其實這個結論不一定對,因為統計學習裡最根本的一條原理就是訓練場景和測試場景的分佈要一樣,所以這個結論只在一個場景下成立,那就是使用模型的場景中正、負樣本是1:1,那這個結論就是對的。
正確的做法是,應用場景是1:100,那訓練集合最好也是1:100。均衡取樣不一定都是對的,多數情況下不取樣反而才是正確的。因為大多時候,我們直接把訓練集合和測試集合做隨機拆分,或者按照時間拆分,二者的分佈就是一致的,那個時候不取樣是最好的。當然有時候,我們也會發現做負樣本取樣會有更好的效果,比如正規化在為某股份制銀行卡中心做交易反欺詐時,就做了負樣本取樣,那是因為當我們把所有樣本都放進去後,發現計算資源不夠,所以只能做取樣。正樣本與負樣本大概是1:1000或者1:10000,如果對正樣本做取樣,損失資訊量會比較大,所以我們選擇對負樣本取樣,比如做1:1000的取樣,再把負樣本以1000的加權加回去。在資源受限時這麼做,會盡可能降低資訊量的損失。但如果僅僅是為了把它做均衡而做負樣本取樣,通常是不對的。和前面幾個問題不同,負樣本取樣並不是因環境改變而結論變化,事實上就不應該做負樣本取樣。
六、交叉驗證是最好的測試方法
下一個問題叫做交叉驗證,是指假設要將一份資料拆分成訓練集和測試集,這個時候怎麼評估出它的誤差?交叉驗證是把集合拆成五份,取四份做訓練集、一份做測試集,並且每次選擇不同的那一份做測試級,最後測出五個結果再做平均,這被認為是最好的測試方法。
交叉驗證確實是一個還不錯的驗證的方法,但在現實應用場景下,它往往不是最合適的一種方式。因為通常來說,我們用機器學習做的事情是預測,絕大多數情況下我們是用現在或者過去的資料做一個模型來預測未來。而拿過去的訓練預測未來的最好測試方法不是交叉驗證,因為交叉驗證是按照交易或者按人拆分的。最合適的是方法其實是按照時間拆分,比如評估的時候選取一個時間點,用在這個時間點之前的資料做訓練,預測在這個時間點之後的,這是最接近真實應用場景的評估結果。
交叉驗證可能只適用於和時間屬性不相關的場景,比如人臉識別,但我們面臨更多的應用場景,無論是風險、營銷或者反欺詐,都是在用過去的資料訓練後預測未來,最合適這樣場景的評估方法不是交叉驗證,而是按照時間去拆分。
七、過擬合一定不好
最後一個叫過擬合,這也是一個討論特別多的話題。以前,通常我們會說如果模型做的太複雜了就會過擬合,如PPT右邊所示,而最好的方式應該是圖中中間的狀態——擬合的剛剛好,圖中左邊的模型underfitting,沒有訓練完全。但現在來看,大多數的實際場景都是在拿過去預測未來,過擬合不一定是不好的,還是要看具體場景。如果這個場景是過去見過的情況比較多,新的情況比較少的時候,過擬合反倒是好的。
打個比方,如果期末考試題就是平時的作業,那我們把平時的作業都背一遍就是最好的方式,而這就是過擬合。如果期末考試不考平時作業,全是新題,那麼這個時候就不能只背平時的作業,還要充分理解這門課的知識,掌握如何推理解題的技巧。所以過擬合好壞與否,完全取決於場景。如果應用場景依靠死記硬背就能搞定,那過擬合反倒是好的。實際上在我們的設計裡面,很多時候我們會傾向於往過擬合靠一點,可能做新題會差一點,但是對於死記硬背的送分題會做的非常好。在拿過去預測未來的應用場景下,有的時候過擬合不一定不好,要根據實際情況來看。
今天與大家分享了教科書中的幾個經典問題。其實在實際工業應用中,我們不會完全按照教科書中的方式去實踐。我們也會設計很深的模型、很深的決策樹、很多的特徵、會過擬合一點,我們更強調按時間拆分,不強調均衡取樣。面對教科書中的結論,我們需要學會的是根據實際場景做出相應靈活判斷。
相關文章
- Python 機器學習 HMM模型三種經典問題Python機器學習HMM模型
- 七大快取經典問題快取
- Java 經典教材Thinking in Java下載JavaThinking
- Dreamweaver製作網頁經典問題大整理網頁
- 揹包問題的一道經典問題
- 八數碼 經典問題
- BATJ大廠測試人員必知的經典效能問題BAT
- 聊聊經典機器學習入門機器學習
- SQL language裡面的經典問題SQL
- 5個經典的前端面試問題前端面試
- 詳解 PHP 中的三大經典模式PHP模式
- 機器學習經典書目彙總機器學習
- 經典的 Top K 問題,你真的懂了麼?
- 四個經典的SQL程式設計問題SQL程式設計
- GCD&&LCM的一些經典問題GC
- 70個經典的 Shell 指令碼面試問題指令碼面試
- 5個經典的JavaScript面試基礎問題JavaScript面試
- JavaScript閉包與變數的經典問題JavaScript變數
- CMMI4級實踐中的5個經典問題及解答
- 經典演算法-最大流問題演算法
- CSS 佈局經典問題初步整理CSS
- google經典演算法面試題-雞蛋問題Go演算法面試題
- 現代物理學7大經典問題,你能理解幾個?或許一個都不能理解
- [大資料量]一個經常問的面試題,把7挑出來。大資料面試題
- 經典面試問題:12小球問題演算法(原始碼)面試演算法原始碼
- 【中亦安圖】Systemstate Dump分析經典案例(7)
- 機器學習經典演算法之EM機器學習演算法
- 機器學習經典演算法之KNN機器學習演算法KNN
- 經典機器學習演算法總結機器學習演算法
- 機器學習 基本概念,常用經典模型機器學習模型
- 非線性規劃的經典例題--選址問題
- 經典面試題面試題
- AT 經典90題
- 就是要你懂TCP–最經典的TCP效能問題TCP
- 【機器學習】深度學習與經典機器學習的優劣勢一覽機器學習深度學習
- 機器學習中的類別不均衡問題機器學習
- 解析機器學習中的資料漂移問題機器學習
- 【C++】 55_經典問題分析 四C++