英國(guó)AI學(xué)者M(jìn)ichael Lones獨(dú)家避坑指南,破解機(jī)器學(xué)習(xí)五大陷阱
本文轉(zhuǎn)自雷鋒網(wǎng),如需轉(zhuǎn)載請(qǐng)至雷鋒網(wǎng)官網(wǎng)申請(qǐng)授權(quán)。
近日,Michael A. Lones教授在arXiv提交了一篇論文,全面論述了機(jī)器學(xué)習(xí)在實(shí)際應(yīng)用中的常見(jiàn)陷阱以及對(duì)應(yīng)方法,以幫助機(jī)器學(xué)習(xí)的學(xué)術(shù)小白們快速入門。
論文地址:https://arxiv.org/pdf/2108.02497.pdf
Michael A. Lones是愛(ài)丁堡赫瑞瓦特大學(xué)數(shù)學(xué)與計(jì)算機(jī)科學(xué)系副教授,主要研究研究涵蓋優(yōu)化、數(shù)據(jù)挖掘、醫(yī)學(xué)信息學(xué)、系統(tǒng)生物學(xué)和非標(biāo)準(zhǔn)計(jì)算等。
作為一名資深機(jī)器學(xué)習(xí)領(lǐng)域?qū)<?,Michael 更關(guān)注學(xué)術(shù)界,而非工業(yè)界(工業(yè)界水太深,還得教會(huì)你怎么勸酒哈哈)。這篇論文的經(jīng)驗(yàn)分享,是他在實(shí)際的機(jī)器學(xué)習(xí)教學(xué)和研究中積累的知識(shí)。不同于其他普遍的機(jī)器學(xué)習(xí)方法,本文僅反映學(xué)術(shù)界關(guān)注的一些重點(diǎn)問(wèn)題,比如如何嚴(yán)謹(jǐn)?shù)卦u(píng)估和比較機(jī)器學(xué)習(xí)模型,如何在論文中更好的論述自己的工作等。
為了使本文更加生動(dòng)和易讀,Michael 采用了簡(jiǎn)單明了的“該做什么,不該做什么”的編寫(xiě)風(fēng)格來(lái),以免大家還得費(fèi)勁巴拉的“總結(jié)本段大意、總結(jié)文章大意”。
總體來(lái)看,本文更側(cè)重于學(xué)術(shù)研究背景下的常見(jiàn)問(wèn)題,比如學(xué)術(shù)狗們需要在論文里同時(shí)對(duì)若干種方法進(jìn)行嚴(yán)格的論述和比較,并從現(xiàn)象中挖掘出有效的結(jié)論,升華工作的深度和內(nèi)在。具體而言,它涵蓋了機(jī)器學(xué)習(xí)的五個(gè)階段:
- 在建立模型之前要做什么準(zhǔn)備?
- 如何可靠地建立模型
- 如何正確全面而穩(wěn)健地評(píng)估模型
- 如何客觀地比較模型
- 如何匯總、分析現(xiàn)象,形成結(jié)論并提出觀點(diǎn)
一、構(gòu)建模型前的準(zhǔn)備
很多人在接到一個(gè)項(xiàng)目或者研究需求的時(shí)候,會(huì)火急火燎的寫(xiě)代碼、訓(xùn)練模型、評(píng)估模型,好像一天就要把所有的事兒都給干完。但其實(shí)我們應(yīng)該慢下來(lái),首先要花時(shí)間思考這個(gè)項(xiàng)目的目標(biāo),分解它的需求,并且踏下心來(lái)細(xì)細(xì)查看要輸入模型的數(shù)據(jù),想想這些數(shù)據(jù)有沒(méi)有什么規(guī)律?潛規(guī)則?或者限制?
此外,我們還得花點(diǎn)心思了解一下這個(gè)領(lǐng)域的研究進(jìn)展,其他工作已經(jīng)做過(guò)哪些嘗試,結(jié)果如何。如果不做這些前期的準(zhǔn)備,直接上來(lái)就寫(xiě)代碼,最終很可能會(huì)得到一些重復(fù)的結(jié)論,訓(xùn)練出一套無(wú)法滿足預(yù)期的模型,還會(huì)掉進(jìn)別人已經(jīng)陷進(jìn)去的坑里。這樣浪費(fèi)時(shí)間不說(shuō),還無(wú)法發(fā)表自己的論文。
1.多花時(shí)間了解一下手中的數(shù)據(jù)
我們做研究的目的就是發(fā)表論文。如果收集的數(shù)據(jù)質(zhì)量很高,噪聲沒(méi)有特別明顯;采集的設(shè)備和方法也十分可靠,那么發(fā)論文就容易多了。
舉例來(lái)說(shuō),如果從網(wǎng)上下載的數(shù)據(jù)集,一定確保其來(lái)源的可靠性;如果是一篇論文中開(kāi)源的,一定要認(rèn)真去讀這篇論文,確保它不是發(fā)表在野雞會(huì)議/野雞期刊上的文章,而是一些比較靠譜的來(lái)源。
此外,我們要檢查文章中有沒(méi)有提到過(guò)數(shù)據(jù)集的局限性。千萬(wàn)不要以為一個(gè)數(shù)據(jù)集被很多篇論文引用過(guò),它的質(zhì)量就很好。有時(shí)候人們可能僅僅是因?yàn)檫@個(gè)數(shù)據(jù)集的獲取成本低,下載速度快,或者不用給作者發(fā)送索取郵件,而去用一些質(zhì)量稍差的數(shù)據(jù)。事實(shí)上,很多在學(xué)術(shù)界被廣泛使用的數(shù)據(jù)集也存在很大局限性。具體的論述可以去看[Paullada等人,2020]的討論。
如果用質(zhì)量很差的數(shù)據(jù)集訓(xùn)練模型,訓(xùn)練出的模型性能大概率也很差,我們稱其為“Garbage in Garbage out,垃圾進(jìn)垃圾出”。因此,在項(xiàng)目開(kāi)始的時(shí)候,我們要確保數(shù)據(jù)的可用性,保證它是有意義的。對(duì)此,建議去做一些探索性的數(shù)據(jù)分析,至于如何發(fā)現(xiàn)并處理原始數(shù)據(jù)集的缺失項(xiàng)和數(shù)據(jù)點(diǎn)不一致的問(wèn)題,可以看看[Cox2017]的工作。
千萬(wàn)別犯懶,在訓(xùn)練模型之前對(duì)數(shù)據(jù)進(jìn)行處理的成本,是整個(gè)機(jī)器學(xué)習(xí)流程中最低的,也是最容易的。至少,我們不用回頭再跟導(dǎo)師或者論文評(píng)委掰扯為什么使用了質(zhì)量不好的數(shù)據(jù)集。
2.別偷看測(cè)試集的數(shù)據(jù)
觀察原始數(shù)據(jù)的質(zhì)量和模式是機(jī)器學(xué)習(xí)過(guò)程的好習(xí)慣,畢竟知道根基才知道如何搭建上層建筑嘛。當(dāng)我們觀察數(shù)據(jù)時(shí),很可能從中“悟到一些什么”,并且將它們變成先驗(yàn)知識(shí)固化在我們的腦海中。這些模式和知識(shí)會(huì)指導(dǎo)我們進(jìn)行正確的建模和數(shù)據(jù)處理。
但是,在這個(gè)過(guò)程中,要注意千萬(wàn)不要作出一些“不可檢驗(yàn)的假設(shè)”,這些不可檢驗(yàn)的假設(shè)如何被放進(jìn)模型中,可能會(huì)將僅出現(xiàn)在測(cè)試集中的信息偷偷泄露給模型。在這里,“不可側(cè)視”這一點(diǎn)很重要。我們可以根據(jù)數(shù)據(jù)做出一些假設(shè),但是這些假設(shè)應(yīng)該都是從訓(xùn)練集中得到的,絕對(duì)不能從測(cè)試集中偷窺。
為了保證這一點(diǎn),在最初的探索性分析階段,我們應(yīng)該避免對(duì)測(cè)試集進(jìn)行觀察和分析,否則很可能會(huì)自覺(jué)或不自覺(jué)的做出一些假設(shè),以一種無(wú)法測(cè)試的方法限制模型的通用性。關(guān)于這一點(diǎn)我在下文中也多次提到的問(wèn)題,因?yàn)橐坏y(cè)試集的信息泄漏到訓(xùn)練過(guò)程,機(jī)器學(xué)習(xí)模型的泛化能力將會(huì)遭遇災(zāi)難性的打擊。
3.確保數(shù)據(jù)量是足夠的
如果沒(méi)有足夠的數(shù)據(jù),就不可能訓(xùn)練出一個(gè)泛化能力強(qiáng)的模型。從復(fù)雜且摻有噪聲的數(shù)據(jù)中抽絲剝繭總結(jié)規(guī)律可不是一件容易事兒,這項(xiàng)任務(wù)極具挑戰(zhàn),這種關(guān)系在建立模型之前可能隱藏的極深。這種關(guān)聯(lián)的深淺完全取決于數(shù)據(jù)集中的有效信息和噪聲的比例,也就是所謂的信噪比。
如果信噪比較高,也就是有效信息的比例較高的話,模型只需要較少的數(shù)據(jù)就能學(xué)到這種關(guān)聯(lián)性;但如果數(shù)據(jù)集的信噪比很低,噪聲太大,就需要用特別多的數(shù)據(jù)才能教會(huì)模型。但實(shí)際情況是,數(shù)據(jù)獲取的成本太昂貴了,我們通常無(wú)法得到更多的數(shù)據(jù),這個(gè)問(wèn)題普遍存在于機(jī)器學(xué)習(xí)的各個(gè)領(lǐng)域。此時(shí)便可以使用交叉驗(yàn)證來(lái)更高效地利用有限的數(shù)據(jù)。
當(dāng)然,我們還可以使用數(shù)據(jù)增強(qiáng)技術(shù)(可見(jiàn)[Wong et al., 2016, Shorten and Khoshgoftaar, 2019])來(lái)增加數(shù)據(jù)量,這種技術(shù)對(duì)于提升小數(shù)據(jù)集上的機(jī)器學(xué)習(xí)性能是相當(dāng)有效的,尤其是在數(shù)據(jù)集類別不平衡時(shí),也就是某些子類的數(shù)據(jù)量有限的情況下。類別不平衡通常是指某些類別的樣本量會(huì)比其他類別少,相關(guān)研究可見(jiàn)Haixiang等人[2017]的處理方法。
如果數(shù)據(jù)量也十分有限,還要控制好機(jī)器學(xué)習(xí)模型的復(fù)雜度,別引入太多的參數(shù)。比如像深度學(xué)習(xí)網(wǎng)絡(luò),很多大模型的參數(shù)量可能會(huì)輕輕松松超過(guò)小數(shù)據(jù)集中的樣本量??傊?,無(wú)論是通過(guò)哪種解決方法,最重要的是盡早發(fā)現(xiàn)數(shù)據(jù)量的問(wèn)題,并提出一個(gè)合適的方案緩解它。
4.和領(lǐng)域?qū)<液煤昧牧?/strong>
領(lǐng)域?qū)<业慕?jīng)驗(yàn)都是十分寶貴,他們可以幫我們了解這個(gè)領(lǐng)域中需要解決的問(wèn)題,幫助我們選擇合適的特征集以及機(jī)器學(xué)習(xí)模型,幫助我們把模型介紹給最需要和最適合的人等等。
如果在建立模型的時(shí),沒(méi)有征求過(guò)領(lǐng)域?qū)<业囊庖?jiàn),很可能會(huì)導(dǎo)致項(xiàng)目無(wú)法聚焦到痛點(diǎn)問(wèn)題上,或者不能以最合適最精煉的姿勢(shì)解決問(wèn)題。一個(gè)常見(jiàn)的例子就是,在智慧健康領(lǐng)域或者智能財(cái)務(wù)系統(tǒng)領(lǐng)域,我們需要用黑盒算法來(lái)幫助醫(yī)生進(jìn)行診斷或者財(cái)務(wù)決策,由于領(lǐng)域的特殊性,我們必須要了解這些算法是如何得出結(jié)論的,因?yàn)檫@關(guān)系到人命和金錢。
在這兩個(gè)場(chǎng)景中,領(lǐng)域?qū)<揖褪鞘种匾?。他們?huì)幫我們?cè)陧?xiàng)目開(kāi)始之初就理解數(shù)據(jù),指出可能具有相關(guān)性和預(yù)測(cè)性的特征。在項(xiàng)目結(jié)束時(shí),還能幫我們?cè)谙嚓P(guān)的領(lǐng)域期刊上發(fā)表論文,讓我們有機(jī)會(huì)接觸到研究中的最可能的用戶們。
5.認(rèn)真看看領(lǐng)域的發(fā)展現(xiàn)狀
我們很難發(fā)現(xiàn)一些新研究課題或方向,更多的時(shí)候都是在前人挖的坑中灌水(跟隨研究)。所以得花時(shí)間了解一下前人做過(guò)的研究,學(xué)習(xí)他們的研究計(jì)劃和思路,以及使用的方法論是非常必要的。
學(xué)術(shù)就是一個(gè)圈,和別人在一個(gè)坑里灌水再正常不過(guò),這不是一件壞事兒,因?yàn)閷W(xué)術(shù)的進(jìn)步通常是一個(gè)個(gè)迭代的過(guò)程,每一個(gè)研究的進(jìn)步都能為后人帶來(lái)很多啟發(fā)和指導(dǎo)。當(dāng)然,有時(shí)候我們想到一個(gè)新的idea,欣喜若狂,開(kāi)始要大干一場(chǎng)的時(shí)候,突然發(fā)現(xiàn)已經(jīng)有人做過(guò)了類似的研究,不免沮喪失望,但是也有可能他們的研究沒(méi)有盡善盡美,還留下一些其他方向的漏洞。此時(shí),這些已經(jīng)有的研究就能成為我們研究的理由和動(dòng)機(jī)。
而如果我們忽略前人的研究,有可能會(huì)過(guò)錯(cuò)很多有價(jià)值的信息。比如,有人可能已經(jīng)嘗試過(guò)你的想法,并且驗(yàn)證了這個(gè)idea不靠譜,還給出了特別詳實(shí)的論述和討論,那其實(shí)這篇論文是為你節(jié)省了好幾年的時(shí)間,不用在此浪費(fèi)時(shí)間和精力。又或者有些工作已經(jīng)將你的想法的一部分或者全部做過(guò)了,也別灰心,你完全可以在他們的基礎(chǔ)上繼續(xù)努力。
因此,在開(kāi)始工作之前,一定要去做一個(gè)文獻(xiàn)的調(diào)研和匯總,最好能輸出一篇綜述并形成觀點(diǎn)。如果做綜述太晚,可能意味著在寫(xiě)論文時(shí),要爭(zhēng)先恐后、不厭其煩地解釋為什么要用跟前人一樣的方法來(lái)搭建現(xiàn)在這套系統(tǒng),分明人家已經(jīng)做過(guò)了,還要自己重新做的原因是什么。
6.想想你的模型要怎么實(shí)際跑起來(lái)
我們?yōu)槭裁匆⒁粋€(gè)機(jī)器學(xué)習(xí)模型?這是一個(gè)靈魂追問(wèn),它的答案會(huì)直接影響到模型開(kāi)發(fā)的過(guò)程。許多學(xué)術(shù)工作僅僅是做研究,而不是真的要將它用于工業(yè)界實(shí)際部署運(yùn)行。這無(wú)可厚非,因?yàn)榻⒑头治瞿P偷倪^(guò)程本身就可以對(duì)問(wèn)題提供非常有用的洞察力。
然而,對(duì)于很多學(xué)術(shù)研究來(lái)說(shuō),他們的最終目標(biāo)是產(chǎn)生一個(gè)可以在現(xiàn)實(shí)世界中部署和運(yùn)行的機(jī)器學(xué)習(xí)模型。如果是這種情況,我們就需要盡早去考慮部署的問(wèn)題。例如,如果我們想要將模型部署在一個(gè)計(jì)算和存儲(chǔ)資源都十分有限的環(huán)境中(傳感器節(jié)點(diǎn)或者機(jī)器人硬件),受制于運(yùn)行的平臺(tái)資源,模型的復(fù)雜度可能不能太大。又比如,當(dāng)我們的應(yīng)用場(chǎng)景對(duì)運(yùn)行時(shí)間有著嚴(yán)格的限制,需要在幾毫秒內(nèi)完成數(shù)據(jù)計(jì)算的話,選擇模型和驗(yàn)證的過(guò)程時(shí)要重點(diǎn)考慮這一點(diǎn)。
另一個(gè)考慮因素是,如何將模型和所部署的底層軟件系統(tǒng)有機(jī)而高效地組織起來(lái)。這個(gè)過(guò)程通常沒(méi)有想象中的那么簡(jiǎn)單(見(jiàn)[Sculley等人,2015])。但一些新型的方法已經(jīng)在嘗試解決這些困難,比如ML Ops[Tamburri, 2020]。
二、如何可靠地建立模型
寫(xiě)代碼構(gòu)建機(jī)器學(xué)習(xí)模型是機(jī)器學(xué)習(xí)開(kāi)發(fā)過(guò)程中最讓人開(kāi)心的一部分。當(dāng)我們安裝完簡(jiǎn)單易用的文檔和功能齊全的機(jī)器學(xué)習(xí)包(或者叫框架)后,會(huì)很容易搭建出一個(gè)模型,然后輕輕松松的將數(shù)據(jù)喂進(jìn)去,看看出來(lái)的是個(gè)什么妖魔鬼怪。有時(shí)候訓(xùn)練出來(lái)的效果不好,從而導(dǎo)致模型一片糟糕。這種問(wèn)題通常還很難定位和反推,找不到問(wèn)題出現(xiàn)在哪個(gè)環(huán)節(jié)。
因此,我們需要用一種有組織、有規(guī)律、可溯源的方式來(lái)建立模型,這既能幫我們確定如何正確使用原始數(shù)據(jù),也能幫我們理清模型構(gòu)建時(shí)候的各種選擇。
1.千萬(wàn)別讓測(cè)試集數(shù)據(jù)泄漏訓(xùn)練過(guò)程中去
在機(jī)器學(xué)習(xí)開(kāi)發(fā)的生命周期中,衡量模型性能是一項(xiàng)十分重要的任務(wù)。對(duì)模型而言,客觀準(zhǔn)確的評(píng)估模型的泛化程度事關(guān)重大。但是在實(shí)際的研究和開(kāi)發(fā)中,一個(gè)常見(jiàn)的問(wèn)題是測(cè)試集會(huì)泄漏到模型的配置、訓(xùn)練或者選擇過(guò)程中。當(dāng)這種情況發(fā)生的時(shí)候,測(cè)試數(shù)據(jù)集就不能用于客觀地衡量模型的能力。這也是很多工作中的模型看似強(qiáng)悍,但一旦用在真實(shí)世界中就趴窩的常見(jiàn)原因。有很多方法會(huì)導(dǎo)致測(cè)試集數(shù)據(jù)泄漏,其中有一些披著一張人畜無(wú)害的面具,極具迷惑性。
例如,在數(shù)據(jù)準(zhǔn)備期間,使用整個(gè)數(shù)據(jù)集的均均值和方差對(duì)原始數(shù)據(jù)進(jìn)行縮放或者歸一化。但實(shí)際上我們應(yīng)該只能用訓(xùn)練集的均值和方差對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,測(cè)試集中的數(shù)據(jù)是不能參與均值方差的計(jì)算的。其他常見(jiàn)的信息泄漏情況是在劃分?jǐn)?shù)據(jù)之前就進(jìn)行了特征選擇,以及使用相同的測(cè)試數(shù)據(jù)集來(lái)評(píng)估多個(gè)模型的通用型。
為了避免發(fā)生這些問(wèn)題,我們應(yīng)該在項(xiàng)目伊始就劃分出一個(gè)獨(dú)立的數(shù)據(jù)子集,并在項(xiàng)目結(jié)束的時(shí)候只用這個(gè)獨(dú)立的數(shù)據(jù)子集來(lái)評(píng)估一個(gè)單一模型的通用型。更詳細(xì)的討論可以參考[Cawley and Talbot, 2010]和[Kaufman et al., 2012]的論述。
2. 嘗試用一系列不同的模型
一般來(lái)說(shuō),沒(méi)有任何的模型是“萬(wàn)金油”,也就是沒(méi)有哪個(gè)模型能同時(shí)在速度、模型大小、精度、精確率、召回率等方面都做到最好。一定還有個(gè)模型能在某一方面或某幾個(gè)方面超過(guò)它。這一點(diǎn)在“沒(méi)有免費(fèi)的午餐”定律中能夠得到很好的體現(xiàn)。這個(gè)定理表明,在考慮所有可能的指標(biāo)和優(yōu)缺點(diǎn)時(shí),沒(méi)有任何一種機(jī)器學(xué)習(xí)方法能夠全面優(yōu)于其他方法[Wolpert, 2002]。
因此,我們?cè)谠O(shè)計(jì)和訓(xùn)練機(jī)器學(xué)習(xí)模型的時(shí)候,主要目標(biāo)是去找到那個(gè)對(duì)當(dāng)前特定問(wèn)題最有效最可用的機(jī)器學(xué)習(xí)模型。這個(gè)過(guò)程中可能會(huì)有一些先驗(yàn)的知識(shí)能夠提供指導(dǎo),但是大多數(shù)情況下都只能在黑暗中摸索。幸運(yùn)的是,我們現(xiàn)在已經(jīng)有了很多高級(jí)語(yǔ)言的工具包。
比如Python(Scikit-learn[Varoquaux等人,2015])、R語(yǔ)言(如caret[Kuhn,2015])、Julia(如MLJ[Blaom等人,2020])等,它們能夠很輕松的對(duì)模型進(jìn)行參數(shù)的搜索、超參的調(diào)整和比較,從而低成本地生成多個(gè)模型。
所以何樂(lè)而不為呢?多嘗試一些模型,找出哪個(gè)最有效。在“沒(méi)有免費(fèi)的午餐”定律中,重要的是如何避免“NIH綜合癥(not invented here syndrome)”,它是指人們不愿意使用、購(gòu)買或者接受某種產(chǎn)品、研究成果或者知識(shí),不是出于技術(shù)或者法律等因素,而只是因?yàn)樗醋云渌胤?,可以理解成一種傲慢和偏見(jiàn)。放在自己的系統(tǒng)中,就是避免由于自大和狂妄,導(dǎo)致忽略那些不是自己所提的改進(jìn)點(diǎn)上帶來(lái)的改進(jìn)。這可能會(huì)導(dǎo)致我們忽略對(duì)某個(gè)特定問(wèn)題的最佳模型。
3.別用不合適的模型
由于獲取一些機(jī)器學(xué)習(xí)工具過(guò)于方便了,我們?cè)谧鲆恍?shí)驗(yàn)或者構(gòu)建模型的成本特別的低,而忽略了模型背后的計(jì)算機(jī)制和應(yīng)用背景是否合適。因此,我們很可能會(huì)將一些不合適的模型應(yīng)用到數(shù)據(jù)集上。比如將本具有類別性質(zhì)的標(biāo)簽(比如1代表男,2代表女)當(dāng)作具有數(shù)值含義的標(biāo)簽(比如1代表1米,2代表2米)給到模型中,或者錯(cuò)將時(shí)間序列數(shù)據(jù)輸入到不同時(shí)刻輸入上沒(méi)有依賴關(guān)系的模型當(dāng)中。這一點(diǎn)在寫(xiě)論文的時(shí)候應(yīng)該尤其注意,因?yàn)檫x擇了不恰當(dāng)?shù)哪P蜁?huì)讓評(píng)委感覺(jué)很不專業(yè),在理論上也很難講通。
此外,我們應(yīng)該避免使用一些不必要的復(fù)雜模型。如果數(shù)據(jù)有限,同時(shí)業(yè)務(wù)也沒(méi)有特別的麻煩,其相關(guān)關(guān)系也很好理解和表達(dá),可以選擇不使用深度學(xué)習(xí)。最后,別用“這個(gè)模型結(jié)構(gòu)是新的”作為選擇的理由,因?yàn)槔系?、成熟的模型歷久彌堅(jiān),它們經(jīng)歷了風(fēng)雨洗禮,其魯棒性和可用性通常要比新模型更靠譜。
4. 一定要優(yōu)化模型的超參數(shù)
超參數(shù)指影響的是模型配置的預(yù)設(shè)參數(shù)。許多模型都有超參數(shù),比如支持向量機(jī)中的核函數(shù)、隨機(jī)森林中的樹(shù),以及神經(jīng)網(wǎng)絡(luò)的架構(gòu)。大部分超參數(shù)都會(huì)顯著影響模型性能,并且沒(méi)有“一刀切”的解決方法。也就是說(shuō),它們需要適合的特定數(shù)據(jù)集,以最大限度地利用模型。
隨機(jī)搜索和網(wǎng)格搜索是目前常用的超參數(shù)優(yōu)化策略,這兩種策略雖然編寫(xiě)簡(jiǎn)單,但很難擴(kuò)展到大量超參數(shù)或訓(xùn)練成本很高的模型中。因此,我們還需要探索更智能的搜索最佳配置的工具,相關(guān)研究可參考[Yang and Shami,2020]。此外,除了數(shù)據(jù)挖掘管道的其他部分外,我們還可以使用AutoML技術(shù)優(yōu)化模型及其超參數(shù)的選擇,相關(guān)綜述可參見(jiàn)[He,2021]等人的工作。
5. 優(yōu)化超參數(shù)和特征選擇時(shí)要小心
2018年Cai等人的調(diào)查已經(jīng)發(fā)現(xiàn),特征選擇是模型訓(xùn)練的一個(gè)常見(jiàn)階段。一般而言,執(zhí)行超參數(shù)優(yōu)化和特征選擇的關(guān)鍵,在于要將其視為模型訓(xùn)練的一部分,而不是在模型訓(xùn)練之前對(duì)其進(jìn)行操作。但事實(shí)上,我們經(jīng)常就是在模型訓(xùn)練開(kāi)始之前對(duì)整個(gè)數(shù)據(jù)集進(jìn)行特征選擇,而這將會(huì)導(dǎo)致測(cè)試集的信息提前泄漏給訓(xùn)練過(guò)程。
理想情況下,如果要優(yōu)化模型使用的超參數(shù)或特征,應(yīng)使用與訓(xùn)練模型完全相同的數(shù)據(jù)。實(shí)現(xiàn)這一點(diǎn)的常用技術(shù)是嵌套交叉驗(yàn)證(也稱為雙交叉驗(yàn)證),它涉及到在主交叉驗(yàn)證循環(huán)內(nèi)作為額外循環(huán)進(jìn)行超參數(shù)優(yōu)化和特征選擇。相關(guān)研究可參見(jiàn)[Cawley and Talbot,2010]。
三、如何合理地評(píng)估模型
為了推動(dòng)研究領(lǐng)域的進(jìn)步,或者推導(dǎo)出可靠的結(jié)論,很多研究員可能會(huì)對(duì)ML模型做出不公平的評(píng)估,這樣做無(wú)疑會(huì)使學(xué)術(shù)進(jìn)步變得“渾濁”。因此,我們應(yīng)該仔細(xì)考慮如何在實(shí)驗(yàn)中使用數(shù)據(jù),如何測(cè)量模型的真實(shí)性能,以及如何以有意義且信息豐富的方式報(bào)告模型的真實(shí)性能。
1. 務(wù)必使用適當(dāng)?shù)臏y(cè)試集
我們通常使用測(cè)試集來(lái)測(cè)量ML模型的泛化性。因?yàn)榧幢阋粋€(gè)復(fù)雜的模型能夠完全學(xué)習(xí)訓(xùn)練數(shù)據(jù),也不一定能捕獲任何可泛化的知識(shí)。因此,測(cè)試模型在訓(xùn)練集上的表現(xiàn)如何幾乎毫無(wú)意義。確保測(cè)試數(shù)據(jù)集的合理性非常重要,這要求它應(yīng)該覆蓋更廣泛的目標(biāo)人群,且不能與訓(xùn)練數(shù)據(jù)集重合。
舉個(gè)例子,如果訓(xùn)練集和測(cè)試集中同時(shí)有一張?zhí)鞖馇缋实膱D片,這種相同天氣條件的數(shù)據(jù),意味著測(cè)試集不是獨(dú)立的,并且因沒(méi)有捕獲更廣泛的天氣條件,而不具有代表性。當(dāng)我們使用單個(gè)設(shè)備收集訓(xùn)練和測(cè)試數(shù)據(jù)時(shí),經(jīng)常會(huì)出現(xiàn)類似的情況。即使模型過(guò)度學(xué)習(xí)了一個(gè)設(shè)備的特性,很可能也不會(huì)泛化到其他設(shè)備上,并且在測(cè)試集上進(jìn)行評(píng)估時(shí)也無(wú)法檢測(cè)到。
2. 務(wù)必使用驗(yàn)證集
連續(xù)訓(xùn)練多個(gè)模型并不罕見(jiàn),研究人員經(jīng)常使用獲得的模型性能知識(shí)來(lái)指導(dǎo)下一個(gè)模型的配置。在執(zhí)行這項(xiàng)操作時(shí),注意一定不要使用測(cè)試數(shù)據(jù)集,而要使用單獨(dú)的驗(yàn)證數(shù)據(jù)集。驗(yàn)證集包含的樣本,并不直接用于訓(xùn)練,而是用于指導(dǎo)訓(xùn)練。如果采用測(cè)試集來(lái)衡量模型性能,它將成為訓(xùn)練過(guò)程的一個(gè)隱式部分,并且不能作為模型通用性的獨(dú)立度量——模型將逐漸過(guò)度擬合測(cè)試集(見(jiàn)[Cawley and Talbot,2010])。
此外,創(chuàng)建一個(gè)獨(dú)立驗(yàn)證集的好處是可以隨時(shí)停止訓(xùn)練。在訓(xùn)練單個(gè)模型的時(shí),使用驗(yàn)證集測(cè)量模型的每次迭代過(guò)程,如果驗(yàn)證分?jǐn)?shù)開(kāi)始下降,表明模型開(kāi)始過(guò)度擬合訓(xùn)練數(shù)據(jù),我們可以及時(shí)停止訓(xùn)練。
3. 反復(fù)評(píng)估模型
許多ML模型是不穩(wěn)定的。如果對(duì)模型進(jìn)行多次訓(xùn)練,或者對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行微小更改,很可能導(dǎo)致模型性能的顯著變化。因此,對(duì)模型的單一評(píng)估是不可靠的,可能會(huì)低估或高估模型的真實(shí)性能。常見(jiàn)的解決思路是,使用不同訓(xùn)練數(shù)據(jù)集的子集對(duì)模型進(jìn)行多次訓(xùn)練。
交叉驗(yàn)證法(CV)使用最為廣泛,并且推出了很多變種(見(jiàn)[Arlot等人,2010])。標(biāo)準(zhǔn)CV訓(xùn)練要重復(fù)十次以上,如果在此基礎(chǔ)上,將整個(gè)CV過(guò)程按不同的類別進(jìn)行數(shù)據(jù)劃分進(jìn)行可以顯著增加訓(xùn)練的嚴(yán)謹(jǐn)性,尤其是在數(shù)據(jù)類別很少的情況下,它可以確保每個(gè)類在每次折疊中都有充分的表示。
另外,除了評(píng)估的多個(gè)平均值和標(biāo)準(zhǔn)偏差外,也建議保留單個(gè)分?jǐn)?shù)的記錄,以便之后使用統(tǒng)計(jì)測(cè)試來(lái)比較模型。
4.保留一些數(shù)據(jù),用于評(píng)估模型的實(shí)例
評(píng)估一般模型的性能(如神經(jīng)網(wǎng)絡(luò)解決問(wèn)題的能力)和特定模型實(shí)例的性能(如通過(guò)一次反向傳播產(chǎn)生的特定神經(jīng)網(wǎng)絡(luò))之間有一個(gè)重要的區(qū)別。常用的交叉驗(yàn)證的方法,通常更適用于前者,而不適用于后者。比如,十次交叉驗(yàn)證會(huì)產(chǎn)生10個(gè)模型實(shí)例,假設(shè)選擇測(cè)試折疊分?jǐn)?shù)最高的實(shí)例作為實(shí)踐中使用的模型。在這種情況下,要如何報(bào)告模型的性能?
有人可能認(rèn)為測(cè)試分?jǐn)?shù)是衡量模型性能的可靠指標(biāo),但事實(shí)上并非如此。首先,單次折疊中的數(shù)據(jù)量相對(duì)較小。其次,得分最高的實(shí)例很可能是測(cè)試次數(shù)最簡(jiǎn)單的實(shí)例,也就是說(shuō),它包含的評(píng)估數(shù)據(jù)并不具有代表性。因此,估計(jì)模型實(shí)例的通用性的可靠且唯一的方法是使用另一個(gè)測(cè)試集。因此,最好單獨(dú)創(chuàng)建一個(gè)數(shù)據(jù)集,專門為最終選定的模型實(shí)例進(jìn)行無(wú)偏估計(jì)。
5.不平衡的數(shù)據(jù)集不要使用“準(zhǔn)確率”
研究人員應(yīng)該注意使用哪些度量來(lái)評(píng)估ML模型。對(duì)于分類模型,最常用的度量是準(zhǔn)確率(accuracy),即模型正確分類的數(shù)據(jù)集中樣本的比例。如果分類是平衡的,即每個(gè)類在數(shù)據(jù)集中有相似數(shù)量的樣本,那么這種方法是可行的。但如果數(shù)據(jù)集是不平衡的,那么準(zhǔn)確率可能會(huì)成為一個(gè)誤導(dǎo)指標(biāo)。
例如一個(gè)數(shù)據(jù)集中,90%的樣本代表同一個(gè)類,10%代表另一個(gè)類。一個(gè)總是輸出第一個(gè)類的二元分類器,無(wú)論輸入的是什么,它的準(zhǔn)確率都將達(dá)到90%,這樣的數(shù)據(jù)是沒(méi)有意義的。在這種情況下,最好使用Cohen的kappa系數(shù)(κ)或Matthews相關(guān)系數(shù)(MCC)等指標(biāo),這兩種指標(biāo)對(duì)樣本規(guī)模的不平衡相對(duì)不敏感。關(guān)于更多處理不平衡數(shù)據(jù)的方法請(qǐng)參見(jiàn)Haixiang等人[2017]。
四、公平比較模型
比較模型是學(xué)術(shù)研究的基礎(chǔ)。如果進(jìn)行了不公平的比較,那么其他研究人員可能隨后就會(huì)被誤導(dǎo)。因此,一定要確保在相同的環(huán)境中評(píng)估不同的模型,探索多個(gè)角度,并正確使用統(tǒng)計(jì)檢驗(yàn)。
1.數(shù)字越大,效果越好?
在某些學(xué)術(shù)論文中,通常會(huì)這樣寫(xiě):以前的研究準(zhǔn)確率是94%,我們論文中的模型準(zhǔn)確率達(dá)到了95%,因此我們是SOTA。但是,有很多證據(jù)都能證明,“堆數(shù)字”的模型并不是好模型。例如,如果模型的訓(xùn)練集和測(cè)試集來(lái)自同一數(shù)據(jù)的不同部分,那么模型的“數(shù)字表現(xiàn)好”的原因不言而喻。
另一個(gè)不妥之處在于:論文在比較模型的時(shí)候,對(duì)所比較的模型,往往沒(méi)有設(shè)置相同的超參數(shù)優(yōu)化。例如,一個(gè)使用默認(rèn)設(shè)置,一個(gè)使用優(yōu)化參數(shù)。
因此,為了公平起見(jiàn),作為研究者的你,至少應(yīng)該將“對(duì)比模型”的參數(shù)進(jìn)行相同的優(yōu)化,然后進(jìn)行多次評(píng)估,從而確定模型之間性能差異是否顯著。
2. 比較模型的時(shí)候,如何使用統(tǒng)計(jì)檢驗(yàn)
一般而言,統(tǒng)計(jì)測(cè)試(statistical test)是比較模型差異的絕好工具。有兩類,一類用于比較簡(jiǎn)單的機(jī)器學(xué)習(xí)模型,例如配對(duì)卡方檢驗(yàn)(McNemar’s test)可以比較兩個(gè)分類器;另一類適用于大多數(shù)情況,例如評(píng)估某種數(shù)據(jù)類型是用神經(jīng)網(wǎng)絡(luò)還是決策樹(shù)進(jìn)行處理的時(shí)候,交叉驗(yàn)證、重復(fù)采樣等等是比較適合的方法。
另外,比較模型產(chǎn)生的結(jié)果符合何種概率分布,T分布檢驗(yàn)是常用的方式,實(shí)際上Mann-Whitney's U檢驗(yàn)更加適用,因?yàn)樗潘闪藬?shù)據(jù)分布的假設(shè)。
更多方法參見(jiàn):
[Raschka, 2020]
https://arxiv.org/abs/1811.12808
[Carrasco et al., 2020].
https://linkinghub.elsevier.com/retrieve/pii/S2210650219302639
3. 如何看待多重比較?
當(dāng)采用統(tǒng)計(jì)方法比較兩個(gè)以上的模型時(shí)候,事情有點(diǎn)復(fù)雜。因?yàn)椋捎枚啻闻浔葯z驗(yàn)(multiple pairwise tests)會(huì)產(chǎn)生和多次使用測(cè)試集類似的缺點(diǎn):導(dǎo)致對(duì)顯著性過(guò)度樂(lè)觀。因?yàn)?,在?duì)兩個(gè)模型進(jìn)行統(tǒng)計(jì)檢驗(yàn)的時(shí)候,置信度通常設(shè)定為95%,這意味著每20次檢驗(yàn),會(huì)有一次出現(xiàn)“迷惑”結(jié)果。
如果是單一的比較,這種不確定性或許可以接受。但如果是多個(gè)模型,多次比較,那么統(tǒng)計(jì)檢驗(yàn)的不確定性會(huì)累積。
上述現(xiàn)象也被稱為:多重效應(yīng)(multiplicity effect)會(huì)導(dǎo)致導(dǎo)致所謂的‘p-hacking’(通常增加樣本容量)和‘data dredging’做法,強(qiáng)調(diào)搜索小的p值而不是統(tǒng)計(jì)科學(xué)推理。
為了解決這個(gè)問(wèn)題,可以采用多重檢驗(yàn)的校正。最常見(jiàn)的方法是Bonferroni校正,可以根據(jù)正在進(jìn)行的測(cè)試的數(shù)量來(lái)降低顯著性閾值。
此外,還有更多的校正方法,見(jiàn):
[Streiner,2015]
https://doi.org/10.3945/ajcn.115.113548.
4. 謹(jǐn)慎對(duì)待基準(zhǔn)測(cè)試
在某些領(lǐng)域,用基準(zhǔn)數(shù)據(jù)集評(píng)價(jià)機(jī)器學(xué)習(xí)模型是非常普遍的做法。其背后的思考是:如果每個(gè)人都用相同的數(shù)據(jù)進(jìn)行訓(xùn)練和測(cè)試模型,那么模型性能的比較就會(huì)更加透明。
但是,如果測(cè)試集的獲取不受限制,那么就會(huì)有人把它作為訓(xùn)練集,從而導(dǎo)致高估模型。如果限制每個(gè)人只能使用一次測(cè)試集,但總體算下來(lái)機(jī)器學(xué)習(xí)社區(qū)使用了多次測(cè)試集,這樣某些問(wèn)題仍然沒(méi)辦法避免。
實(shí)際上,在同一測(cè)試集上評(píng)估多個(gè)模型,表現(xiàn)最好的模型可能剛好是過(guò)擬合的,因此無(wú)法得出SOTA的結(jié)論。
在做研究的時(shí)候,應(yīng)該小心解讀基準(zhǔn)數(shù)據(jù)集上的測(cè)試結(jié)果,不要認(rèn)為性能的小幅度提高是顯著的。
統(tǒng)計(jì)檢驗(yàn)更多討論參見(jiàn):
[Paullada et al., 2020]
https://www.sciencedirect.com/science/article/abs/pii/S2210650219302639?via%3Dihub
5.請(qǐng)考慮組合模型
機(jī)器學(xué)習(xí)有時(shí)候并不是選擇題,更多的是組合題。不同的模型相互結(jié)合往往能產(chǎn)生巨大的性能提升。通過(guò)組合,可以用一個(gè)模型彌補(bǔ)另一個(gè)模型的弱點(diǎn)。這種組合在學(xué)術(shù)上有個(gè)名詞叫做:集成學(xué)習(xí)(ensemble learning)。
集成學(xué)習(xí)(ensemble learning)既可以從現(xiàn)有的訓(xùn)練過(guò)的模型中形成,也可以將基礎(chǔ)模型作為一部分進(jìn)行訓(xùn)練,其目的是為了創(chuàng)建一個(gè)多樣化的模型選擇。
集成學(xué)習(xí)在考慮如何結(jié)合不同的基礎(chǔ)模型時(shí),可以采用簡(jiǎn)單方法,如投票;也可以采用復(fù)雜方法,用機(jī)器學(xué)習(xí)模型聚合集成模型的輸出。這種復(fù)雜方法通常被稱為堆疊(stacking)。
集合學(xué)習(xí)的方法參見(jiàn):
[Dong et al., 2020]
https://doi.org/10.1007/s11704-019-8208-z
五、如何描述工作結(jié)論
學(xué)術(shù)研究的目的不是自我炫耀,而是為知識(shí)做邊際貢獻(xiàn)。因此需要對(duì)工作做完整的描述,包括哪些工作有效,哪些工作無(wú)效。機(jī)器學(xué)習(xí)通常是關(guān)于權(quán)衡,在某些方面優(yōu)秀,往往意味著其他方面不達(dá)標(biāo),十全十美的模型十分罕見(jiàn)。
1.透明、透明、還是透明!
首先,工作要盡可能的透明,給別人“站在你肩膀上”的機(jī)會(huì)。用通俗易懂的方式分享模型是非常好的方式,例如你能用一個(gè)腳本實(shí)現(xiàn)論文中所有實(shí)驗(yàn),那么在發(fā)表論文時(shí)候,請(qǐng)分享這個(gè)腳本,這可以讓其他人輕松復(fù)現(xiàn),同時(shí)也能增加你的信心。
這也會(huì)促使你更加小心的做研究,寫(xiě)出更加干凈的代碼,仔細(xì)的記錄實(shí)驗(yàn)。值得一提的是,可重復(fù)性在機(jī)器學(xué)習(xí)社區(qū)被提到的次數(shù)越來(lái)越多,所以不透明的工作可能在未來(lái)無(wú)法發(fā)表。
如何提高機(jī)器學(xué)習(xí)研究的可重復(fù)性:
[Pineau et al., 2020]
https://arxiv.org/abs/2003.12206
2. 用多種方式體現(xiàn)結(jié)論
在評(píng)估和比較模型的時(shí)候,使用多個(gè)數(shù)據(jù)集進(jìn)行測(cè)試是一種嚴(yán)謹(jǐn)?shù)姆椒?。這有助于克服單個(gè)數(shù)據(jù)集的缺陷,并有助于模型的完整性描述。
另外,采用多個(gè)指標(biāo)報(bào)告模型在數(shù)據(jù)集上表現(xiàn),也能從不同的角度說(shuō)明模型的性能。例如,如果決定用準(zhǔn)確率衡量模型,那么如果加上對(duì)“類別失衡不太敏感”的指標(biāo)則是極好的。如果使用部分指標(biāo),如精度、召回率、敏感度或特異度,也要包括一個(gè)能更全面地反映模型錯(cuò)誤率的指標(biāo)。
此外,清晰、明確的指標(biāo)也對(duì)解釋模型有好處,例如如果報(bào)告AUC,請(qǐng)指明這是ROC曲線還是PR曲線下的區(qū)域。
指標(biāo)討論請(qǐng)見(jiàn)[Blagec et al., 2020]
https://arxiv.org/abs/2008.02577
3. 數(shù)據(jù)支撐論據(jù)
為了避免其他研究員誤入歧途,所以請(qǐng)不要提出無(wú)效的結(jié)論。一個(gè)常見(jiàn)的錯(cuò)誤是:論文陳述背后沒(méi)有訓(xùn)練和測(cè)試數(shù)據(jù)支撐。一個(gè)模型在某個(gè)數(shù)據(jù)集上表現(xiàn)優(yōu)秀,并不意味著在其他數(shù)據(jù)集上也表現(xiàn)良好。
所以,能從實(shí)驗(yàn)研究中推斷出的東西總是有限的。一個(gè)重要原因是抽樣偏差,即數(shù)據(jù)對(duì)真實(shí)世界并沒(méi)有足夠的代表性。另外,數(shù)據(jù)與數(shù)據(jù)之間可能存在重疊,非獨(dú)立性的數(shù)據(jù)也有可能讓模型產(chǎn)生偏差。
因此,不要過(guò)分渲染你的發(fā)現(xiàn),并意識(shí)到其局限性。
機(jī)器學(xué)習(xí)社區(qū)數(shù)據(jù)集調(diào)查:
[Paullada et al., 2020]
https://arxiv.org/abs/2012.05345
4.謹(jǐn)慎使用統(tǒng)計(jì)檢驗(yàn)
統(tǒng)計(jì)檢驗(yàn)并不完美,保守的方法傾向于低估;自由(liberal)的方法傾向于高估。所以一個(gè)現(xiàn)實(shí)積極結(jié)果的測(cè)試并不總代表有意義,消極的測(cè)試結(jié)果也并不代表無(wú)意義。
除了統(tǒng)計(jì)學(xué)意義之外,另一個(gè)需要考慮的問(wèn)題是兩個(gè)模型之間的差異是否真正重要。如果你有足夠的樣本,即使實(shí)際的性能差異微不足道,也可以找到顯著的差異。所以,為了更好地說(shuō)明某件事情是否重要,可以測(cè)量效應(yīng)大小。常見(jiàn)的方法例如Cohen's d統(tǒng)計(jì)、Kolmogorov-Smirnov等等。
p值的討論參見(jiàn)[Betensky, 2019]:
https://www.tandfonline.com/doi/full/10.1080/00031305.2018.1529624
5.洞察模型
訓(xùn)練過(guò)的模型包含很多有用的信息。但許多研究者只說(shuō)模型的性能指標(biāo),并沒(méi)有對(duì)模型實(shí)際學(xué)到的東西給出見(jiàn)解。請(qǐng)記住,研究的目的不是為了獲得比別人高一點(diǎn)的準(zhǔn)確率,而是為了產(chǎn)生知識(shí)和理解。如果你能做到這一點(diǎn),你就能在更好的刊物上發(fā)表論文。
因此,請(qǐng)仔細(xì)觀察模型,并嘗試了解模型的輸出。對(duì)于相對(duì)簡(jiǎn)單的模型,如決策樹(shù),提供模型的可視化也是有益的,并且大多數(shù)庫(kù)都支持這一功能。對(duì)于復(fù)雜的模型,如深度神經(jīng)網(wǎng)絡(luò),考慮使用可解釋的人工智能(XAI)技術(shù)來(lái)提取知識(shí),雖然不太可能弄清楚模型到底在做什么,但總有些有用的見(jiàn)解。
數(shù)據(jù)驅(qū)動(dòng)、知識(shí)感知的可解釋人工智能研究綜述見(jiàn)[Li et al. [2020]]
https://ieeexplore.ieee.org/document/9050829
總結(jié):開(kāi)放心態(tài)
這份文檔并沒(méi)有囊括所有方面,有些建議還有未確定的結(jié)論。但文章中列舉的一些錯(cuò)誤事例,至少我們可以探討,這也是研究的本質(zhì)。
機(jī)器學(xué)習(xí)的理論總是滯后于實(shí)踐,我們今天認(rèn)為正確的事情,在明天看來(lái)或許是錯(cuò)誤的。所以,請(qǐng)你以開(kāi)放的心態(tài)對(duì)待機(jī)器學(xué)習(xí):善于Fellow最新發(fā)展,謙虛接受你不懂的知識(shí)。