电竞比分网-中国电竞赛事及体育赛事平台

分享

如何正確使用機(jī)器學(xué)習(xí)中的訓(xùn)練集、驗(yàn)證集和測試集?

 LibraryPKU 2019-07-04

訓(xùn)練集、驗(yàn)證集和測試集,林林總總的數(shù)據(jù)集合類型,到底該怎么選、怎么用?看過這篇教程后,你就能游刃有余地處理它們了。

1

   

問題

審稿的時(shí)候,不止一次,我遇到作者錯(cuò)誤使用數(shù)據(jù)集合跑模型準(zhǔn)確率,并和他人成果比較的情況。

他們的研究創(chuàng)意有的很新穎,應(yīng)用價(jià)值較高,工作可能也做了著實(shí)不少。

但因?qū)Ρ确椒ㄥe(cuò)誤,得出來的結(jié)果,不具備說服力。幾乎全部都需要返工。

這里,我?guī)湍闶崂硪幌拢撛趺词褂貌煌臄?shù)據(jù)集合:

  • 訓(xùn)練集(training set)

  • 驗(yàn)證集(validation set)

  • 測試集(test set)

目的只有一個(gè)——避免你踩同樣的坑。

其實(shí)這個(gè)問題,咱們之前的教程文章,已有涉及。

如何用 Python 和深度遷移學(xué)習(xí)做文本分類?》一文中,我曾經(jīng)給你布置了一個(gè)類似的問題。

在文章的末尾,我們對(duì)比了當(dāng)時(shí)近期研究中, Yelp 情感分類的最佳結(jié)果。

下表來自于:Shen, D., Wang, G., Wang, W., Min, M. R., Su, Q., Zhang, Y., ... & Carin, L. (2018). Baseline needs more love: On simple word-embedding-based models and associated pooling mechanisms. arXiv preprint arXiv:1805.09843.

注意這里最高的準(zhǔn)確率(Accuracy)數(shù)值,是 95.81 。

我們當(dāng)時(shí)的模型,在驗(yàn)證集上,可以獲得的準(zhǔn)確率,是這個(gè)樣子的:

97.28%,著實(shí)不低??!

于是我問你:


咱們這種對(duì)比,是否科學(xué)?



你當(dāng)時(shí)的答案是什么?

這么久過去了,又看了那么多新的教程和論文,你的答案發(fā)生變化了嗎?

現(xiàn)在咱們公布一下答案吧。

不科學(xué)。

為什么?

因?yàn)閷?duì)比方法有問題。

2

   

方法

原文中有這樣一句:


這里數(shù)據(jù)集只提供了訓(xùn)練集和“測試集”,因此我們把這個(gè)“測試集”當(dāng)做驗(yàn)證集來使用。



作為演示,數(shù)據(jù)集咱們想怎么用,就可以怎么用。

甚至你把測試集拿來做訓(xùn)練,然后在訓(xùn)練集上跑測試,都沒有人管。

但是寫學(xué)術(shù)論文,聲稱你的模型優(yōu)于已有研究,卻絕不能這么草率。

注意,比較模型效能數(shù)值結(jié)果時(shí),你只能拿不同的模型,在同樣的測試集上面比。

測試集不同,當(dāng)然不可以。

但模型A用測試集,模型B用驗(yàn)證集(與A的測試集數(shù)據(jù)完全一致)比,可以嗎?

很多人就會(huì)混淆了,覺得沒問題啊。既然數(shù)據(jù)都一樣,管它叫做什么名稱呢?

可是請(qǐng)你注意,哪怕A模型用的測試集,就是B模型用的驗(yàn)證集,你也不能把這兩個(gè)集合跑出來的結(jié)果放在一起比較。

因?yàn)檫@是作弊。

你可能覺得我這樣說,頗有些吹毛求疵的意味。

咱們下面就來重新梳理一下,不同數(shù)據(jù)集合的作用。

希望你因此能看清楚,這種似乎過于嚴(yán)苛的要求,其實(shí)是很有道理的。

咱們從測試集開始談,繼而是驗(yàn)證集,最后是訓(xùn)練集。

這樣“倒過來說”的好處,是會(huì)讓你理解起來,更加透徹。

先說測試集吧。

3

   

測試

只有在同樣的測試集上,兩個(gè)(或以上)模型的對(duì)比才有效。

這就如同參加高考,兩個(gè)人考同樣一張卷子,分?jǐn)?shù)才能對(duì)比。

甲拿A地區(qū)的卷子,考了600分,乙拿B地區(qū)的卷子,考了580分。你能不能說,甲比乙成績高?

不行吧。

為了讓大家更易于比較自己的模型效果,許多不同領(lǐng)域的數(shù)據(jù)集,都已開放了。而且開放的時(shí)候,都會(huì)給你指明,哪些數(shù)據(jù)用于訓(xùn)練,哪些用于測試。

以 Yelp 數(shù)據(jù)為例。

在 AWS 上存儲(chǔ)的 fast.ai 公開數(shù)據(jù)集中,訓(xùn)練集和測試集都已為你準(zhǔn)備好。

你不需要自己進(jìn)行劃分。

大家達(dá)成共識(shí),做研究、寫論文,都用這個(gè)測試集來比拼,就可以。

所以,如果你的研究,是靠著比別人的模型效果來說事兒,那就一定先要弄明白對(duì)方的測試集是什么。

但是,這個(gè)聽起來很容易達(dá)成的目標(biāo),實(shí)踐中卻很容易遇到困難。

因?yàn)橛械娜藢懻撐模矚g把數(shù)據(jù)和代碼藏著掖著,生怕別人用了去。

他們一般只提一下,是在某個(gè)公開數(shù)據(jù)集上切了一部分出來,作為測試集。

測試數(shù)據(jù)集不發(fā)布,切分方法(包括工具)和隨機(jī)種子選取辦法也不公開。

這是非常不靠譜的行為,純屬自娛自樂。

作為嚴(yán)肅的審稿人,根本就不應(yīng)該允許這樣的研究發(fā)表。

因?yàn)闄C(jī)器學(xué)習(xí)研究的數(shù)據(jù)集不開放,便基本上沒有可重復(fù)性(Reproducibility)。

如果你沒有辦法精確重復(fù)他的模型訓(xùn)練和測試過程,那么他想?yún)R報(bào)多高的準(zhǔn)確率,就純憑個(gè)人愛好了。

當(dāng)然,我們不是活在理想世界的。

你在某一個(gè)領(lǐng)域,用機(jī)器學(xué)習(xí)做應(yīng)用研究的時(shí)候,面對(duì)這種無法重復(fù)已發(fā)表論文的情境,該怎么辦?

直接用他聲稱的結(jié)果與你的實(shí)際運(yùn)行結(jié)果比較,你可能是在追逐海市蜃樓。累到氣喘吁吁,甚至懷疑自我的程度,也徒勞無功。

忽視它?

也不行。

審稿人那關(guān)你過不去。

人家會(huì)說,某某研究跟你用的是一樣的數(shù)據(jù),準(zhǔn)確率已經(jīng)達(dá)到98%,你的才96%,有什么發(fā)表的意義呢?

看,左右為難不是?

其實(shí)解決辦法很簡單。

不要考慮對(duì)方聲稱達(dá)到了多高準(zhǔn)確率。把他提供給你的數(shù)據(jù)全集,自行切分。之后復(fù)現(xiàn)對(duì)方的模型,重新跑。

模型架構(gòu),一般都是要求匯報(bào)的,所以這幾乎不是問題。

至于這種復(fù)現(xiàn),越是復(fù)雜的模型,我越推薦你用 PyTorch 。

之后把你的模型,和復(fù)現(xiàn)的對(duì)方模型在同樣的測試集上做對(duì)比,就可以了。

當(dāng)然,論文里要寫上一句:


由于某篇文章未提供代碼與具體數(shù)據(jù)切分說明,帶來可重復(fù)性問題,我們不得不獨(dú)立復(fù)現(xiàn)了其模型,并在測試集完全一致的情況下,進(jìn)行了比對(duì)。



這里多說一句,一定要保證你自己的研究,是可重復(fù)的。

不要怕公布你的代碼和數(shù)據(jù)。它們不是你的獨(dú)門暗器,而是支撐你研究的憑據(jù)。

回看我們前面提到的 Yelp 公開數(shù)據(jù)的例子。

這時(shí)候你會(huì)發(fā)現(xiàn)一個(gè)奇怪的問題——為什么它只有訓(xùn)練集和測試集?

我們一直反復(fù)提到的驗(yàn)證集哪里去了?

4

   

驗(yàn)證

驗(yàn)證集,就如同高考的模擬考試。

不同于高考,模擬考只是你調(diào)整自己狀態(tài)的指示器而已。

狀態(tài)不夠滿意,你可以繼續(xù)調(diào)整。

當(dāng)然,參加過高考的同學(xué)都有經(jīng)驗(yàn)——這種調(diào)整的結(jié)果(從模擬考到高考),有可能更好,也有可能更糟糕。

回到機(jī)器學(xué)習(xí)上,那就是測試集上檢驗(yàn)的,是你最終模型的性能。

什么叫“最終模型”?

就是你參加高考時(shí)候的狀態(tài)。包括你當(dāng)時(shí)的知識(shí)儲(chǔ)備、情緒心態(tài),以及當(dāng)天的外部環(huán)境(溫度、濕度、東西是否帶齊)等。

最終模型,只有一個(gè)。

就如同每年的高考,你只能參加一回。

考成什么樣兒,就是什么樣。

而驗(yàn)證集上跑的,實(shí)際上卻是一個(gè)模型集合,集合的大小,你可能數(shù)都數(shù)不過來。

因?yàn)檫@里存在著超參數(shù)(hyper-parameter)設(shè)置的問題。不同超參數(shù)組合,就對(duì)應(yīng)著不同的潛在模型。

驗(yàn)證集的存在,是為了從這一堆可能的模型中,幫你表現(xiàn)最好的那個(gè)。

注意這里的表現(xiàn),是指在驗(yàn)證集上的表現(xiàn)。

好比說,有個(gè)超參數(shù)叫做訓(xùn)練輪數(shù)(epochs)。

在同樣的訓(xùn)練集上,訓(xùn)練3輪和訓(xùn)練10輪,結(jié)果可能是不一樣的模型。它們的參數(shù)并不相同。

那么到底是訓(xùn)練3輪好,還是10輪好?

或者二者都不好,應(yīng)該訓(xùn)練6輪?

這種決策,就需要在訓(xùn)練后,在驗(yàn)證集上“是騾子是馬牽出來溜溜”。

如果發(fā)現(xiàn)訓(xùn)練3輪效果更好,那么就應(yīng)該丟棄掉訓(xùn)練6輪、10輪的潛在模型,只用訓(xùn)練3輪的結(jié)果。

這對(duì)應(yīng)著一種機(jī)器學(xué)習(xí)正則化(Regularization)方式——提早停止訓(xùn)練(early stopping)。

其他的超參數(shù)選取,你也可以舉一反三??傊褪前凑镇?yàn)證集的效果,來選超參數(shù),從而決定最終模型。

下一步,自然就是把它交給測試集,去檢驗(yàn)。這個(gè)我們前面已經(jīng)詳細(xì)講解過了。

至于這個(gè)最終選擇模型,在新數(shù)據(jù)集(測試集)上表現(xiàn)如何,沒人能打包票。

所以,回到咱們之前的問題。在《如何用 Python 和深度遷移學(xué)習(xí)做文本分類?》一文中,我故意用驗(yàn)證集上篩選出的最好模型,在驗(yàn)證集上跑出來分?jǐn)?shù),當(dāng)成是測試成績,這顯然是不妥當(dāng)?shù)摹?/p>

你不能把同樣的題做他個(gè)三五遍,然后從中找最高分去跟別人比。

即便你的模擬考,用的是別人的高考真題。兩張卷子完全一樣,也沒有說服力。

所以你看,驗(yàn)證集的目的,不是比拼最終模型效果的。

因此,怎么設(shè)定驗(yàn)證集,劃分多少數(shù)據(jù)做驗(yàn)證,其實(shí)是每個(gè)研究者需要獨(dú)立作出的決策,不應(yīng)該強(qiáng)行設(shè)定為一致。

這就如同我們不會(huì)在高考前去檢查每個(gè)考生,是否做過一樣多的模擬試卷,且試卷內(nèi)容也要一致。

極端點(diǎn)兒說,即便一個(gè)考生沒參加過模擬考,可高考成績突出,你也不能不算他的成績,對(duì)吧?

不過,講到這里,我們就得要把訓(xùn)練集拿進(jìn)來,一起說說了。

5

   

訓(xùn)練

如果測試集是高考試卷,驗(yàn)證集是模擬考試卷,那么訓(xùn)練集呢?

大概包括很多東西,例如作業(yè)題、練習(xí)題。

另外,我們上高三那時(shí)候(噫吁嚱,已經(jīng)上個(gè)世紀(jì)的事兒了),每周有“統(tǒng)練”,每月有“月考”。也都可以劃定在訓(xùn)練集的范疇。

減負(fù)這么多年以后,現(xiàn)在的高中生應(yīng)該沒有那么辛苦了吧?真羨慕他們。

這樣一對(duì)比,你大概能了解這幾個(gè)集合之間本應(yīng)有的關(guān)系。

學(xué)生平時(shí)練題,最希望的,就是考試能碰到原題,這樣就可以保證不必動(dòng)腦,卻做出正確答案。

所以,出模擬考卷時(shí),老師盡量要保證不要出現(xiàn)學(xué)生平時(shí)練過的題目,否則無法正確估量學(xué)生目前的復(fù)習(xí)備考狀態(tài),噪聲過高容易誤事兒。

驗(yàn)證集和訓(xùn)練集,應(yīng)該是不交疊的。這樣選擇模型的時(shí)候,才可以避免被數(shù)據(jù)交疊的因素干擾。

每個(gè)學(xué)校的模擬考,卻都恨不得能押中高考的題。這樣可以保證本校學(xué)生在高考中,可以“見多識(shí)廣”,取得更高分?jǐn)?shù)。

高考出卷子的老師,就必須盡力保證題目是全新的,以篩選出有能力的學(xué)生,而不是為高校選拔一批“見過題目,并且記住了標(biāo)準(zhǔn)答案”的學(xué)生。

因此,測試集應(yīng)該既不同于訓(xùn)練集,又不同于驗(yàn)證集。

換句話說,三個(gè)數(shù)據(jù)集合,最好都沒有重疊。

學(xué)生應(yīng)該學(xué)會(huì)舉一反三,學(xué)會(huì)的是知識(shí)和規(guī)律。

用知識(shí)和規(guī)律,去處理新的問題。

我們對(duì)機(jī)器模型的期許,其實(shí)也一樣。

在學(xué)術(shù)論文中,你見到的大部分用于機(jī)器學(xué)習(xí)模型對(duì)比的公開數(shù)據(jù)集(例如 fast.ai 公開數(shù)據(jù)集中的 Yelp, IMDB, ImageNet 等),都符合這一要求。

然而,例外肯定是有的。

例如我在 INFO 5731 課程里面給學(xué)生布置的某期末項(xiàng)目備選項(xiàng),來源于某學(xué)術(shù)類數(shù)據(jù)科學(xué)競賽,目標(biāo)是社交媒體醫(yī)學(xué)名詞歸一化。

其中就有數(shù)據(jù),既出現(xiàn)在了訓(xùn)練集,又出現(xiàn)在了驗(yàn)證集,甚至測試集里也會(huì)有。

面對(duì)這種問題,你該怎么辦?

你怎么判斷自己的模型,究竟是強(qiáng)行記住了答案,還是掌握了文本中的規(guī)律?

這個(gè)問題,作為思考題留給你。

我希望在知識(shí)星球中和熱愛學(xué)習(xí)的你,做進(jìn)一步討論。

另外的一個(gè)問題,是訓(xùn)練集要不要和別人的完全一致?

一般來說,如果你要強(qiáng)調(diào)自己的模型優(yōu)于其他人,那么就要保證是在同樣的訓(xùn)練集上訓(xùn)練出來。

回顧深度學(xué)習(xí)的三大要素:

  • 數(shù)據(jù)(Data)

  • 架構(gòu)(Architecture)

  • 損失(Loss)

如果你的訓(xùn)練數(shù)據(jù),比別人多得多,那么模型自然見多識(shí)廣。

對(duì)于深度學(xué)習(xí)而言,如果訓(xùn)練數(shù)據(jù)豐富,就可以顯著避免過擬合(Overfitting)的發(fā)生。

GPT-2 模型,就是因?yàn)榫邆淞撕A?Reddit 數(shù)據(jù)做訓(xùn)練,才能傲視其他語言模型(Language Model),甚至以安全為理由,拒絕開放模型。

但是這時(shí)候,你跟別人橫向比較,似乎就不大公平了。

你的架構(gòu)設(shè)計(jì),未必更好。假使對(duì)方用同樣多的數(shù)據(jù)訓(xùn)練,結(jié)果可能不必你差,甚至?xí)鼉?yōu)。

這就如同一個(gè)復(fù)讀了5年的學(xué)生甲,充分利用每一分每一秒,做了比應(yīng)屆生乙多5倍的卷子。結(jié)果在高考的時(shí)候,甲比乙多考了1分(同一張卷子)。

你能說甲比乙更有學(xué)習(xí)能力,學(xué)習(xí)效果更好嗎?

6

   

小結(jié)

這篇教程里,我為你梳理了機(jī)器學(xué)習(xí)中常見的三種不同數(shù)據(jù)集類別,即:

  • 訓(xùn)練集

  • 驗(yàn)證集

  • 測試集

咱們一一分析了其作用,并且用“考試”這個(gè)大多數(shù)人都參加過,且容易理解的例子做了詮釋。

希望讀過本文之后,你的概念架構(gòu)更為清晰,不再會(huì)誤用它們,避免給自己的研究挖坑。

祝深度學(xué)習(xí)愉快,論文發(fā)表順利哦!

7

   

作業(yè)

這里給你留一道思考題:

有的時(shí)候,你看到有人把訓(xùn)練集切分固定的一部分,作為驗(yàn)證集。但是另一些時(shí)候,你會(huì)看到有人采用“交叉驗(yàn)證”的方式,即每一輪訓(xùn)練,都動(dòng)態(tài)輪轉(zhuǎn)著,把一部分的數(shù)據(jù),作為驗(yàn)證集。對(duì)吧?

那么問題來了,什么樣的情況下,你應(yīng)該采用第一種方式,即固定分配驗(yàn)證集?什么樣的情況下,你應(yīng)該采用“交叉驗(yàn)證”方式呢?后者的優(yōu)勢(shì)和缺點(diǎn),又各是什么呢?

歡迎你留言回復(fù),寫下自己的判斷標(biāo)準(zhǔn)與原因闡述。咱們一起交流討論。

8

   

征稿

One more thing ……

這里還有個(gè)征稿啟事。

國際學(xué)術(shù)期刊 Information Discovery and Delivery 要做一期關(guān)于 “Information Discovery with Machine Intelligence for Language” 的特刊(Special Issue)。

本人是客座編輯(guest editor)之一。另外兩位分別是:

  • 我在北得克薩斯大學(xué)(University of North Texas)的同事 Dr. Alexis Palmer 教授

  • 南京理工大學(xué)章成志教授

征稿的主題包括但不限于:

  • Language Modeling for Information Retrieval

  • Transfer Learning for Text Classification

  • Word and Character Representations for Cross-Lingual Analysis

  • Information Extraction and Knowledge Graph Building

  • Discourse Analysis at Sentence Level and Beyond

  • Synthetic Text Data for Machine Learning Purposes

  • User Modeling and Information Recommendation based on Text Analysis

  • Semantic Analysis with Machine Learning

  • Other applications of CL/NLP for Information Discovery

  • Other related topics

具體的征稿啟事(Call for Paper),請(qǐng)查看 Emerald 期刊官網(wǎng)的這個(gè)鏈接(http://dwz.win/c2Q)。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多