干货 | 机器学习正在面临哪些主要挑战?
點(diǎn)擊上方“AI有道”,選擇“星標(biāo)公眾號”
重磅干貨,第一時間送達(dá)!
在上一篇文章:
機(jī)器學(xué)習(xí)實(shí)用指南:這些基礎(chǔ)盲點(diǎn)請務(wù)必注意!
紅色石頭給大家介紹了《Scikit-Learn 和 TensorFlow 機(jī)器學(xué)習(xí)指南》第1次學(xué)習(xí)筆記。內(nèi)容很干,翻譯的質(zhì)量紅色石頭自認(rèn)為還是不錯的,翻譯的同時也會取舍或增加一些內(nèi)容,盡量把主要內(nèi)容提煉出來,希望能幫到大家學(xué)習(xí)這本書。雖然更新得有點(diǎn)慢,但是翻譯+整理確實(shí)比較花時間~對了,這個翻譯項目我已經(jīng)同步在 GitHub 上了,喜歡的給個 Star 吧!鏈接如下:
https://github.com/RedstoneWill/Hands-On-Machine-Learning-with-Sklearn-TensorFlow
好了,言歸正傳,今天給大家講講兩個比較實(shí)際的問題:一是機(jī)器學(xué)習(xí)面臨得哪些挑戰(zhàn);二是為什么要使用測試集和驗(yàn)證集。
1. 機(jī)器學(xué)習(xí)面臨哪些挑戰(zhàn)?
簡而言之,因?yàn)闄C(jī)器學(xué)習(xí)的主要任務(wù)就是選擇合適的機(jī)器學(xué)習(xí)算法在數(shù)據(jù)集上進(jìn)行訓(xùn)練,所以不好的算法和不好的數(shù)據(jù)都可能嚴(yán)重影響訓(xùn)練效果。下面我們先來看看不好的數(shù)據(jù)會帶來什么影響。
1.1 訓(xùn)練數(shù)據(jù)不足
對一個蹣跚學(xué)步的孩子來說,如何識別蘋果?方法是拿出很多各種各樣顏色、形狀的蘋果圖片給他看,教他。這樣,孩子就能夠更好地識別出各種蘋果。
而對機(jī)器學(xué)習(xí)來說還達(dá)不到這種程度,大多數(shù)機(jī)器學(xué)習(xí)算法都需要很多數(shù)據(jù)才能有不錯的表現(xiàn)。即使是簡單的算法可能也需要上千個訓(xùn)練樣本。對于復(fù)雜的機(jī)器學(xué)習(xí)問題,例如圖像識別、語音處理,需要的訓(xùn)練樣本就更多了,甚至是百萬級別的(除非你基于已有的模型進(jìn)行再次訓(xùn)練,類似于遷移學(xué)習(xí),所需的樣本可能不多)。
數(shù)據(jù)的不合理有效性:
在 2001 年發(fā)表的著名文章里,微軟研究員 Michele Banko 和 Eric Brill 展示了不同的機(jī)器學(xué)習(xí)算法在一個較復(fù)雜的自然語言消歧問題上的表現(xiàn)情況,他們發(fā)現(xiàn)一旦有足夠多的訓(xùn)練數(shù)據(jù),各算法的表現(xiàn)都基本一致(如下圖所示)。
正如作者所說:“這個結(jié)果表明我們可能需要重新考慮是花費(fèi)時間、金錢在算法研究上還是在擴(kuò)充語料庫上。”
對于復(fù)雜問題,數(shù)據(jù)比算法更加重要這一思想在 Peter Norving 等人于 2009 年發(fā)布的文章《The Unreasonable Effectiveness of Data》中得到進(jìn)一步的推廣。值得注意的是,小型和中等數(shù)量的數(shù)據(jù)集仍然非常常見,而且想要獲得大量的訓(xùn)練數(shù)據(jù)通常并不是一件簡單的事情,所以還不能拋棄算法。
1.2 沒有代表性的訓(xùn)練數(shù)據(jù)
為了讓模型有更好的泛化能力,很重要的一點(diǎn)是你的訓(xùn)練數(shù)據(jù)應(yīng)該有很好的代表性,無論你使用的是基于實(shí)例學(xué)習(xí)還是基于模型學(xué)習(xí)。例如,之前我們訓(xùn)練線性模型選擇的一些國家并不具有很好的代表性,缺少了一些國家。下圖展示了增加這些國家之后的數(shù)據(jù)分布和線性模型。
如果你在這些完整的數(shù)據(jù)上訓(xùn)練線性模型,得到的黑色實(shí)線;原來的線性模型是藍(lán)色虛線。如你所見,添加幾個缺失的國家后不僅顯著地改變了模型,而且清楚地表明,這種簡單的線性模型可能永遠(yuǎn)都不會有很好的性能。看起來,非常富裕的國家并不比中等富裕國家幸福(事實(shí)上,他們似乎更不幸福),相反,一些窮國似乎比許多富裕國家更加幸福。
如果使用沒有代表性的數(shù)據(jù)進(jìn)行訓(xùn)練,模型不可能得到準(zhǔn)確的預(yù)測,特別是那些非常貧困和非常富有的國家。?
使用有代表性的訓(xùn)練數(shù)據(jù)是非常重要的。但這通常比較困難,如果樣本太少,容易引入采樣噪聲(即非代表性的數(shù)據(jù));即使是很多樣本,如果采樣方法有缺陷,也可能得到不好的數(shù)據(jù),這被稱為采樣偏差(sampling bias)。
一個著名的采樣偏差例子:
或許最有名的采樣偏差例子發(fā)生在 1936 年的美國大選,林軒田課程中也提到過這個例子。當(dāng)時的候選人是 Landon 和 Roosevelt,《Literary Digest》做了一次很大的民意調(diào)查,給 10,000,000 選民發(fā)送郵件征集選民意向,總共收到了 2,400,000 的反饋結(jié)果。調(diào)查報告顯示 Landon 的支持率是 57%,但是最終選舉投票 Roosevelt 得到了 62% 的選票贏了 Landon。差別如此之大的原因在于《Literary Digest》的民意調(diào)查采樣方法有缺陷:
首先,《Literary Digest》發(fā)送郵件的選民大部分都是美國富人,而這些富人支持共和黨(即 Landon)的較多。?
其次,只有不到 25% 的人反饋了民意調(diào)查。這同樣引入了采樣偏差,排除了那些對選舉不關(guān)心的,或者不喜歡《Literary Digest》的,或者是其他關(guān)鍵組織。這種采樣偏差被稱為無應(yīng)答偏差(nonreponse bias)。
還有一個例子,假如你想構(gòu)建一個系統(tǒng)來識別 funk 音樂視頻。得到訓(xùn)練集的方法之一就是在 YouTube 上搜索 “funk music”,得到的視頻作為訓(xùn)練集,但這是假設(shè) YouTube 搜索引擎返回的是所有具有代表性的 funk music。事實(shí)上,搜索結(jié)果可能偏向于推薦某些有名的音樂家(跟你的所在地、平時喜好都有關(guān)系)。
1.3?低質(zhì)量數(shù)據(jù)
顯然,如果訓(xùn)練數(shù)據(jù)都是錯誤、離群點(diǎn)和噪聲(例如,由于質(zhì)量不佳的測量),想要得到一個性能較好的模型是非常困難的。因此,花費(fèi)時間清洗訓(xùn)練數(shù)據(jù)是十分必要的,這也是數(shù)據(jù)科學(xué)家們非常重視的。常用的方法如下:
對于離群點(diǎn),通常的辦法是剔除這個實(shí)例或者手動修正這個錯誤。
對于有特征缺失值的情況,可以選擇刪除這個特征,或者刪除缺失特征的實(shí)例樣本,或者填充缺失值(中值或平均值),或者分別訓(xùn)練包含該特征和不包含該特征的兩個模型對比效果等方法。
1.4?不相關(guān)特征
俗話說:種瓜得瓜,種豆得豆。如果訓(xùn)練數(shù)據(jù)包含了足夠的相關(guān)特征,沒有太多的不相關(guān)特征,模型就有能力學(xué)習(xí)。機(jī)器學(xué)習(xí)如此強(qiáng)大的一個重要原因就是提取一些重要的特征來訓(xùn)練。提取特征并處理的過程我們稱之為特征工程,具體包含以下幾個方面:
特征選擇:從所有特征中選擇最有用的特征供模型來訓(xùn)練。
特征提取:結(jié)合已有的特征產(chǎn)生更有用的特征(例如降維技術(shù))。
通過收集新數(shù)據(jù)創(chuàng)建新特征。
以上就是一些不好的數(shù)據(jù)類型,接下來我們將介紹有哪些不好的算法。
1.5?過擬合
舉個形象的例子,比如你去某個國家旅游搭乘出租車,半路上司機(jī)把你丟在路邊,你可能會說這個國家的出租車司機(jī)都是壞蛋!這種過度概括的行為是人類經(jīng)常做的。同樣不幸的是,機(jī)器有時候也會出現(xiàn)類似的情況,機(jī)器學(xué)習(xí)里稱之為過擬合:表示模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)的很好,但是在其它樣本上表現(xiàn)得卻不好,泛化能力差。?
下圖展示了使用高階多項式模型來擬合生活滿意度與人均 GDP 的關(guān)系。盡管在訓(xùn)練數(shù)據(jù)上該高階模型表現(xiàn)比簡單的線性模型好得多,但是你真的相信這是一個很好的模型嗎?
諸如深層神經(jīng)網(wǎng)絡(luò)這種復(fù)雜模型可以檢測出數(shù)據(jù)中的細(xì)微模式,但是如果訓(xùn)練集包含噪聲,或者樣本不多(帶來采樣噪聲),模型很可能會檢測到噪聲本身的模式。很明顯這些模式無法很好地泛化到其它樣本中。例如,生活滿意度模型中,采用國家名稱這一屬性作為特征之一,發(fā)現(xiàn)所有訓(xùn)練樣本中國家名稱包含字母 w 的生活指數(shù)都大于 7:New Zealand (7.3), Norway (7.4), Sweden (7.2), Switzerland (7.5)。這種結(jié)論你覺得能歸納到訓(xùn)練樣本以外的其它樣本嗎?例如 Rwanda、Zimbabwe?顯然是不行的,這一模式只是偶然發(fā)生在訓(xùn)練數(shù)據(jù)中,但是模型本身沒有辦法判斷一個模式是真實(shí)反映數(shù)據(jù)內(nèi)在特征的還是數(shù)據(jù)中噪聲造成的。
當(dāng)模型過于復(fù)雜時,容易發(fā)生過擬合,常用的解決方法是:
選擇少量的參數(shù)作為特征,簡化模型(例如使用線性模型而不是高階模型)。
獲取更多的訓(xùn)練數(shù)據(jù)
減少訓(xùn)練數(shù)據(jù)中的噪聲(例如修復(fù)數(shù)據(jù)中的錯誤,移除離群點(diǎn))。
限制模型復(fù)雜度,讓它變得簡單,減少過擬合風(fēng)險的做法稱之為正則化(regularization)。例如,我們之前定義的線性模型包含兩個參數(shù) θ0 和 θ1 。這給了學(xué)習(xí)算法兩個自由度來讓模型適應(yīng)訓(xùn)練數(shù)據(jù):可以調(diào)試直線的截距 θ0 和斜率 θ1。如果令 θ1=0,則算法只有一個自由度,很難較好地擬合數(shù)據(jù):可以做的僅僅是把這條水平線上下移動,盡量接近訓(xùn)練樣本,最終停留在所有訓(xùn)練樣本的均值位置。這確實(shí)是一個非常簡單的模型!如果 θ1≠0,但值很小,學(xué)習(xí)算法有效的自由度在一和二之間,它比兩個自由度模型簡單,比一個自由度模型復(fù)雜。其實(shí),你的目標(biāo)就是在完美擬合數(shù)據(jù)和簡化模型之間找到平衡,使模型具有較好的泛化能力。
下圖展示了三種模型:藍(lán)色點(diǎn)線表示原始的線性模型,缺少一些國家的數(shù)據(jù);紅色短劃線表示第二個線性模型,使用了所有國家的數(shù)據(jù)訓(xùn)練得到的;藍(lán)色實(shí)線表示的模型與第一個類似,只是使用了正則化限制。可以看出正則化使得模型的斜率變小,對訓(xùn)練數(shù)據(jù)的擬合效果比第一種差一些,但是對新樣本的擬合效果比第一種更好,泛化能力變強(qiáng)了。
正則化的程度由超參數(shù)控制。超參數(shù)是算法的參數(shù)(不是模型的參數(shù)),不受算法本身的影響。超參數(shù)在訓(xùn)練模型之前就設(shè)置好,整個訓(xùn)練過程中保持不變。如果將超參數(shù)設(shè)置很大的值,將會得到一個近似平坦的模型(斜率接近 0 )。這時候不太可能出現(xiàn)過擬合,但是模型過于簡單,對數(shù)據(jù)的擬合效果很差。這種情況叫做欠擬合,它和過擬合是兩個對立的概念。調(diào)試超參數(shù)是構(gòu)建機(jī)器學(xué)習(xí)系統(tǒng)過程中非常重要的一步,下一章節(jié)我們想詳細(xì)介紹。
1.6?欠擬合
正如上文所說,欠擬合是與過擬合對立的概念:它發(fā)生在模型過于簡單以至于不能很好地擬合數(shù)據(jù)的時候。例如,生活滿意度的線性模型就可能存在欠擬合,實(shí)際的模型可能要比線性模型更加復(fù)雜。因此,線性模型即便是對訓(xùn)練樣本也會預(yù)測得不夠準(zhǔn)確。
解決欠擬合得主要方法有:
選擇更加強(qiáng)大得模型,帶有更多參數(shù)。
增加更好得特征到學(xué)習(xí)算法中(特征工程)。
減小對模型的限制(例如減小正則化超參數(shù))。
1.7?回顧
到目前為止,我們已經(jīng)學(xué)習(xí)了很多機(jī)器學(xué)習(xí)概念知識,下面做個簡單回顧:
機(jī)器學(xué)習(xí)就是讓機(jī)器能夠從數(shù)據(jù)中學(xué)習(xí),在某些任務(wù)中做得更好,而不是簡單地執(zhí)行固定的程序。
機(jī)器學(xué)習(xí)類型有很多:監(jiān)督式和非監(jiān)督式,批量學(xué)習(xí)和在線學(xué)習(xí),基于實(shí)例學(xué)習(xí)和基于模型學(xué)習(xí)等。
在一個機(jī)器學(xué)習(xí)工程中,我們收集數(shù)據(jù)作為訓(xùn)練集,使用學(xué)習(xí)算法在訓(xùn)練集上進(jìn)行訓(xùn)練。如果算法是基于模型的,得到最佳的模型參數(shù),使模型能夠擬合訓(xùn)練集,并且對訓(xùn)練集之外的樣本也能有較好的擬合效果。如果算法是基于實(shí)例的,學(xué)習(xí)過程就是簡單的記憶,并使用相似性測量來歸納到新的樣本中。
以下因素可能造成系統(tǒng)表現(xiàn)不好:訓(xùn)練集樣本太少,數(shù)據(jù)不具有代表性,數(shù)據(jù)有噪聲,受到不相關(guān)特征的污染。最后,模型不能過于簡單(欠擬合),也不能過于復(fù)雜(過擬合)。
還有一點(diǎn)需要討論:一旦訓(xùn)練了一個模型,不能僅僅是“希望”它的泛化能力好,我們還要去評估這個模型,必要的時候調(diào)試模型。下面就來介紹怎么去調(diào)試模型。
2.?測試和驗(yàn)證
評估模型好壞的唯一方法就是測試模型在新樣本中的表現(xiàn)。一種做法是把模型直接放到生產(chǎn)中實(shí)際檢測其表現(xiàn)。但如果模型性能不佳,會讓用戶抱怨吐槽。因此,這并不是一個好方法。?
一種更好的做法是把數(shù)據(jù)集劃分成兩部分:訓(xùn)練集和測試集。顧名思義,訓(xùn)練集用來訓(xùn)練模型,測試集用來評估模型。模型在新樣本下的錯誤率被稱為泛化誤差(又叫樣本外誤差,out-of-sample error)。模型在測試集上評估模型,得到的誤差可以近似認(rèn)為就是模型的泛化誤差。一般使用整個數(shù)據(jù)集的 80% 作為訓(xùn)練集,20% 作為測試集。
?如果模型的訓(xùn)練誤差(模型在訓(xùn)練集上的誤差)很小,而泛化誤差很大,則說明模型很可能發(fā)生了過擬合。?
這下,評估模型變得簡單了:使用測試集即可。如果有兩個模型(一個線性模型,一個多項式模型),如何決定哪個模型更好呢?方法就是直接訓(xùn)練兩個模型,然后比較它們在測試集上的泛化誤差大小就可以了。?
還有一個問題,如何選擇最佳的正則化超參數(shù)呢?一種方法就是分別使用不同的超參數(shù)訓(xùn)練模型,然后比較各個超參數(shù)對應(yīng)模型的泛化誤差(泛化誤差在測試集上得到),對應(yīng)泛化誤差最小(例如 5%)的超參數(shù)即為最佳值。?
然后,將模型上線發(fā)布,但不幸的是模型表現(xiàn)卻并不像測試時那么好,實(shí)際誤差達(dá)到了 15%。這又是為什么呢??
問題在于我們是在同一測試集上多次測量泛化誤差的,這樣產(chǎn)生的最佳模型是適應(yīng)測試集的,可能造成模型在測試集之外新的樣本上表現(xiàn)得不太好。
解決這一問題通常的做法是除了設(shè)置訓(xùn)練集、測試集之外,還設(shè)置一個驗(yàn)證集。同樣使用訓(xùn)練集來訓(xùn)練不同超參數(shù)的模型,每個模型在驗(yàn)證集上進(jìn)行驗(yàn)證,選擇表現(xiàn)最好的超參數(shù)對應(yīng)的模型,最后該模型在測試集上進(jìn)行測試得到的誤差為最終的泛化誤差。?
為了避免驗(yàn)證集占用過多的訓(xùn)練樣本,造成浪費(fèi),通常使用交叉驗(yàn)證(cross-validation):將整個訓(xùn)練集劃分為 N 份,取其中的 N-1 份作為訓(xùn)練集,另外的 1 份作為驗(yàn)證集,重復(fù) N 次。然后將 N 次的驗(yàn)證誤差求平均作為驗(yàn)證誤差。一旦模型和超參數(shù)選定之后,使用該模型和超參數(shù),在整個訓(xùn)練集上進(jìn)行訓(xùn)練。最后,在測試集上測試得到泛化誤差。
無免費(fèi)午餐定理:
模型是樣本觀測的一種簡化。簡化意味著丟棄一些多余的不具備泛化能力的細(xì)節(jié)。然而,決定哪些數(shù)據(jù)保留,哪些數(shù)據(jù)拋棄,我們必須做出假設(shè)。例如,一個線性模型假設(shè)數(shù)據(jù)是呈線性關(guān)系的,實(shí)例與直線之間的距離僅僅是噪聲,是可以忽略的。?
在 1996 年的一篇著名論文中,David Wolpert 證明了如果對數(shù)據(jù)不作任何假設(shè),選擇一個模型而不選擇其它模型是沒有理由的。這被稱為無免費(fèi)午餐(NFL)定理。對某些數(shù)據(jù)集來說,最好的模型是線性模型,而對于另外某些數(shù)據(jù)集來說,最好的模型可能是神經(jīng)網(wǎng)絡(luò)。沒有哪個模型一定是最好的(正如這個定理的名字那樣)。確定哪個模型最好的唯一方法就是對所有的模型進(jìn)行評估,但是這顯然不太可能。實(shí)際上我們通常會對數(shù)據(jù)作出某些合理的假設(shè),僅僅評估一些合理的模型。例如,我們可能設(shè)置不同的正則化參數(shù)來評估線性模型;對于更復(fù)雜的問題,可能評估不同的神經(jīng)網(wǎng)絡(luò)模型。
【推薦閱讀】
干貨 | 公眾號歷史文章精選(附資源)
我的深度學(xué)習(xí)入門路線
我的機(jī)器學(xué)習(xí)入門路線圖
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的干货 | 机器学习正在面临哪些主要挑战?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Scikit-Learn 与 Tenso
- 下一篇: 机器学习实战指南:如何入手第一个机器学习