機器學習教材中的 7 大經典問題

2021-08-07 13:49:09 字數 4561 閱讀 4350

如果希望了解機器學習,或者已經決定投身機器學習,你會第一時間找到各種教材進行充電,同時在心中預設:書裡講的是牛人大神的畢生智慧型,是正確無誤的行動指南,認真學習就能獲得快速提公升。但實際情況是,你很可能已經在走彎路。

科技發展很快,資料在指數級增長,環境也在指數級改變,因此很多時候教科書會跟不上時代的發展。有時,即便是寫教科書的人,也不見得都明白結論背後的「所以然」,因此有些結論就會落後於時代。針對這個問題,第四正規化創始人、首席執行官戴文淵近日就在第四正規化內部分享上,向大家介紹了機器學習教材中的七個經典問題。本文根據演講實錄整理,略有刪減。

有時我們會發現,在實際工作中,應該怎麼做和教科書講的結論相矛盾,這時候要怎麼辦呢?難道教科書中的結論出錯了?事實上,有時確實如此。所以今天我就想和大家分享一下機器學習教材中的一些經典問題,希望對大家今後的工作和學習有所幫助。

那為什麼之前的教科書上會寫神經網路不能超過三層,這就要從神經網路的歷史說起。五十年代有位科學家叫marvin minksy,他是一位生物學家,數學又很好,所以他在研究神經元的時候就在想能不能用數學模型去刻畫生物的神經元,因此就設計了感知機。感知機就像乙個神經細胞,它能像神經細胞一樣連起來,形成神經網路,就像大腦的神經網路。其實在60年代開始的時候,是有很深的神經網路,但當時經過大量實驗發現,不超過三層的神經網路效果不錯,於是大概到80年代時就得出結論:神經網路不宜超過三層。

那為什麼現在這條結論又被推翻了呢?實際上這條結論是有前提條件的,即在資料量不大的情況下,神經網路不宜超過三層。而從2023年開始,大家發現隨著資料增加,深度神經網路的表現良好,所以慢慢走向深度學習。其實這裡真正正確的原理是valiant引理,它可以理解為「模型複雜度(例如專家系統的規則數量)要和資料量成正比」。資料量越大,模型就越複雜。上個世紀因為資料量小,所以神經網路的層數不能太深,現在資料量大,所以神經網路的層數就要做深。這也解釋了為什麼當時教科書會有這樣的結論,而現在隨著深度學習的流行,大家已經不再會認為這句話是對的。

如果有同學看教科書上介紹決策樹,會有乙個說法就是決策樹要減枝,決策樹如果不減枝效果不好。還有教科書會告訴決策樹不能超過五層,超過五層的決策樹效果不好。這個結論和神經網路結論一樣,神經網路不能超過三層也是因為當時資料量不大,決策樹不能超過五層也是因為上個世紀資料量不夠大,二叉樹決策樹如果深度是n的話,複雜度大概是2的n次方,所以不超過五層複雜度也就是三十多。如果資料量達到一百萬的時候,決策樹能達到十幾二十層的規模,如果資料量到了一百億的時候決策樹可能要到三十幾層。

現在,我們強調更深的決策樹,這可能和教科書講的相矛盾。矛盾的原因是現在整個場景下資料量變大,所以要做更深的決策樹。當然,我們也不一定在所有的場景裡都有很大資料量,如果遇到了資料量小的場景,我們也要知道決策樹是要做淺的。最根本來說,就是看有多少資料,能寫出多複雜的模型。

有些教科書會單獨開個章節來講特徵選擇,告訴我們在拿到資料後,要先刪除一些不重要的特徵,甚至有的教科書註明,特徵數不能超過一千,否則模型效果不好。但其實這個結論也是有前提條件的,如果資料量少,是不能夠充分支撐很多特徵,但如果資料量大,結論就會不一樣。這也就是為什麼我們做logisticregression會有幾十億個特徵,而不是限制在幾百個特徵。

過去傳統資料分析軟體,如sas,之所以只有幾百個特徵,是因為它誕生於上世紀七十年代,它面臨的問題是在具體場景下沒有太多可用資料,可能只有幾百上千個樣本。因此,在設計系統時,就只需要針對幾百個特徵設計,不需要幾十億個特徵,因為上千個樣本無法支撐幾十億特徵。但現在,隨著資料量增加,特徵量也需要增加。所以我認為,在大資料環境下,整個機器學習教科書裡關於特徵選擇的章節已經落後於時代,需要根據新的形式重新撰寫;當然在小資料場景下,它仍然具有價值。

第四個叫做整合學習,這個技術在各種資料探勘比賽中特別有用,比如近些年kdd cup的冠軍幾乎都是採用整合學習。什麼是整合學習?它不是做乙個模型,而是做很多(例如一千個)不一樣的模型,讓每個模型投票,投票的結果就是最終的結果。如果不考慮資源限制情況,這種模式是效果最好的。這也是為什麼kddcup選手們都選擇整合學習的方式,為了追求最後效果,不在乎投入多少,在這種條件下,整合學習就是最好的方式。

但在現實中,企業做機器學習追求的不是用無限的資源做盡可能好的效果,而是如何充分利用有限資源,獲得最好效果。假設企業只有兩台機器,如何用這兩台機器獲得最好的效果呢?如果採用整合學習,用兩台機器跑五個模型,就要把兩台機器分成五份,每個模型只能用0.4臺機器去跑,因此跑的資料量就有限。那如果換種方式,不用整合學習,就用乙個模型去跑,就能跑5倍的資料。通常5倍的資料量能比整合學習有更好的效果。在工業界比較少會應用整合學習,主要是因為工業界絕大多數的場景都是資源受限,資源受限時最好的方式是想辦法放進去更多的資料。整合學習因為跑更多的模型導致只能放更少的資料,通常這種效果都會變差。

第五個叫做均衡取樣,絕大多數的教科書都會講到。它是指如果我們訓練乙個模型,正樣本和負樣本很不平均,比如在正樣本和負樣本1:100的情況下,就需要對正、負樣本做均衡取樣,把它變成1:1的比例,這樣才是最好的。但其實這個結論不一定對,因為統計學習裡最根本的一條原理就是訓練場景和測試場景的分布要一樣,所以這個結論只在乙個場景下成立,那就是使用模型的場景中正、負樣本是1:1,那這個結論就是對的。

正確的做法是,應用場景是1:100,那訓練集合最好也是1:100。均衡取樣不一定都是對的,多數情況下不取樣反而才是正確的。因為大多時候,我們直接把訓練集合和測試集合做隨機拆分,或者按照時間拆分,二者的分布就是一致的,那個時候不取樣是最好的。當然有時候,我們也會發現做負樣本取樣會有更好的效果,比如正規化在為某股份制銀行卡中心做交易反欺詐時,就做了負樣本取樣,那是因為當我們把所有樣本都放進去後,發現計算資源不夠,所以只能做取樣。正樣本與負樣本大概是1:1000或者1:10000,如果對正樣本做取樣,損失資訊量會比較大,所以我們選擇對負樣本取樣,比如做1:1000的取樣,再把負樣本以1000的加權加回去。在資源受限時這麼做,會盡可能降低資訊量的損失。但如果僅僅是為了把它做均衡而做負樣本取樣,通常是不對的。和前面幾個問題不同,負樣本取樣並不是因環境改變而結論變化,事實上就不應該做負樣本取樣。

下乙個問題叫做交叉驗證,是指假設要將乙份資料拆分成訓練集和測試集,這個時候怎麼評估出它的誤差?交叉驗證是把集合拆成五份,取四份做訓練集、乙份做測試集,並且每次選擇不同的那乙份做測試級,最後測出五個結果再做平均,這被認為是最好的測試方法。

交叉驗證確實是乙個還不錯的驗證的方法,但在現實應用場景下,它往往不是最合適的一種方式。因為通常來說,我們用機器學習做的事情是**,絕大多數情況下我們是用現在或者過去的資料做乙個模型來**未來。而拿過去的訓練**未來的最好測試方法不是交叉驗證,因為交叉驗證是按照交易或者按人拆分的。最合適的是方法其實是按照時間拆分,比如評估的時候選取乙個時間點,用在這個時間點之前的資料做訓練,**在這個時間點之後的,這是最接近真實應用場景的評估結果。

交叉驗證可能只適用於和時間屬性不相關的場景,比如人臉識別,但我們面臨更多的應用場景,無論是風險、營銷或者反欺詐,都是在用過去的資料訓練後**未來,最合適這樣場景的評估方法不是交叉驗證,而是按照時間去拆分。

最後乙個叫過擬合,這也是乙個討論特別多的話題。以前,通常我們會說如果模型做的太複雜了就會過擬合,如ppt右邊所示,而最好的方式應該是圖中中間的狀態——擬合的剛剛好,圖中左邊的模型underfitting,沒有訓練完全。但現在來看,大多數的實際場景都是在拿過去**未來,過擬合不一定是不好的,還是要看具體場景。如果這個場景是過去見過的情況比較多,新的情況比較少的時候,過擬合反倒是好的。

打個比方,如果期末考試題就是平時的作業,那我們把平時的作業都背一遍就是最好的方式,而這就是過擬合。如果期末考試不考平時作業,全是新題,那麼這個時候就不能只背平時的作業,還要充分理解這門課的知識,掌握如何推理解題的技巧。所以過擬合好壞與否,完全取決於場景。如果應用場景依靠死記硬背就能搞定,那過擬合反倒是好的。實際上在我們的設計裡面,很多時候我們會傾向於往過擬合靠一點,可能做新題會差一點,但是對於死記硬背的送分題會做的非常好。在拿過去**未來的應用場景下,有的時候過擬合不一定不好,要根據實際情況來看。

今天與大家分享了教科書中的幾個經典問題。其實在實際工業應用中,我們不會完全按照教科書中的方式去實踐。我們也會設計很深的模型、很深的決策樹、很多的特徵、會過擬合一點,我們更強調按時間拆分,不強調均衡取樣。面對教科書中的結論,我們需要學會的是根據實際場景做出相應靈活判斷。

csdn ai熱衷分享 歡迎掃碼關注

十大經典的機器學習演算法

弱人工智慧近幾年取得了重大突破,悄然間,已經成為每個人生活中必不可少的一部分。以我們的智慧型手機為例,看看到底溫藏著多少人工智慧的神奇魔術。下圖是一部典型的智慧型手機上安裝的一些常見應用程式,可能很多人都猜不到,人工智慧技術已經是手機上很多應用程式的核心驅動力。十大經典的機器學習演算法 圖1 智慧型...

機器學習十大經典演算法之線性回歸

線性回歸可以用以下式子進行描述 線性回歸即連續值的 問題,即根據給定的x以及模型引數 的計算下,使得該方程的相應能夠無限逼近真實值y。下面來舉乙個連續值 的簡單例子 y w x b 當知道兩組引數時,即可通過消元法求得引數w與b,即可得到該方程的精確解。即w 1.477,b 0.089 1.567 ...

詳解 PHP 中的三大經典模式

單例模式 單例模式的含義 作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統全域性地提供這個例項。它不會建立例項副本,而是會向單例類內部儲存的例項返回乙個引用。單例模式的三個要素 儲存類唯一例項的靜態變數。建構函式和轉殖函式必須是私有的,放在外部去例項化,這樣就不存在單...